Files
administracionHospital/src/App.tsx
T

211 lines
8.1 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';
function App() {
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">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)}
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 })}
onEliminarAcidoBase={store.eliminarAcidoBase}
onAgregarCultivo={(c) => store.agregarCultivo({ ...c, internacionId: internacion.id })}
onActualizarCultivo={store.actualizarCultivo}
onEliminarCultivo={store.eliminarCultivo}
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">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 || ''}
/>
);
}
return null;
}
};
return (
<Layout vistaActual={store.vistaActual} onCambiarVista={store.setVista}>
{renderVista()}
</Layout>
);
}
export default App;