96 lines
2.5 KiB
TypeScript
96 lines
2.5 KiB
TypeScript
'use client';
|
||
|
||
import { useEffect, useState } from 'react';
|
||
import Header from '@/components/Header';
|
||
import ProfileForm from '@/components/profile/ProfileForm';
|
||
|
||
interface UserData {
|
||
id: string;
|
||
identificador: string;
|
||
ativo: boolean;
|
||
superadmin: boolean;
|
||
"auth-id-appwrite": string;
|
||
nome: string;
|
||
email: string;
|
||
nivel: string;
|
||
"registro-completo": boolean;
|
||
enderecos: string[];
|
||
empresasDados: string[];
|
||
"nome-social": string;
|
||
cpf: string;
|
||
createdAt: string;
|
||
updatedAt: string;
|
||
}
|
||
|
||
export default function MeuPerfilPage() {
|
||
const [usuarioData, setUsuarioData] = useState<UserData | null>(null);
|
||
const [loading, setLoading] = useState(true);
|
||
const [error, setError] = useState<string | null>(null);
|
||
|
||
useEffect(() => {
|
||
const fetchUser = async () => {
|
||
try {
|
||
const token = localStorage.getItem('access_token');
|
||
|
||
if (!token) {
|
||
setError('Token de acesso não encontrado');
|
||
setLoading(false);
|
||
return;
|
||
}
|
||
|
||
const response = await fetch(`${process.env.NEXT_PUBLIC_BFF_API_URL}/auth/me`, {
|
||
headers: {
|
||
Authorization: `Bearer ${token}`,
|
||
'Content-Type': 'application/json',
|
||
},
|
||
});
|
||
|
||
if (!response.ok) {
|
||
throw new Error(`Erro HTTP: ${response.status}`);
|
||
}
|
||
|
||
const userData = await response.json();
|
||
setUsuarioData(userData);
|
||
} catch (error) {
|
||
console.error('Erro ao carregar usuário:', error);
|
||
setError('Erro ao carregar dados do usuário');
|
||
} finally {
|
||
setLoading(false);
|
||
}
|
||
};
|
||
fetchUser();
|
||
}, []);
|
||
|
||
if (loading) {
|
||
return (
|
||
<div className="min-h-screen bg-gray-50 flex items-center justify-center">
|
||
<div className="text-center">
|
||
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto mb-4"></div>
|
||
<p className="text-gray-600">Carregando...</p>
|
||
</div>
|
||
</div>
|
||
);
|
||
}
|
||
|
||
if (error) {
|
||
return (
|
||
<div className="min-h-screen bg-gray-50 flex items-center justify-center">
|
||
<div className="text-center">
|
||
<div className="text-red-500 text-xl mb-4">⚠️ Erro</div>
|
||
<p className="text-gray-600">{error}</p>
|
||
</div>
|
||
</div>
|
||
);
|
||
}
|
||
|
||
return (
|
||
<div className="min-h-screen bg-gray-50">
|
||
<Header
|
||
user={usuarioData}
|
||
title="Meu perfil"
|
||
subtitle="Gerencie suas informações pessoais"
|
||
/>
|
||
<ProfileForm usuarioData={usuarioData} />
|
||
</div>
|
||
);
|
||
}
|