Complete Profile
CompleteProfile es una página que permite a los usuarios completar su perfil personal para poder usar todas las funcionalidades de ProductTrack.
El usuario puede actualizar su foto de perfil, nombre de usuario, teléfono, dirección y establecer una nueva contraseña.
🔍 Ubicación
src/pages/perfil/CompletaProfile.tsx
Importaciones Principales
- React hooks (
useState,useEffect) - Navegación con
useNavigatede React Router - Iconos de
lucide-reactpara UI - Servicios para obtener y actualizar datos (
getUserById,getEmpresaById,updateUsuario,subirFotoPerfil) - Contexto de usuario (
useUser) - Hook para mostrar notificaciones (
useToast) - Tipos TypeScript (
UserDTO,AxiosError)
Estado Interno (useState)
isSubmitting: controla el estado de envío del formulario.showNewPasswordyshowConfirmPassword: toggles para mostrar/ocultar contraseñas.usernameError: mensaje de error específico para el nombre de usuario.formData: objeto con los campos del formulario (teléfono, dirección, nueva contraseña, confirmación, username y foto).empresaNombre: nombre de la empresa asociada al usuario (por defecto "Sin empresa").correoUsuario: correo electrónico del usuario.
Ciclo de Vida (useEffect)
- Al montar, carga los datos del usuario actual y, si existe empresaId, carga también el nombre de la empresa.
- Maneja errores mostrando en consola.
Funciones Principales
handleInputChange(field, value)
- Actualiza el estado
formDatacon el campo modificado. - Limpia error de usuario si se está modificando el campo
username.
handleSubmit(e)
- Valida que la nueva contraseña esté presente y coincida con la confirmación.
- Construye objeto
dataToSendcon los campos modificados. - Si se agregó foto, la sube antes y asigna la URL resultante.
- Llama a
updateUsuariopara actualizar datos en backend. - Muestra mensajes de éxito o error, incluyendo manejo específico para errores de usuario duplicado.
- Navega a la página principal luego de actualizar.
Renderizado
- Cabecera con ícono, título y texto motivacional para completar perfil.
- Sección con información ya registrada: correo, empresa y rol en equipo.
- Formulario para editar:
- Foto de perfil (input file)
- Nombre de usuario (input texto)
- Teléfono (input tel)
- Dirección (input texto)
- Nueva contraseña y confirmación (input password con toggle de visibilidad)
- Botón para enviar el formulario (deshabilitado mientras se envía).
- Nota informativa sobre obligatoriedad de campos y beneficios de completar perfil.
Notas de Usabilidad
- Campos obligatorios marcados con asterisco.
- El botón cambia su texto a "Guardando..." durante el proceso.
- Errores específicos para nombre de usuario ayudan a mejorar UX.
- La foto de perfil se sube antes de actualizar el resto de datos.
Consideraciones Técnicas
- El componente depende del contexto
useUserpara obtener el usuario autenticado. - La navegación es controlada con
useNavigatepara redireccionar tras completar el perfil. - Utiliza manejo de errores Axios para mostrar mensajes precisos.
- Controla la visibilidad de las contraseñas para mejorar la experiencia.
Código de ejemplo de uso
import CompleteProfile from '../pages/profile/CompleteProfile';
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/completar-perfil" element={<CompleteProfile />} />
{/* otras rutas */}
</Routes>
</BrowserRouter>
);
}