import { useEffect, useState, type FormEvent } from 'react' import { ErrorLogin, getSesion, login, logout, type UsuarioSesion } from '../services/auth' import { getMe, getUsuariosMonday, guardarVinculoMonday, type UsuarioMonday } from '../services/api' const labelEstilo = 'block text-xs font-bold tracking-widest text-neutral-500 uppercase' const inputEstilo = 'mt-2 w-full border border-neutral-200 bg-white px-3 py-2 text-sm text-neutral-900 focus:border-neutral-900' /** * Sección "Configuración de cuenta": login inline y, con sesión, el vínculo * con el usuario de Monday (alimenta round-robin, mis-leads y alertas). */ export function ConfiguracionCuenta() { const [conSesion, setConSesion] = useState(() => getSesion() !== null) // ---------- Login ---------- const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [entrando, setEntrando] = useState(false) const [errorLogin, setErrorLogin] = useState('') // ---------- Perfil + usuarios Monday ---------- const [perfil, setPerfil] = useState(null) const [cargandoPerfil, setCargandoPerfil] = useState(false) const [usuarios, setUsuarios] = useState(null) const [errorUsuarios, setErrorUsuarios] = useState('') const [seleccion, setSeleccion] = useState('') const [guardando, setGuardando] = useState(false) const [aviso, setAviso] = useState('') const [errorGuardar, setErrorGuardar] = useState('') useEffect(() => { if (!conSesion) return setCargandoPerfil(true) getMe() .then((u) => { setPerfil(u) setSeleccion(u.mondayUserId !== null ? String(u.mondayUserId) : '') }) .catch(() => setErrorGuardar('No se pudo cargar tu perfil.')) .finally(() => setCargandoPerfil(false)) cargarUsuarios() }, [conSesion]) const cargarUsuarios = () => { setErrorUsuarios('') getUsuariosMonday() .then(setUsuarios) .catch(() => { setUsuarios(null) setErrorUsuarios('No se pudo cargar la lista de usuarios de Monday.') }) } const entrar = async (e: FormEvent) => { e.preventDefault() setEntrando(true) setErrorLogin('') try { await login(username, password) setUsername('') setPassword('') setConSesion(true) } catch (err) { setErrorLogin(err instanceof ErrorLogin ? err.message : 'No se pudo iniciar sesión') } finally { setEntrando(false) } } const guardar = async (mondayUserId: number | null) => { setGuardando(true) setAviso('') setErrorGuardar('') try { const actualizado = await guardarVinculoMonday(mondayUserId) setPerfil(actualizado) setSeleccion(actualizado.mondayUserId !== null ? String(actualizado.mondayUserId) : '') setAviso(mondayUserId === null ? 'Vínculo con Monday eliminado' : 'Vínculo con Monday guardado') } catch { setErrorGuardar('No se pudo guardar el vínculo. Intenta de nuevo.') } finally { setGuardando(false) } } const cerrarSesion = () => { logout() setPerfil(null) setUsuarios(null) setConSesion(false) } const vinculado = perfil?.mondayUserId != null ? (usuarios?.find((u) => u.id === perfil.mondayUserId) ?? null) : null return (

Configuración de cuenta

{!conSesion ? (
void entrar(e)} className="mt-8 max-w-sm">

Inicia sesión para vincular tu usuario de Monday.

setUsername(e.target.value)} className={inputEstilo} required />
setPassword(e.target.value)} className={inputEstilo} required />
{errorLogin && (

{errorLogin}

)}
) : (
{cargandoPerfil &&

Cargando tu perfil…

} {perfil && ( <>

Sesión: {perfil.nombre}

Vínculo Monday actual:{' '} {perfil.mondayUserId === null ? ( sin vincular ) : vinculado ? ( {vinculado.nombre} ({vinculado.email}) ) : ( ID {perfil.mondayUserId} )}

{errorUsuarios ? (

{errorUsuarios}

) : usuarios === null ? (

Cargando usuarios de Monday…

) : (
{perfil.mondayUserId !== null && ( )}
)} {aviso && (

{aviso}

)} {errorGuardar && (

{errorGuardar}

)} )}
)}
) }