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:
@@ -148,6 +148,10 @@ export async function getSupervisor(req: Request, res: Response, next: NextFunct
|
|||||||
select: { nombre: true },
|
select: { nombre: true },
|
||||||
});
|
});
|
||||||
supervisorNombre = u?.nombre ?? null;
|
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 });
|
res.json({ supervisorUserId, supervisorNombre });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -100,11 +100,13 @@ export default function UsuariosPage() {
|
|||||||
const [selectedSupervisorId, setSelectedSupervisorId] = useState<string>('');
|
const [selectedSupervisorId, setSelectedSupervisorId] = useState<string>('');
|
||||||
const [savingSupervisor, setSavingSupervisor] = useState(false);
|
const [savingSupervisor, setSavingSupervisor] = useState(false);
|
||||||
|
|
||||||
|
const [currentSupervisorNombre, setCurrentSupervisorNombre] = useState<string>('');
|
||||||
|
|
||||||
const openEditSupervisor = async (userId: string, nombre: string) => {
|
const openEditSupervisor = async (userId: string, nombre: string) => {
|
||||||
try {
|
try {
|
||||||
const res = await apiClient.get<{ supervisorUserId: string | null; supervisorNombre: string | null }>(`/usuarios/${userId}/supervisor`);
|
const res = await apiClient.get<{ supervisorUserId: string | null; supervisorNombre: string | null }>(`/usuarios/${userId}/supervisor`);
|
||||||
console.log('[getSupervisor]', res.data);
|
|
||||||
setSelectedSupervisorId(res.data.supervisorUserId ?? '');
|
setSelectedSupervisorId(res.data.supervisorUserId ?? '');
|
||||||
|
setCurrentSupervisorNombre(res.data.supervisorNombre ?? '');
|
||||||
setEditingSupervisorUser({ id: userId, nombre, supervisorNombre: res.data.supervisorNombre });
|
setEditingSupervisorUser({ id: userId, nombre, supervisorNombre: res.data.supervisorNombre });
|
||||||
} catch {
|
} catch {
|
||||||
alert('Error al cargar supervisor');
|
alert('Error al cargar supervisor');
|
||||||
@@ -484,8 +486,13 @@ export default function UsuariosPage() {
|
|||||||
<div className="space-y-2 py-2">
|
<div className="space-y-2 py-2">
|
||||||
{supervisores && supervisores.length > 0 ? (
|
{supervisores && supervisores.length > 0 ? (
|
||||||
<Select value={selectedSupervisorId || 'none'} onValueChange={(v) => setSelectedSupervisorId(v === 'none' ? '' : v)}>
|
<Select value={selectedSupervisorId || 'none'} onValueChange={(v) => setSelectedSupervisorId(v === 'none' ? '' : v)}>
|
||||||
<SelectTrigger>
|
<SelectTrigger className="w-full">
|
||||||
<SelectValue placeholder="Selecciona un supervisor..." />
|
{(() => {
|
||||||
|
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>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="none">Sin supervisor asignado</SelectItem>
|
<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 */}
|
{/* Si el supervisor actual no está en la lista de carteras, mostrarlo igual */}
|
||||||
{selectedSupervisorId && !supervisores.some(s => s.userId === selectedSupervisorId) && (
|
{selectedSupervisorId && !supervisores.some(s => s.userId === selectedSupervisorId) && (
|
||||||
<SelectItem value={selectedSupervisorId}>
|
<SelectItem value={selectedSupervisorId}>
|
||||||
{editingSupervisorUser?.supervisorNombre || selectedSupervisorId}
|
{currentSupervisorNombre || editingSupervisorUser?.supervisorNombre || selectedSupervisorId}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
)}
|
)}
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
|
|||||||
Reference in New Issue
Block a user