232 lines
9.4 KiB
TypeScript
232 lines
9.4 KiB
TypeScript
import { useHospitalStore } from '@/hooks/useHospitalStore';
|
|
import { Layout } from '@/sections/Layout';
|
|
import { Dashboard } from '@/sections/Dashboard';
|
|
import { MapaCamas } from '@/sections/MapaCamas';
|
|
import { Pacientes } from '@/sections/Pacientes';
|
|
import { Internaciones } from '@/sections/Internaciones';
|
|
import { Evoluciones } from '@/sections/Evoluciones';
|
|
import { AcidoBaseSection } from '@/sections/AcidoBase';
|
|
import { Cultivos } from '@/sections/Cultivos';
|
|
import { HistoriaClinica } from '@/sections/HistoriaClinica';
|
|
import { NuevoIngreso } from '@/sections/NuevoIngreso';
|
|
import { EditIngreso } from '@/sections/EditIngreso';
|
|
import { Spinner } from '@/components/ui/spinner';
|
|
import { Button } from '@/components/ui/button';
|
|
import { ThemeProvider } from '@/contexts/ThemeContext';
|
|
import { Toaster } from '@/components/ui/sonner';
|
|
|
|
function AppContent() {
|
|
const store = useHospitalStore();
|
|
|
|
if (!store.isLoaded) {
|
|
return (
|
|
<div className="min-h-screen flex items-center justify-center">
|
|
<Spinner className="h-8 w-8" />
|
|
</div>
|
|
);
|
|
}
|
|
|
|
const renderVista = () => {
|
|
switch (store.vistaActual) {
|
|
case 'dashboard':
|
|
return (
|
|
<Dashboard
|
|
estadisticas={store.getEstadisticas()}
|
|
internaciones={store.internaciones}
|
|
cultivos={store.cultivos}
|
|
onCambiarVista={store.setVista}
|
|
getPacienteById={store.getPacienteById}
|
|
/>
|
|
);
|
|
case 'camas':
|
|
return (
|
|
<MapaCamas
|
|
camas={store.camas}
|
|
areas={store.areas}
|
|
pacientes={store.pacientes}
|
|
internaciones={store.internaciones}
|
|
onActualizarCama={store.actualizarCama}
|
|
onAgregarCama={store.agregarCama}
|
|
onEliminarCama={store.eliminarCama}
|
|
onIniciarInternacion={store.iniciarInternacion}
|
|
getPacienteById={store.getPacienteById}
|
|
getInternacionById={store.getInternacionById}
|
|
onAgregarArea={store.agregarArea}
|
|
onActualizarArea={store.actualizarArea}
|
|
onEliminarArea={store.eliminarArea}
|
|
/>
|
|
);
|
|
case 'pacientes':
|
|
return (
|
|
<Pacientes
|
|
pacientes={store.pacientes}
|
|
internaciones={store.internaciones}
|
|
onAgregar={store.agregarPaciente}
|
|
onActualizar={store.actualizarPaciente}
|
|
onEliminar={store.eliminarPaciente}
|
|
/>
|
|
);
|
|
case 'internaciones':
|
|
return (
|
|
<Internaciones
|
|
internaciones={store.internaciones}
|
|
pacientes={store.pacientes}
|
|
camas={store.camas}
|
|
areas={store.areas}
|
|
evoluciones={store.evoluciones}
|
|
laboratorios={store.laboratorios}
|
|
cultivos={store.cultivos}
|
|
onIniciarInternacion={store.iniciarInternacion}
|
|
onFinalizarInternacion={store.finalizarInternacion}
|
|
getPacienteById={store.getPacienteById}
|
|
getCamaById={store.getCamaById}
|
|
onVerHC={(id) => { store.setCurrentInternacion(id); store.setVista('historiaclinica'); }}
|
|
onNuevoIngreso={() => store.setVista('nuevoingreso')}
|
|
/>
|
|
);
|
|
case 'evoluciones':
|
|
return (
|
|
<Evoluciones
|
|
evoluciones={store.evoluciones}
|
|
internaciones={store.internaciones}
|
|
pacientes={store.pacientes}
|
|
onAgregarEvolucion={store.agregarEvolucion}
|
|
onActualizarEvolucion={store.actualizarEvolucion}
|
|
onEliminarEvolucion={store.eliminarEvolucion}
|
|
getPacienteById={store.getPacienteById}
|
|
getInternacionActivaByPaciente={store.getInternacionActivaByPaciente}
|
|
/>
|
|
);
|
|
case 'acidobase':
|
|
return (
|
|
<AcidoBaseSection
|
|
acidosBase={store.acidosBase}
|
|
pacientes={store.pacientes}
|
|
onAgregarAcidoBase={store.agregarAcidoBase}
|
|
onEliminarAcidoBase={store.eliminarAcidoBase}
|
|
getPacienteById={store.getPacienteById}
|
|
/>
|
|
);
|
|
case 'cultivos':
|
|
return (
|
|
<Cultivos
|
|
cultivos={store.cultivos}
|
|
pacientes={store.pacientes}
|
|
internaciones={store.internaciones}
|
|
camas={store.camas}
|
|
onAgregarCultivo={store.agregarCultivo}
|
|
onActualizarCultivo={store.actualizarCultivo}
|
|
onEliminarCultivo={store.eliminarCultivo}
|
|
getPacienteById={store.getPacienteById}
|
|
getCamaById={store.getCamaById}
|
|
getInternacionActivaByPaciente={store.getInternacionActivaByPaciente}
|
|
/>
|
|
);
|
|
case 'historiaclinica': {
|
|
const internacion = store.getInternacionById(store.currentInternacionId || '');
|
|
const paciente = internacion ? store.getPacienteById(internacion.pacienteId) : undefined;
|
|
if (!internacion || !paciente) {
|
|
return (
|
|
<div className="p-4 text-center">
|
|
<p className="text-gray-500 dark:text-gray-400">Internación no encontrada</p>
|
|
<Button onClick={() => store.setVista('internaciones')}>Volver a Internaciones</Button>
|
|
</div>
|
|
);
|
|
}
|
|
return (
|
|
<HistoriaClinica
|
|
internacion={internacion}
|
|
paciente={paciente}
|
|
cama={store.getCamaById(internacion.camaId)}
|
|
allCamas={store.camas}
|
|
evoluciones={store.getEvolucionesByInternacion(internacion.id)}
|
|
laboratorios={store.getLaboratoriosByPaciente(paciente.id)}
|
|
acidosBase={store.getAcidosBaseByPaciente(paciente.id)}
|
|
cultivos={store.getCultivosByPaciente(paciente.id)}
|
|
estudiosComplementarios={store.estudiosComplementarios.filter(e => e.pacienteId === paciente.id)}
|
|
interconsultas={(store.interconsultas || []).filter(ic => ic.internacionId === internacion.id)}
|
|
onAgregarEvolucion={store.agregarEvolucion}
|
|
onActualizarEvolucion={store.actualizarEvolucion}
|
|
onEliminarEvolucion={store.eliminarEvolucion}
|
|
onAgregarLaboratorio={(l) => store.agregarLaboratorio({ ...l, internacionId: internacion.id })}
|
|
onActualizarLaboratorio={store.actualizarLaboratorio}
|
|
onEliminarLaboratorio={store.eliminarLaboratorio}
|
|
onAgregarAcidoBase={(a) => store.agregarAcidoBase({ ...a, internacionId: internacion.id })}
|
|
onActualizarAcidoBase={store.actualizarAcidoBase}
|
|
onEliminarAcidoBase={store.eliminarAcidoBase}
|
|
onAgregarCultivo={(c) => store.agregarCultivo({ ...c, internacionId: internacion.id })}
|
|
onActualizarCultivo={store.actualizarCultivo}
|
|
onEliminarCultivo={store.eliminarCultivo}
|
|
onAgregarEstudioComplementario={(e) => store.agregarEstudioComplementario({ ...e, internacionId: internacion.id })}
|
|
onActualizarEstudioComplementario={store.actualizarEstudioComplementario}
|
|
onEliminarEstudioComplementario={store.eliminarEstudioComplementario}
|
|
onAgregarInterconsulta={(ic) => store.agregarInterconsulta({ ...ic, internacionId: internacion.id })}
|
|
onActualizarInterconsulta={store.actualizarInterconsulta}
|
|
onEliminarInterconsulta={store.eliminarInterconsulta}
|
|
onActualizarInternacion={store.actualizarInternacion}
|
|
onActualizarCama={store.actualizarCama}
|
|
onVolver={() => store.setVista('internaciones')}
|
|
onEditarIngreso={() => { store.setVista('editaringreso'); }}
|
|
/>
|
|
);
|
|
}
|
|
case 'nuevoingreso':
|
|
return (
|
|
<NuevoIngreso
|
|
pacientes={store.pacientes}
|
|
camas={store.camas}
|
|
areas={store.areas}
|
|
onIniciarInternacion={store.iniciarInternacion}
|
|
onVolver={() => store.setVista('internaciones')}
|
|
getAreaName={(areaId) => store.areas.find(a => a.id === areaId)?.nombre || ''}
|
|
/>
|
|
);
|
|
|
|
case 'editaringreso': {
|
|
const internacion = store.getInternacionById(store.currentInternacionId || '');
|
|
const paciente = internacion ? store.getPacienteById(internacion.pacienteId) : undefined;
|
|
if (!internacion || !paciente) {
|
|
return (
|
|
<div className="p-4 text-center">
|
|
<p className="text-gray-500 dark:text-gray-400">Internación no encontrada</p>
|
|
<Button onClick={() => store.setVista('internaciones')}>Volver a Internaciones</Button>
|
|
</div>
|
|
);
|
|
}
|
|
return (
|
|
<EditIngreso
|
|
internacion={internacion}
|
|
paciente={paciente}
|
|
cama={store.getCamaById(internacion.camaId)}
|
|
pacientes={store.pacientes}
|
|
camas={store.camas}
|
|
areas={store.areas}
|
|
onActualizarInternacion={store.actualizarInternacion}
|
|
onVolver={() => store.setVista('historiaclinica')}
|
|
getAreaName={(areaId) => store.areas.find(a => a.id === areaId)?.nombre || ''}
|
|
/>
|
|
);
|
|
}
|
|
default:
|
|
return null;
|
|
}
|
|
};
|
|
|
|
return (
|
|
<Layout vistaActual={store.vistaActual} onCambiarVista={store.setVista}>
|
|
{renderVista()}
|
|
</Layout>
|
|
);
|
|
}
|
|
|
|
function App() {
|
|
return (
|
|
// @ts-expect-error - next-themes types mismatch
|
|
<ThemeProvider attribute="class" defaultTheme="system" enableSystem>
|
|
<AppContent />
|
|
<Toaster position="top-right" />
|
|
</ThemeProvider>
|
|
);
|
|
}
|
|
|
|
export default App; |