Fix: asegurar que los cambios en el estado se guarden en la base de datos

- Agregar markChanged en funciones que actualizan estado:
  * finalizarInternacion, actualizarInternacion, iniciarInternacion
  * agregarEvolucion, eliminarEvolucion, actualizarEvolucion
- Modificar saveChanges para guardar todo el estado cuando no hay claves marcadas
- Soluciona el problema de Registrar Egreso que no se guardaba en la BD
This commit is contained in:
2026-04-24 02:22:35 -03:00
parent e887d66411
commit 8a617265b2
+27 -7
View File
@@ -129,10 +129,11 @@ export function useHospitalStore() {
// Save only changed parts // Save only changed parts
const saveChanges = useCallback(async () => { const saveChanges = useCallback(async () => {
if (isSaving || changedKeys.size === 0) return; if (isSaving) return;
setIsSaving(true); setIsSaving(true);
try { try {
const keysToSave = Array.from(changedKeys); // If there are marked changed keys, save only those; otherwise save all state
const keysToSave = changedKeys.size > 0 ? Array.from(changedKeys) : Object.keys(state).filter(k => !['currentUser', 'isAuthenticated', 'vistaActual', 'currentInternacionId'].includes(k));
const partialState: any = {}; const partialState: any = {};
keysToSave.forEach(key => { keysToSave.forEach(key => {
if (key in state) { if (key in state) {
@@ -318,8 +319,13 @@ export function useHospitalStore() {
: c : c
), ),
})); }));
// Marcar como cambiadas para el guardado
markChanged('internaciones');
markChanged('camas');
return nuevaInternacion.id; return nuevaInternacion.id;
}, []); }, [markChanged]);
const finalizarInternacion = useCallback((internacionId: string, datos: { const finalizarInternacion = useCallback((internacionId: string, datos: {
fechaEgreso: string; fechaEgreso: string;
@@ -350,7 +356,11 @@ export function useHospitalStore() {
), ),
}; };
}); });
}, [state.areas]);
// Marcar como cambiadas para el guardado
markChanged('internaciones');
markChanged('camas');
}, [state.areas, markChanged]);
const actualizarInternacion = useCallback((internacionId: string, datos: Partial<Internacion>) => { const actualizarInternacion = useCallback((internacionId: string, datos: Partial<Internacion>) => {
const internacion = state.internaciones.find(i => i.id === internacionId); const internacion = state.internaciones.find(i => i.id === internacionId);
@@ -392,6 +402,12 @@ export function useHospitalStore() {
}; };
return result; return result;
}); });
// Marcar como cambiadas para el guardado
markChanged('internaciones');
if (cambioDeCama) {
markChanged('camas');
}
if (oldCamaId !== newCamaId && newCamaId && oldCamaId) { if (oldCamaId !== newCamaId && newCamaId && oldCamaId) {
setTimeout(() => { setTimeout(() => {
@@ -427,8 +443,10 @@ export function useHospitalStore() {
...prev, ...prev,
evoluciones: [...prev.evoluciones, nuevaEvolucion], evoluciones: [...prev.evoluciones, nuevaEvolucion],
})); }));
markChanged('evoluciones');
return nuevaEvolucion.id; return nuevaEvolucion.id;
}, [state.internaciones, state.currentUser]); }, [state.internaciones, state.currentUser, markChanged]);
const eliminarEvolucion = useCallback((id: string) => { const eliminarEvolucion = useCallback((id: string) => {
const evolucion = state.evoluciones.find(e => e.id === id); const evolucion = state.evoluciones.find(e => e.id === id);
@@ -443,7 +461,8 @@ export function useHospitalStore() {
...prev, ...prev,
evoluciones: prev.evoluciones.filter(e => e.id !== id), evoluciones: prev.evoluciones.filter(e => e.id !== id),
})); }));
}, []); markChanged('evoluciones');
}, [markChanged]);
const actualizarEvolucion = useCallback((id: string, datos: Partial<Evolucion>) => { const actualizarEvolucion = useCallback((id: string, datos: Partial<Evolucion>) => {
const evolucion = state.evoluciones.find(e => e.id === id); const evolucion = state.evoluciones.find(e => e.id === id);
@@ -458,7 +477,8 @@ export function useHospitalStore() {
...prev, ...prev,
evoluciones: prev.evoluciones.map(e => e.id === id ? { ...e, ...datos } : e), evoluciones: prev.evoluciones.map(e => e.id === id ? { ...e, ...datos } : e),
})); }));
}, [state.internaciones, state.currentUser]); markChanged('evoluciones');
}, [state.internaciones, state.currentUser, markChanged]);
// Acciones de laboratorios // Acciones de laboratorios
const agregarLaboratorio = useCallback((laboratorio: Omit<Laboratorio, 'id'>) => { const agregarLaboratorio = useCallback((laboratorio: Omit<Laboratorio, 'id'>) => {