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
const saveChanges = useCallback(async () => {
if (isSaving || changedKeys.size === 0) return;
if (isSaving) return;
setIsSaving(true);
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 = {};
keysToSave.forEach(key => {
if (key in state) {
@@ -318,8 +319,13 @@ export function useHospitalStore() {
: c
),
}));
// Marcar como cambiadas para el guardado
markChanged('internaciones');
markChanged('camas');
return nuevaInternacion.id;
}, []);
}, [markChanged]);
const finalizarInternacion = useCallback((internacionId: string, datos: {
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 internacion = state.internaciones.find(i => i.id === internacionId);
@@ -392,6 +402,12 @@ export function useHospitalStore() {
};
return result;
});
// Marcar como cambiadas para el guardado
markChanged('internaciones');
if (cambioDeCama) {
markChanged('camas');
}
if (oldCamaId !== newCamaId && newCamaId && oldCamaId) {
setTimeout(() => {
@@ -427,8 +443,10 @@ export function useHospitalStore() {
...prev,
evoluciones: [...prev.evoluciones, nuevaEvolucion],
}));
markChanged('evoluciones');
return nuevaEvolucion.id;
}, [state.internaciones, state.currentUser]);
}, [state.internaciones, state.currentUser, markChanged]);
const eliminarEvolucion = useCallback((id: string) => {
const evolucion = state.evoluciones.find(e => e.id === id);
@@ -443,7 +461,8 @@ export function useHospitalStore() {
...prev,
evoluciones: prev.evoluciones.filter(e => e.id !== id),
}));
}, []);
markChanged('evoluciones');
}, [markChanged]);
const actualizarEvolucion = useCallback((id: string, datos: Partial<Evolucion>) => {
const evolucion = state.evoluciones.find(e => e.id === id);
@@ -458,7 +477,8 @@ export function useHospitalStore() {
...prev,
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
const agregarLaboratorio = useCallback((laboratorio: Omit<Laboratorio, 'id'>) => {