From 8a617265b2abd5ebb71f14665548aa93ae976a2b Mon Sep 17 00:00:00 2001 From: Sergio Nicolas Lavaise Date: Fri, 24 Apr 2026 02:22:35 -0300 Subject: [PATCH] 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 --- src/hooks/useHospitalStore.ts | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/hooks/useHospitalStore.ts b/src/hooks/useHospitalStore.ts index 3c51ca6..9bfaa8b 100644 --- a/src/hooks/useHospitalStore.ts +++ b/src/hooks/useHospitalStore.ts @@ -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) => { 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) => { 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) => {