fix(usuarios): mostrar nombre del supervisor al editar auxiliar

- Backend getSupervisor ahora devuelve supervisorNombre buscando en Prisma
- Frontend usa supervisorNombre para mostrar en Select cuando el supervisor
  no está en la lista de carteras/supervisores
This commit is contained in:
Horux Dev
2026-05-29 17:24:18 +00:00
parent 2f49fdc9b7
commit 910c50d870
2 changed files with 22 additions and 5 deletions

View File

@@ -139,7 +139,16 @@ export async function getSupervisor(req: Request, res: Response, next: NextFunct
LIMIT 1`, LIMIT 1`,
[userId], [userId],
); );
res.json({ supervisorUserId: rows[0]?.supervisor_user_id ?? null }); const supervisorUserId = rows[0]?.supervisor_user_id ?? null;
let supervisorNombre: string | null = null;
if (supervisorUserId) {
const u = await prisma.user.findUnique({
where: { id: supervisorUserId },
select: { nombre: true },
});
supervisorNombre = u?.nombre ?? null;
}
res.json({ supervisorUserId, supervisorNombre });
} catch (error) { } catch (error) {
next(error); next(error);
} }

View File

@@ -96,15 +96,15 @@ export default function UsuariosPage() {
const [savingAccesos, setSavingAccesos] = useState(false); const [savingAccesos, setSavingAccesos] = useState(false);
// Edit supervisor modal (para auxiliares) // Edit supervisor modal (para auxiliares)
const [editingSupervisorUser, setEditingSupervisorUser] = useState<{ id: string; nombre: string } | null>(null); const [editingSupervisorUser, setEditingSupervisorUser] = useState<{ id: string; nombre: string; supervisorNombre?: string | null } | null>(null);
const [selectedSupervisorId, setSelectedSupervisorId] = useState<string>(''); const [selectedSupervisorId, setSelectedSupervisorId] = useState<string>('');
const [savingSupervisor, setSavingSupervisor] = useState(false); const [savingSupervisor, setSavingSupervisor] = useState(false);
const openEditSupervisor = async (userId: string, nombre: string) => { const openEditSupervisor = async (userId: string, nombre: string) => {
try { try {
const res = await apiClient.get<{ supervisorUserId: string | null }>(`/usuarios/${userId}/supervisor`); const res = await apiClient.get<{ supervisorUserId: string | null; supervisorNombre: string | null }>(`/usuarios/${userId}/supervisor`);
setSelectedSupervisorId(res.data.supervisorUserId ?? ''); setSelectedSupervisorId(res.data.supervisorUserId ?? '');
setEditingSupervisorUser({ id: userId, nombre }); setEditingSupervisorUser({ id: userId, nombre, supervisorNombre: res.data.supervisorNombre });
} catch { } catch {
alert('Error al cargar supervisor'); alert('Error al cargar supervisor');
} }
@@ -483,7 +483,9 @@ 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><SelectValue placeholder="Selecciona un supervisor..." /></SelectTrigger> <SelectTrigger>
<SelectValue placeholder="Selecciona un supervisor..." />
</SelectTrigger>
<SelectContent> <SelectContent>
<SelectItem value="none">Sin supervisor asignado</SelectItem> <SelectItem value="none">Sin supervisor asignado</SelectItem>
{supervisores.map(s => ( {supervisores.map(s => (
@@ -491,6 +493,12 @@ export default function UsuariosPage() {
{s.nombre} {s.email} {s.nombre} {s.email}
</SelectItem> </SelectItem>
))} ))}
{/* 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}
</SelectItem>
)}
</SelectContent> </SelectContent>
</Select> </Select>
) : ( ) : (