Feat: avanzar actualización del store para MariaDB

- Actualizar laboratorios: agregar, eliminar, actualizar con API inmediata
- Actualizar acidos base: agregar, eliminar, actualizar con API inmediata
- Funciones actualizadas: iniciarInternacion, finalizarInternacion, actualizarInternacion
- Funciones actualizadas: evoluciones CRUD
- Pendiente: cultivos, estudios, interconsultas, ATB, indicaciones, pacientes, camas, areas
This commit is contained in:
2026-04-24 02:41:05 -03:00
parent fe699fecf5
commit c9ed9b37f7
+61 -40
View File
@@ -337,7 +337,7 @@ export function useHospitalStore() {
} }
}, [state.areas, apiCall]); }, [state.areas, apiCall]);
const actualizarInternacion = useCallback((internacionId: string, datos: Partial<Internacion>) => { const actualizarInternacion = useCallback(async (internacionId: string, datos: Partial<Internacion>) => {
const internacion = state.internaciones.find(i => i.id === internacionId); const internacion = state.internaciones.find(i => i.id === internacionId);
if (!internacion) return; if (!internacion) return;
@@ -357,6 +357,11 @@ export function useHospitalStore() {
const pacienteId = datos.pacienteId || internacion.pacienteId; const pacienteId = datos.pacienteId || internacion.pacienteId;
try {
// API call inmediata
await apiCall('PUT', `/internaciones/${internacionId}`, datos);
// Actualizar estado local después del éxito
setState(prev => { setState(prev => {
const result = { const result = {
...prev, ...prev,
@@ -377,33 +382,14 @@ export function useHospitalStore() {
}; };
return result; return result;
}); });
} catch (err) {
// Marcar como cambiadas para el guardado console.error('Error al actualizar internación:', err);
markChanged('internaciones'); throw err;
if (cambioDeCama) {
markChanged('camas');
} }
}, [state.internaciones, state.currentUser, apiCall]);
if (oldCamaId !== newCamaId && newCamaId && oldCamaId) {
setTimeout(() => {
fetch(`${API_BASE}/camas/${newCamaId}`, {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ estado: 'Ocupada' }),
}).catch(() => {});
}, 500);
setTimeout(() => {
fetch(`${API_BASE}/camas/${oldCamaId}`, {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ estado: 'Disponible' }),
}).catch(() => {});
}, 1000);
}
}, [state.internaciones, state.currentUser]);
// Acciones de evoluciones // Acciones de evoluciones
const agregarEvolucion = useCallback((evolucion: Omit<Evolucion, 'id'>) => { const agregarEvolucion = useCallback(async (evolucion: Omit<Evolucion, 'id'>) => {
const internacion = state.internaciones.find(i => i.id === evolucion.internacionId); const internacion = state.internaciones.find(i => i.id === evolucion.internacionId);
const areaId = internacion?.areaId || null; const areaId = internacion?.areaId || null;
if (!canAccessArea(areaId)) { if (!canAccessArea(areaId)) {
@@ -414,16 +400,21 @@ export function useHospitalStore() {
...evolucion, ...evolucion,
id: generateUUID(), id: generateUUID(),
}; };
try {
await apiCall('POST', '/evoluciones', nuevaEvolucion);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
evoluciones: [...prev.evoluciones, nuevaEvolucion], evoluciones: [...prev.evoluciones, nuevaEvolucion],
})); }));
markChanged('evoluciones');
return nuevaEvolucion.id; return nuevaEvolucion.id;
}, [state.internaciones, state.currentUser, markChanged]); } catch (err) {
console.error('Error al agregar evolución:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const eliminarEvolucion = useCallback((id: string) => { const eliminarEvolucion = useCallback(async (id: string) => {
const evolucion = state.evoluciones.find(e => e.id === id); const evolucion = state.evoluciones.find(e => e.id === id);
if (!evolucion) return; if (!evolucion) return;
const internacion = state.internaciones.find(i => i.id === evolucion.internacionId); const internacion = state.internaciones.find(i => i.id === evolucion.internacionId);
@@ -432,14 +423,20 @@ export function useHospitalStore() {
console.warn('No tiene permisos para eliminar evolución en esta área'); console.warn('No tiene permisos para eliminar evolución en esta área');
return; return;
} }
try {
await apiCall('DELETE', `/evoluciones/${id}`);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
evoluciones: prev.evoluciones.filter(e => e.id !== id), evoluciones: prev.evoluciones.filter(e => e.id !== id),
})); }));
markChanged('evoluciones'); } catch (err) {
}, [markChanged]); console.error('Error al eliminar evolución:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const actualizarEvolucion = useCallback((id: string, datos: Partial<Evolucion>) => { const actualizarEvolucion = useCallback(async (id: string, datos: Partial<Evolucion>) => {
const evolucion = state.evoluciones.find(e => e.id === id); const evolucion = state.evoluciones.find(e => e.id === id);
if (!evolucion) return; if (!evolucion) return;
const internacion = state.internaciones.find(i => i.id === evolucion.internacionId); const internacion = state.internaciones.find(i => i.id === evolucion.internacionId);
@@ -448,15 +445,21 @@ export function useHospitalStore() {
console.warn('No tiene permisos para actualizar evolución en esta área'); console.warn('No tiene permisos para actualizar evolución en esta área');
return; return;
} }
try {
await apiCall('PUT', `/evoluciones/${id}`, datos);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
evoluciones: prev.evoluciones.map(e => e.id === id ? { ...e, ...datos } : e), evoluciones: prev.evoluciones.map(e => e.id === id ? { ...e, ...datos } : e),
})); }));
markChanged('evoluciones'); } catch (err) {
}, [state.internaciones, state.currentUser, markChanged]); console.error('Error al actualizar evolución:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
// Acciones de laboratorios // Acciones de laboratorios
const agregarLaboratorio = useCallback((laboratorio: Omit<Laboratorio, 'id'>) => { const agregarLaboratorio = useCallback(async (laboratorio: Omit<Laboratorio, 'id'>) => {
const internacion = state.internaciones.find(i => i.id === laboratorio.internacionId); const internacion = state.internaciones.find(i => i.id === laboratorio.internacionId);
const areaId = internacion?.areaId || null; const areaId = internacion?.areaId || null;
if (!canAccessArea(areaId)) { if (!canAccessArea(areaId)) {
@@ -467,14 +470,20 @@ export function useHospitalStore() {
...laboratorio, ...laboratorio,
id: generateUUID(), id: generateUUID(),
}; };
try {
await apiCall('POST', '/laboratorios', nuevoLaboratorio);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
laboratorios: [...prev.laboratorios, nuevoLaboratorio], laboratorios: [...prev.laboratorios, nuevoLaboratorio],
})); }));
return nuevoLaboratorio.id; return nuevoLaboratorio.id;
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al agregar laboratorio:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const eliminarLaboratorio = useCallback((id: string) => { const eliminarLaboratorio = useCallback(async (id: string) => {
const laboratorio = state.laboratorios.find(l => l.id === id); const laboratorio = state.laboratorios.find(l => l.id === id);
if (!laboratorio) return; if (!laboratorio) return;
const internacion = state.internaciones.find(i => i.id === laboratorio.internacionId); const internacion = state.internaciones.find(i => i.id === laboratorio.internacionId);
@@ -483,13 +492,19 @@ export function useHospitalStore() {
console.warn('No tiene permisos para eliminar laboratorio en esta área'); console.warn('No tiene permisos para eliminar laboratorio en esta área');
return; return;
} }
try {
await apiCall('DELETE', `/laboratorios/${id}`);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
laboratorios: prev.laboratorios.filter(l => l.id !== id), laboratorios: prev.laboratorios.filter(l => l.id !== id),
})); }));
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al eliminar laboratorio:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const actualizarLaboratorio = useCallback((id: string, datos: Partial<Laboratorio>) => { const actualizarLaboratorio = useCallback(async (id: string, datos: Partial<Laboratorio>) => {
const laboratorio = state.laboratorios.find(l => l.id === id); const laboratorio = state.laboratorios.find(l => l.id === id);
if (!laboratorio) return; if (!laboratorio) return;
const internacion = state.internaciones.find(i => i.id === laboratorio.internacionId); const internacion = state.internaciones.find(i => i.id === laboratorio.internacionId);
@@ -498,11 +513,17 @@ export function useHospitalStore() {
console.warn('No tiene permisos para actualizar laboratorio en esta área'); console.warn('No tiene permisos para actualizar laboratorio en esta área');
return; return;
} }
try {
await apiCall('PUT', `/laboratorios/${id}`, datos);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
laboratorios: prev.laboratorios.map(l => l.id === id ? { ...l, ...datos } : l), laboratorios: prev.laboratorios.map(l => l.id === id ? { ...l, ...datos } : l),
})); }));
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al actualizar laboratorio:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
// Acciones de ácido-base // Acciones de ácido-base
const agregarAcidoBase = useCallback((acidoBase: Omit<AcidoBase, 'id'>) => { const agregarAcidoBase = useCallback((acidoBase: Omit<AcidoBase, 'id'>) => {