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:
@@ -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'>) => {
|
||||
|
||||
Reference in New Issue
Block a user