From 7675df4ba1f8288a0eb6a6468bf73e2ff4090f3d Mon Sep 17 00:00:00 2001 From: Sergio Nicolas Lavaise Date: Sun, 9 Aug 2026 18:29:39 +0000 Subject: [PATCH] Fix responsive layouts for Internaciones/Evoluciones tables and currentUser undefined error --- src/lib/utils.ts | 12 ++ src/sections/EditIngreso.tsx | 13 +- src/sections/Evoluciones.tsx | 161 +++++++++++---------- src/sections/HistoriaClinica.tsx | 13 +- src/sections/Internaciones.tsx | 208 ++++++++++++++------------- src/sections/MapaCamas.tsx | 17 ++- src/sections/NuevoIngreso.tsx | 11 +- src/sections/SeccionIndicaciones.tsx | 28 ++-- 8 files changed, 257 insertions(+), 206 deletions(-) diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 23d1bea..a047bab 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,5 +1,6 @@ import { clsx, type ClassValue } from "clsx" import { twMerge } from "tailwind-merge" +import type { Usuario } from '@/types' export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) @@ -12,3 +13,14 @@ export function formatDateDDMMYYYY(dateString: string): string { const [year, month, day] = parts; return `${day}-${month}-${year}`; } + +export function getNombreProfesional(user?: Usuario | null): string { + if (!user) return 'Admin'; + if (user.rol === 'admin') return 'Admin'; + const apellido = user.apellido?.trim() || ''; + const nombre = user.nombre?.trim() || ''; + if (apellido && nombre) return `${apellido}, ${nombre}`; + if (apellido) return apellido; + if (nombre) return nombre; + return 'Admin'; +} diff --git a/src/sections/EditIngreso.tsx b/src/sections/EditIngreso.tsx index ce3bba5..a33583d 100644 --- a/src/sections/EditIngreso.tsx +++ b/src/sections/EditIngreso.tsx @@ -8,6 +8,8 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@ import { Badge } from '@/components/ui/badge'; import { toast } from 'sonner'; import type { Paciente, Cama, Area, Internacion } from '@/types'; +import { getNombreProfesional } from '@/lib/utils'; +import { useHospitalStore } from '@/hooks/useHospitalStore'; interface EditIngresoProps { internacion: Internacion; @@ -31,12 +33,15 @@ export function EditIngreso({ onAgregarCama, onVolver, }: EditIngresoProps) { + const { currentUser } = useHospitalStore(); const [pacienteSeleccionado] = useState(internacion.pacienteId); const [camaSeleccionada] = useState(internacion.camaId); const [areaSeleccionada] = useState(internacion.areaId); const [camaInput, setCamaInput] = useState(''); const [modoCama, setModoCama] = useState<'seleccionar' | 'escribir'>('seleccionar'); - const [medico, setMedico] = useState(internacion.medicoIngresante || ''); + const defaultMedico = internacion.medicoIngresante || getNombreProfesional(currentUser); + const [medico, setMedico] = useState(''); + const effectiveMedico = medico || defaultMedico; const [fechaIngresoHospital, setFechaIngresoHospital] = useState(internacion.fechaIngresoHospital || ''); const [fechaIngresoClinica, setFechaIngresoClinica] = useState(internacion.fechaIngresoClinica || ''); const [motivoConsulta, setMotivoConsulta] = useState(internacion.motivoConsulta || ''); @@ -111,7 +116,7 @@ export function EditIngreso({ return; } - if (!medico.trim()) { + if (!effectiveMedico.trim()) { toast.error('Debe ingresar el médico ingresante'); return; } @@ -166,7 +171,7 @@ export function EditIngreso({ pacienteId: pacienteSeleccionado, camaId: camaId, areaId: newAreaId, - medicoIngresante: medico.trim(), + medicoIngresante: effectiveMedico.trim(), diagnosticoIngreso: diagnosticoIngreso.trim(), motivoConsulta: motivoConsulta.trim() || undefined, enfermedadActual: enfermedadActual.trim(), @@ -464,7 +469,7 @@ export function EditIngreso({ setMedico(e.target.value)} /> diff --git a/src/sections/Evoluciones.tsx b/src/sections/Evoluciones.tsx index 6bec4e3..127957d 100644 --- a/src/sections/Evoluciones.tsx +++ b/src/sections/Evoluciones.tsx @@ -10,6 +10,9 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'; import { toast } from 'sonner'; import type { Evolucion, Internacion, Paciente, Cama, SignosVitales, ExamenFisico } from '@/types'; +import { useHospitalStore } from '@/hooks/useHospitalStore'; +import { getNombreProfesional } from '@/lib/utils'; + interface EvolucionesProps { evoluciones: Evolucion[]; @@ -36,6 +39,7 @@ export function Evoluciones({ getPacienteById, getInternacionActivaByPaciente }: EvolucionesProps) { + const { currentUser } = useHospitalStore(); const [busqueda, setBusqueda] = useState(''); const [pacienteSeleccionado, setPacienteSeleccionado] = useState(''); const [dialogoAbierto, setDialogoAbierto] = useState(false); @@ -44,7 +48,10 @@ export function Evoluciones({ const [fecha, setFecha] = useState(new Date().toISOString().split('T')[0]); const [hora, setHora] = useState(new Date().toTimeString().slice(0, 5)); + const defaultMedico = getNombreProfesional(currentUser); const [medico, setMedico] = useState(''); + const effectiveMedico = medico || defaultMedico; + const [temperatura, setTemperatura] = useState(''); const [presionSistolica, setPresionSistolica] = useState(''); const [presionDiastolica, setPresionDiastolica] = useState(''); @@ -118,7 +125,7 @@ export function Evoluciones({ ? internaciones.find(i => i.id === evolucionEditando.internacionId) : getInternacionActivaByPaciente(pacienteSeleccionado); - if (!medico.trim()) { + if (!effectiveMedico.trim()) { toast.error('Debe completar el nombre del médico'); return; } @@ -156,7 +163,7 @@ export function Evoluciones({ const evolucionData = { fecha, hora, - medico: medico.trim(), + medico: effectiveMedico.trim(), signosVitales, examenFisico, novedades: novedades || undefined, @@ -407,7 +414,7 @@ export function Evoluciones({
setMedico(e.target.value)} placeholder="Nombre del médico" /> @@ -420,7 +427,7 @@ export function Evoluciones({
) : (
diff --git a/src/sections/HistoriaClinica.tsx b/src/sections/HistoriaClinica.tsx index 2839665..a23e5c1 100644 --- a/src/sections/HistoriaClinica.tsx +++ b/src/sections/HistoriaClinica.tsx @@ -2,6 +2,8 @@ import { useState } from 'react'; import { toast } from 'sonner'; import { PDFDocument } from 'pdf-lib'; import { User } from 'lucide-react'; +import { useHospitalStore } from '@/hooks/useHospitalStore'; +import { getNombreProfesional } from '@/lib/utils'; import { Accordion, AccordionContent, @@ -1755,13 +1757,16 @@ function SeccionEvoluciones({ evos, internacionId, add, update, del, canEdit }: del: (id: string) => void; canEdit?: boolean; }) { + const { currentUser } = useHospitalStore(); const [dialog, setDialog] = useState(false); const [edit, setEdit] = useState(null); const [evoDetalle, setEvoDetalle] = useState(null); const [expanded, setExpanded] = useState(null); const [fecha, setFecha] = useState(new Date().toISOString().split('T')[0]); const [hora, setHora] = useState(new Date().toTimeString().slice(0, 5)); + const defaultMedico = getNombreProfesional(currentUser); const [medico, setMedico] = useState(''); + const effectiveMedico = medico || defaultMedico; const [temperatura, setTemperatura] = useState(''); const [presionSistolica, setPresionSistolica] = useState(''); const [presionDiastolica, setPresionDiastolica] = useState(''); @@ -1829,7 +1834,7 @@ function SeccionEvoluciones({ evos, internacionId, add, update, del, canEdit }: const evosFiltered = evos.filter(e => e.internacionId === internacionId).sort((a, b) => new Date(b.fecha + 'T' + b.hora).getTime() - new Date(a.fecha + 'T' + a.hora).getTime()); const handle = async () => { - if (!medico.trim()) { + if (!effectiveMedico.trim()) { toast.error('Ingrese el nombre del médico'); return; } @@ -1839,7 +1844,7 @@ function SeccionEvoluciones({ evos, internacionId, add, update, del, canEdit }: const examenFisico = snc || cardiovascular || respiratorio || abdominal || genitourinario || pielAnexos || soma ? { SNC: snc || undefined, Cardiovascular: cardiovascular || undefined, Respiratorio: respiratorio || undefined, Abdominal: abdominal || undefined, Genitourinario: genitourinario || undefined, PielAnexos: pielAnexos || undefined, SOMA: soma || undefined } : undefined; - const data = { fecha, hora, medico: medico.trim(), signosVitales, examenFisico, novedades: novedades || undefined, comentario: comentario || undefined, pendientes: pendientes || undefined }; + const data = { fecha, hora, medico: effectiveMedico.trim(), signosVitales, examenFisico, novedades: novedades || undefined, comentario: comentario || undefined, pendientes: pendientes || undefined }; try { if (edit) { @@ -1898,9 +1903,9 @@ function SeccionEvoluciones({ evos, internacionId, add, update, del, canEdit }: