Profile
El componente Profile
es la vista principal para la gestión del perfil de usuario.
Permite visualizar y editar información personal, cambiar la foto de perfil y actualizar la contraseña.
También adapta su interfaz dependiendo del tipo de usuario (INDIVIDUAL
, EMPRESARIAL
, EQUIPO
) y su rol (ADMIN
, DESARROLLADOR
, etc.).
🔍 Ubicación
src/pages/perfil/CompletaProfile.tsx
🛠️ Dependencias
-
React Hooks
useState
yuseEffect
para el manejo del estado y ciclo de vida.
-
Custom Hooks
useToast
para mostrar notificaciones de éxito o error.
-
Iconos
Edit
,Save
,User
,Building2
desdelucide-react
.
-
Componentes
PersonalInfo
→ Muestra y edita la información personal.SecuritySettings
→ Configuración de seguridad y cambio de contraseña.
-
Servicios
getUserProfile
,updateUserProfile
,uploadUserProfilePhoto
,getEmpresaInfo
→ Gestión de datos de usuario y empresa.changeUserPassword
→ Cambio de contraseña.
-
Tipos
AxiosErrorResponse
yUserDTO
para tipado TypeScript.
📂 Interfaces
UserProfile
interface UserProfile {
type: 'INDIVIDUAL' | 'EMPRESARIAL' | 'EQUIPO';
username: string;
name: string;
email: string;
phone: string;
address: string;
companyName?: string;
nit?: string;
role?: string;
fotoPerfil?: string;
empresaId?: number;
}
- Define la estructura de los datos que se manejan en el perfil.
- Permite identificar el tipo de usuario y su información asociada.
🔄 Ciclo de Vida
useEffect → Cargar perfil del usuario
- Obtiene el
idUsuario
desdelocalStorage
. - Llama a
getUserProfile
para traer la información. - Si el usuario es de tipo
EQUIPO
y tieneempresaId
, llama agetEmpresaInfo
. - Guarda la información en el estado
userProfile
.
📌 Funciones Principales
handleSaveProfile
- Guarda cambios en el perfil.
- Si hay una nueva foto, llama a
uploadUserProfilePhoto
. - Actualiza la información en el backend con
updateUserProfile
. - Refresca los datos llamando a
getUserProfile
. - Muestra notificación de éxito o error.
handlePasswordSubmit
- Valida que las contraseñas coincidan.
- Envía la solicitud de cambio a
changeUserPassword
. - Resetea los campos y cierra el modal si es exitoso.
- Muestra mensajes de error detallados si ocurre un fallo.
📊 Variables Derivadas
isAdmin
→ Usuario con rolADMIN
.isDev
→ Usuario con rolDESARROLLADOR
.isIndividual
→ Usuarios individuales, admin o dev.isEmpresa
→ Usuarios empresariales.isEquipo
→ Usuarios de equipo.
🖼️ Renderizado Condicional
-
Cabecera:
- Muestra icono de usuario o empresa según tipo.
- Botón para Editar Perfil o Guardar Cambios.
-
Tabs:
Información Personal
→ Muestra componentePersonalInfo
.Seguridad
→ Muestra componenteSecuritySettings
.
📌 Flujo General
- Carga inicial → Trae datos desde API.
- Edición → Cambia a modo edición y permite modificar datos.
- Guardado → Llama servicios y refresca datos.
- Seguridad → Permite cambiar contraseña de forma segura.
🚀 Buenas Prácticas en el Código
- ✅ Validaciones antes de llamadas a API.
- ✅ Uso de
toast
para feedback rápido. - ✅ Separación clara entre datos personales y seguridad.
- ✅ Tipado estricto con TypeScript.