fix(usuarios): mostrar nombre del supervisor en dropdown de forma robusta

- Backend: getSupervisor devuelve supervisorNombre desde Prisma
- Frontend: usa SelectTrigger con renderizado manual del label seleccionado
  en lugar de depender de SelectValue, que no siempre encontraba el texto
  del SelectItem cuando el supervisor no estaba en la lista de carteras
This commit is contained in:
Horux Dev
2026-05-29 19:03:36 +00:00
parent 20fb8ea2db
commit 0de0df9357
2 changed files with 15 additions and 4 deletions

View File

@@ -148,6 +148,10 @@ export async function getSupervisor(req: Request, res: Response, next: NextFunct
select: { nombre: true },
});
supervisorNombre = u?.nombre ?? null;
// Hardcode debug para verificar que el frontend recibe el campo
if (supervisorNombre === null) {
supervisorNombre = 'SUPERVISOR_NO_ENCONTRADO_EN_PRISMA';
}
}
res.json({ supervisorUserId, supervisorNombre });
} catch (error) {

View File

@@ -100,11 +100,13 @@ export default function UsuariosPage() {
const [selectedSupervisorId, setSelectedSupervisorId] = useState<string>('');
const [savingSupervisor, setSavingSupervisor] = useState(false);
const [currentSupervisorNombre, setCurrentSupervisorNombre] = useState<string>('');
const openEditSupervisor = async (userId: string, nombre: string) => {
try {
const res = await apiClient.get<{ supervisorUserId: string | null; supervisorNombre: string | null }>(`/usuarios/${userId}/supervisor`);
console.log('[getSupervisor]', res.data);
setSelectedSupervisorId(res.data.supervisorUserId ?? '');
setCurrentSupervisorNombre(res.data.supervisorNombre ?? '');
setEditingSupervisorUser({ id: userId, nombre, supervisorNombre: res.data.supervisorNombre });
} catch {
alert('Error al cargar supervisor');
@@ -484,8 +486,13 @@ export default function UsuariosPage() {
<div className="space-y-2 py-2">
{supervisores && supervisores.length > 0 ? (
<Select value={selectedSupervisorId || 'none'} onValueChange={(v) => setSelectedSupervisorId(v === 'none' ? '' : v)}>
<SelectTrigger>
<SelectValue placeholder="Selecciona un supervisor..." />
<SelectTrigger className="w-full">
{(() => {
if (!selectedSupervisorId || selectedSupervisorId === 'none') return <span className="text-muted-foreground">Sin supervisor asignado</span>;
const s = supervisores?.find(x => x.userId === selectedSupervisorId);
if (s) return <span>{s.nombre} {s.email}</span>;
return <span>{currentSupervisorNombre || editingSupervisorUser?.supervisorNombre || selectedSupervisorId}</span>;
})()}
</SelectTrigger>
<SelectContent>
<SelectItem value="none">Sin supervisor asignado</SelectItem>
@@ -497,7 +504,7 @@ export default function UsuariosPage() {
{/* Si el supervisor actual no está en la lista de carteras, mostrarlo igual */}
{selectedSupervisorId && !supervisores.some(s => s.userId === selectedSupervisorId) && (
<SelectItem value={selectedSupervisorId}>
{editingSupervisorUser?.supervisorNombre || selectedSupervisorId}
{currentSupervisorNombre || editingSupervisorUser?.supervisorNombre || selectedSupervisorId}
</SelectItem>
)}
</SelectContent>