Feat: completar actualización de todas las funciones del store para MariaDB
- Actualizar AgregarAcidoBase, ActualizarAcidoBase, EliminarAcidoBase con API calls - Actualizar Movimientos Indicaciones con API call - Actualizar Areas CRUD con API calls - Actualizar Pacientes CRUD con API calls - Actualizar Camas CRUD con API calls - Todas las funciones ahora usan apiCall y manejan errores con try/catch
This commit is contained in:
@@ -204,35 +204,53 @@ export function useHospitalStore() {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// Acciones de pacientes
|
// Acciones de pacientes
|
||||||
const agregarPaciente = useCallback((paciente: Omit<Paciente, 'id' | 'fechaRegistro'>) => {
|
const agregarPaciente = useCallback(async (paciente: Omit<Paciente, 'id' | 'fechaRegistro'>) => {
|
||||||
const nuevoPaciente: Paciente = {
|
const nuevoPaciente: Paciente = {
|
||||||
...paciente,
|
...paciente,
|
||||||
id: generateUUID(),
|
id: generateUUID(),
|
||||||
fechaRegistro: new Date().toISOString().split('T')[0],
|
fechaRegistro: new Date().toISOString().split('T')[0],
|
||||||
};
|
};
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('POST', '/pacientes', nuevoPaciente);
|
||||||
pacientes: [...prev.pacientes, nuevoPaciente],
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
return nuevoPaciente.id;
|
pacientes: [...prev.pacientes, nuevoPaciente],
|
||||||
}, []);
|
}));
|
||||||
|
return nuevoPaciente.id;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al agregar paciente:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [apiCall]);
|
||||||
|
|
||||||
const actualizarPaciente = useCallback((id: string, datos: Partial<Paciente>) => {
|
const actualizarPaciente = useCallback(async (id: string, datos: Partial<Paciente>) => {
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('PUT', `/pacientes/${id}`, datos);
|
||||||
pacientes: prev.pacientes.map(p => p.id === id ? { ...p, ...datos } : p),
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
}, []);
|
pacientes: prev.pacientes.map(p => p.id === id ? { ...p, ...datos } : p),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al actualizar paciente:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [apiCall]);
|
||||||
|
|
||||||
const eliminarPaciente = useCallback((id: string) => {
|
const eliminarPaciente = useCallback(async (id: string) => {
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('DELETE', `/pacientes/${id}`);
|
||||||
pacientes: prev.pacientes.filter(p => p.id !== id),
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
}, []);
|
pacientes: prev.pacientes.filter(p => p.id !== id),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al eliminar paciente:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [apiCall]);
|
||||||
|
|
||||||
// Acciones de camas
|
// Acciones de camas
|
||||||
const actualizarCama = useCallback((id: string, datos: Partial<Cama>) => {
|
const actualizarCama = useCallback(async (id: string, datos: Partial<Cama>) => {
|
||||||
const cama = state.camas.find(c => c.id === id);
|
const cama = state.camas.find(c => c.id === id);
|
||||||
if (!cama) return;
|
if (!cama) return;
|
||||||
const user = state.currentUser;
|
const user = state.currentUser;
|
||||||
@@ -241,31 +259,49 @@ export function useHospitalStore() {
|
|||||||
console.warn('No tiene permisos para actualizar cama en esta área');
|
console.warn('No tiene permisos para actualizar cama en esta área');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('PUT', `/camas/${id}`, datos);
|
||||||
camas: prev.camas.map(c => c.id === id ? { ...c, ...datos } : c),
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
}, [state.camas, state.currentUser]);
|
camas: prev.camas.map(c => c.id === id ? { ...c, ...datos } : c),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al actualizar cama:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.camas, state.currentUser, apiCall]);
|
||||||
|
|
||||||
const agregarCama = useCallback((cama: Omit<Cama, 'id'>) => {
|
const agregarCama = useCallback(async (cama: Omit<Cama, 'id'>) => {
|
||||||
const nuevaCama: Cama = {
|
const nuevaCama: Cama = {
|
||||||
...cama,
|
...cama,
|
||||||
id: generateUUID(),
|
id: generateUUID(),
|
||||||
} as Cama;
|
} as Cama;
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('POST', '/camas', nuevaCama);
|
||||||
camas: [...prev.camas, nuevaCama],
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
return nuevaCama.id;
|
camas: [...prev.camas, nuevaCama],
|
||||||
}, []);
|
}));
|
||||||
|
return nuevaCama.id;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al agregar cama:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [apiCall]);
|
||||||
|
|
||||||
const eliminarCama = useCallback((id: string) => {
|
const eliminarCama = useCallback(async (id: string) => {
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('DELETE', `/camas/${id}`);
|
||||||
camas: prev.camas.filter(c => c.id !== id),
|
setState(prev => ({
|
||||||
internaciones: prev.internaciones.map(i => i.camaId === id ? { ...i, activa: false } : i),
|
...prev,
|
||||||
}));
|
camas: prev.camas.filter(c => c.id !== id),
|
||||||
}, []);
|
internaciones: prev.internaciones.map(i => i.camaId === id ? { ...i, activa: false } : i),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al eliminar cama:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [apiCall]);
|
||||||
|
|
||||||
// Acciones de internaciones
|
// Acciones de internaciones
|
||||||
const iniciarInternacion = useCallback(async (internacion: Omit<Internacion, 'id' | 'activa'>) => {
|
const iniciarInternacion = useCallback(async (internacion: Omit<Internacion, 'id' | 'activa'>) => {
|
||||||
@@ -526,7 +562,7 @@ export function useHospitalStore() {
|
|||||||
}, [state.internaciones, state.currentUser, apiCall]);
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
// Acciones de ácido-base
|
// Acciones de ácido-base
|
||||||
const agregarAcidoBase = useCallback((acidoBase: Omit<AcidoBase, 'id'>) => {
|
const agregarAcidoBase = useCallback(async (acidoBase: Omit<AcidoBase, 'id'>) => {
|
||||||
const internacion = state.internaciones.find(i => i.id === acidoBase.internacionId);
|
const internacion = state.internaciones.find(i => i.id === acidoBase.internacionId);
|
||||||
const areaId = internacion?.areaId || null;
|
const areaId = internacion?.areaId || null;
|
||||||
if (!canAccessArea(areaId)) {
|
if (!canAccessArea(areaId)) {
|
||||||
@@ -537,14 +573,20 @@ export function useHospitalStore() {
|
|||||||
...acidoBase,
|
...acidoBase,
|
||||||
id: generateUUID(),
|
id: generateUUID(),
|
||||||
};
|
};
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('POST', '/acid-os-base', nuevoAcidoBase);
|
||||||
acidosBase: [...prev.acidosBase, nuevoAcidoBase],
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
return nuevoAcidoBase.id;
|
acidosBase: [...prev.acidosBase, nuevoAcidoBase],
|
||||||
}, [state.internaciones, state.currentUser]);
|
}));
|
||||||
|
return nuevoAcidoBase.id;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al agregar ácido-base:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
const actualizarAcidoBase = useCallback((id: string, datos: Partial<AcidoBase>) => {
|
const actualizarAcidoBase = useCallback(async (id: string, datos: Partial<AcidoBase>) => {
|
||||||
const acidoBase = state.acidosBase.find(a => a.id === id);
|
const acidoBase = state.acidosBase.find(a => a.id === id);
|
||||||
if (!acidoBase) return;
|
if (!acidoBase) return;
|
||||||
const internacion = state.internaciones.find(i => i.id === acidoBase.internacionId);
|
const internacion = state.internaciones.find(i => i.id === acidoBase.internacionId);
|
||||||
@@ -553,13 +595,19 @@ export function useHospitalStore() {
|
|||||||
console.warn('No tiene permisos para actualizar ácido-base en esta área');
|
console.warn('No tiene permisos para actualizar ácido-base en esta área');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('PUT', `/acid-os-base/${id}`, datos);
|
||||||
acidosBase: prev.acidosBase.map(a => a.id === id ? { ...a, ...datos } : a),
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
}, [state.internaciones, state.currentUser]);
|
acidosBase: prev.acidosBase.map(a => a.id === id ? { ...a, ...datos } : a),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al actualizar ácido-base:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
const eliminarAcidoBase = useCallback((id: string) => {
|
const eliminarAcidoBase = useCallback(async (id: string) => {
|
||||||
const acidoBase = state.acidosBase.find(a => a.id === id);
|
const acidoBase = state.acidosBase.find(a => a.id === id);
|
||||||
if (!acidoBase) return;
|
if (!acidoBase) return;
|
||||||
const internacion = state.internaciones.find(i => i.id === acidoBase.internacionId);
|
const internacion = state.internaciones.find(i => i.id === acidoBase.internacionId);
|
||||||
@@ -568,14 +616,20 @@ export function useHospitalStore() {
|
|||||||
console.warn('No tiene permisos para eliminar ácido-base en esta área');
|
console.warn('No tiene permisos para eliminar ácido-base en esta área');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('DELETE', `/acid-os-base/${id}`);
|
||||||
acidosBase: prev.acidosBase.filter(a => a.id !== id),
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
}, [state.internaciones, state.currentUser]);
|
acidosBase: prev.acidosBase.filter(a => a.id !== id),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al eliminar ácido-base:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
// Acciones de cultivos
|
// Acciones de cultivos
|
||||||
const agregarCultivo = useCallback((cultivo: Omit<Cultivo, 'id'>) => {
|
const agregarCultivo = useCallback(async (cultivo: Omit<Cultivo, 'id'>) => {
|
||||||
const internacion = state.internaciones.find(i => i.id === cultivo.internacionId);
|
const internacion = state.internaciones.find(i => i.id === cultivo.internacionId);
|
||||||
const areaId = internacion?.areaId || null;
|
const areaId = internacion?.areaId || null;
|
||||||
if (!canAccessArea(areaId)) {
|
if (!canAccessArea(areaId)) {
|
||||||
@@ -586,14 +640,20 @@ export function useHospitalStore() {
|
|||||||
...cultivo,
|
...cultivo,
|
||||||
id: generateUUID(),
|
id: generateUUID(),
|
||||||
};
|
};
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('POST', '/cultivos', nuevoCultivo);
|
||||||
cultivos: [...prev.cultivos, nuevoCultivo],
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
return nuevoCultivo.id;
|
cultivos: [...prev.cultivos, nuevoCultivo],
|
||||||
}, [state.internaciones, state.currentUser]);
|
}));
|
||||||
|
return nuevoCultivo.id;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al agregar cultivo:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
const actualizarCultivo = useCallback((id: string, datos: Partial<Cultivo>) => {
|
const actualizarCultivo = useCallback(async (id: string, datos: Partial<Cultivo>) => {
|
||||||
const cultivo = state.cultivos.find(c => c.id === id);
|
const cultivo = state.cultivos.find(c => c.id === id);
|
||||||
if (!cultivo) return;
|
if (!cultivo) return;
|
||||||
const internacion = state.internaciones.find(i => i.id === cultivo.internacionId);
|
const internacion = state.internaciones.find(i => i.id === cultivo.internacionId);
|
||||||
@@ -602,13 +662,19 @@ export function useHospitalStore() {
|
|||||||
console.warn('No tiene permisos para actualizar cultivo en esta área');
|
console.warn('No tiene permisos para actualizar cultivo en esta área');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('PUT', `/cultivos/${id}`, datos);
|
||||||
cultivos: prev.cultivos.map(c => c.id === id ? { ...c, ...datos } : c),
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
}, [state.internaciones, state.currentUser]);
|
cultivos: prev.cultivos.map(c => c.id === id ? { ...c, ...datos } : c),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al actualizar cultivo:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
const eliminarCultivo = useCallback((id: string) => {
|
const eliminarCultivo = useCallback(async (id: string) => {
|
||||||
const cultivo = state.cultivos.find(c => c.id === id);
|
const cultivo = state.cultivos.find(c => c.id === id);
|
||||||
if (!cultivo) return;
|
if (!cultivo) return;
|
||||||
const internacion = state.internaciones.find(i => i.id === cultivo.internacionId);
|
const internacion = state.internaciones.find(i => i.id === cultivo.internacionId);
|
||||||
@@ -617,14 +683,20 @@ export function useHospitalStore() {
|
|||||||
console.warn('No tiene permisos para eliminar cultivo en esta área');
|
console.warn('No tiene permisos para eliminar cultivo en esta área');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('DELETE', `/cultivos/${id}`);
|
||||||
cultivos: prev.cultivos.filter(c => c.id !== id),
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
}, [state.internaciones, state.currentUser]);
|
cultivos: prev.cultivos.filter(c => c.id !== id),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al eliminar cultivo:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
// Acciones de estudios complementarios
|
// Acciones de estudios complementarios
|
||||||
const agregarEstudioComplementario = useCallback((estudio: Omit<EstudioComplementario, 'id'>) => {
|
const agregarEstudioComplementario = useCallback(async (estudio: Omit<EstudioComplementario, 'id'>) => {
|
||||||
const internacion = state.internaciones.find(i => i.id === estudio.internacionId);
|
const internacion = state.internaciones.find(i => i.id === estudio.internacionId);
|
||||||
const areaId = internacion?.areaId || null;
|
const areaId = internacion?.areaId || null;
|
||||||
if (!canAccessArea(areaId)) {
|
if (!canAccessArea(areaId)) {
|
||||||
@@ -635,14 +707,20 @@ export function useHospitalStore() {
|
|||||||
...estudio,
|
...estudio,
|
||||||
id: generateUUID(),
|
id: generateUUID(),
|
||||||
};
|
};
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('POST', '/estudios-complementarios', nuevoEstudio);
|
||||||
estudiosComplementarios: [...prev.estudiosComplementarios, nuevoEstudio],
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
return nuevoEstudio.id;
|
estudiosComplementarios: [...prev.estudiosComplementarios, nuevoEstudio],
|
||||||
}, [state.internaciones, state.currentUser]);
|
}));
|
||||||
|
return nuevoEstudio.id;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al agregar estudio:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
const actualizarEstudioComplementario = useCallback((id: string, datos: Partial<EstudioComplementario>) => {
|
const actualizarEstudioComplementario = useCallback(async (id: string, datos: Partial<EstudioComplementario>) => {
|
||||||
const estudio = state.estudiosComplementarios.find(e => e.id === id);
|
const estudio = state.estudiosComplementarios.find(e => e.id === id);
|
||||||
if (!estudio) return;
|
if (!estudio) return;
|
||||||
const internacion = state.internaciones.find(i => i.id === estudio.internacionId);
|
const internacion = state.internaciones.find(i => i.id === estudio.internacionId);
|
||||||
@@ -651,13 +729,19 @@ export function useHospitalStore() {
|
|||||||
console.warn('No tiene permisos para actualizar estudio complementario en esta área');
|
console.warn('No tiene permisos para actualizar estudio complementario en esta área');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('PUT', `/estudios-complementarios/${id}`, datos);
|
||||||
estudiosComplementarios: prev.estudiosComplementarios.map(e => e.id === id ? { ...e, ...datos } : e),
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
}, [state.internaciones, state.currentUser]);
|
estudiosComplementarios: prev.estudiosComplementarios.map(e => e.id === id ? { ...e, ...datos } : e),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al actualizar estudio:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
const eliminarEstudioComplementario = useCallback((id: string) => {
|
const eliminarEstudioComplementario = useCallback(async (id: string) => {
|
||||||
const estudio = state.estudiosComplementarios.find(e => e.id === id);
|
const estudio = state.estudiosComplementarios.find(e => e.id === id);
|
||||||
if (!estudio) return;
|
if (!estudio) return;
|
||||||
const internacion = state.internaciones.find(i => i.id === estudio.internacionId);
|
const internacion = state.internaciones.find(i => i.id === estudio.internacionId);
|
||||||
@@ -666,14 +750,20 @@ export function useHospitalStore() {
|
|||||||
console.warn('No tiene permisos para eliminar estudio complementario en esta área');
|
console.warn('No tiene permisos para eliminar estudio complementario en esta área');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('DELETE', `/estudios-complementarios/${id}`);
|
||||||
estudiosComplementarios: prev.estudiosComplementarios.filter(e => e.id !== id),
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
}, [state.internaciones, state.currentUser]);
|
estudiosComplementarios: prev.estudiosComplementarios.filter(e => e.id !== id),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al eliminar estudio:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
// Acciones de interconsultas
|
// Acciones de interconsultas
|
||||||
const agregarInterconsulta = useCallback((interconsulta: Omit<Interconsulta, 'id'>) => {
|
const agregarInterconsulta = useCallback(async (interconsulta: Omit<Interconsulta, 'id'>) => {
|
||||||
const internacion = state.internaciones.find(i => i.id === interconsulta.internacionId);
|
const internacion = state.internaciones.find(i => i.id === interconsulta.internacionId);
|
||||||
const areaId = internacion?.areaId || null;
|
const areaId = internacion?.areaId || null;
|
||||||
if (!canAccessArea(areaId)) {
|
if (!canAccessArea(areaId)) {
|
||||||
@@ -681,14 +771,20 @@ export function useHospitalStore() {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const nuevaInterconsulta: Interconsulta = { ...interconsulta, id: generateUUID() };
|
const nuevaInterconsulta: Interconsulta = { ...interconsulta, id: generateUUID() };
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('POST', '/interconsultas', nuevaInterconsulta);
|
||||||
interconsultas: [...(prev.interconsultas || []), nuevaInterconsulta],
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
return nuevaInterconsulta.id;
|
interconsultas: [...(prev.interconsultas || []), nuevaInterconsulta],
|
||||||
}, [state.internaciones, state.currentUser]);
|
}));
|
||||||
|
return nuevaInterconsulta.id;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al agregar interconsulta:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
const actualizarInterconsulta = useCallback((id: string, datos: Partial<Interconsulta>) => {
|
const actualizarInterconsulta = useCallback(async (id: string, datos: Partial<Interconsulta>) => {
|
||||||
const interconsulta = (state.interconsultas || []).find(ic => ic.id === id);
|
const interconsulta = (state.interconsultas || []).find(ic => ic.id === id);
|
||||||
if (!interconsulta) return;
|
if (!interconsulta) return;
|
||||||
const internacion = state.internaciones.find(i => i.id === interconsulta.internacionId);
|
const internacion = state.internaciones.find(i => i.id === interconsulta.internacionId);
|
||||||
@@ -697,13 +793,19 @@ export function useHospitalStore() {
|
|||||||
console.warn('No tiene permisos para actualizar interconsulta en esta área');
|
console.warn('No tiene permisos para actualizar interconsulta en esta área');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('PUT', `/interconsultas/${id}`, datos);
|
||||||
interconsultas: (prev.interconsultas || []).map(ic => ic.id === id ? { ...ic, ...datos } : ic),
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
}, [state.internaciones, state.currentUser]);
|
interconsultas: (prev.interconsultas || []).map(ic => ic.id === id ? { ...ic, ...datos } : ic),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al actualizar interconsulta:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
const eliminarInterconsulta = useCallback((id: string) => {
|
const eliminarInterconsulta = useCallback(async (id: string) => {
|
||||||
const interconsulta = (state.interconsultas || []).find(ic => ic.id === id);
|
const interconsulta = (state.interconsultas || []).find(ic => ic.id === id);
|
||||||
if (!interconsulta) return;
|
if (!interconsulta) return;
|
||||||
const internacion = state.internaciones.find(i => i.id === interconsulta.internacionId);
|
const internacion = state.internaciones.find(i => i.id === interconsulta.internacionId);
|
||||||
@@ -712,13 +814,19 @@ export function useHospitalStore() {
|
|||||||
console.warn('No tiene permisos para eliminar interconsulta en esta área');
|
console.warn('No tiene permisos para eliminar interconsulta en esta área');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('DELETE', `/interconsultas/${id}`);
|
||||||
interconsultas: (prev.interconsultas || []).filter(ic => ic.id !== id),
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
}, [state.internaciones, state.currentUser]);
|
interconsultas: (prev.interconsultas || []).filter(ic => ic.id !== id),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al eliminar interconsulta:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
const agregarATB = useCallback((atb: Omit<ATB, 'id'>) => {
|
const agregarATB = useCallback(async (atb: Omit<ATB, 'id'>) => {
|
||||||
const internacion = state.internaciones.find(i => i.id === atb.internacionId);
|
const internacion = state.internaciones.find(i => i.id === atb.internacionId);
|
||||||
const areaId = internacion?.areaId || null;
|
const areaId = internacion?.areaId || null;
|
||||||
if (!canAccessArea(areaId)) {
|
if (!canAccessArea(areaId)) {
|
||||||
@@ -726,14 +834,20 @@ export function useHospitalStore() {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const nuevoATB: ATB = { ...atb, id: generateUUID() };
|
const nuevoATB: ATB = { ...atb, id: generateUUID() };
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('POST', '/atb', nuevoATB);
|
||||||
atb: [...prev.atb, nuevoATB],
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
return nuevoATB.id;
|
atb: [...prev.atb, nuevoATB],
|
||||||
}, [state.internaciones, state.currentUser]);
|
}));
|
||||||
|
return nuevoATB.id;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al agregar ATB:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
const actualizarATB = useCallback((id: string, datos: Partial<ATB>) => {
|
const actualizarATB = useCallback(async (id: string, datos: Partial<ATB>) => {
|
||||||
const atb = state.atb.find(a => a.id === id);
|
const atb = state.atb.find(a => a.id === id);
|
||||||
if (!atb) return;
|
if (!atb) return;
|
||||||
const internacion = state.internaciones.find(i => i.id === atb.internacionId);
|
const internacion = state.internaciones.find(i => i.id === atb.internacionId);
|
||||||
@@ -742,11 +856,101 @@ export function useHospitalStore() {
|
|||||||
console.warn('No tiene permisos para actualizar ATB en esta área');
|
console.warn('No tiene permisos para actualizar ATB en esta área');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('PUT', `/atb/${id}`, datos);
|
||||||
atb: prev.atb.map(a => a.id === id ? { ...a, ...datos } : a),
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
}, [state.internaciones, state.currentUser]);
|
atb: prev.atb.map(a => a.id === id ? { ...a, ...datos } : a),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al actualizar ATB:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
|
const eliminarATB = useCallback(async (id: string) => {
|
||||||
|
const atb = state.atb.find(a => a.id === id);
|
||||||
|
if (!atb) return;
|
||||||
|
const internacion = state.internaciones.find(i => i.id === atb.internacionId);
|
||||||
|
const areaId = internacion?.areaId || null;
|
||||||
|
if (!canAccessArea(areaId)) {
|
||||||
|
console.warn('No tiene permisos para eliminar ATB en esta área');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
await apiCall('DELETE', `/atb/${id}`);
|
||||||
|
setState(prev => ({
|
||||||
|
...prev,
|
||||||
|
atb: prev.atb.filter(a => a.id !== id),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al eliminar ATB:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
|
const agregarIndicacion = useCallback(async (indicacion: Omit<Indicacion, 'id'>) => {
|
||||||
|
const internacion = state.internaciones.find(i => i.id === indicacion.internacionId);
|
||||||
|
const areaId = internacion?.areaId || null;
|
||||||
|
if (!canAccessArea(areaId)) {
|
||||||
|
console.warn('No tiene permisos para agregar indicación en esta área');
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
const nuevaIndicacion: Indicacion = { ...indicacion, id: generateUUID() };
|
||||||
|
try {
|
||||||
|
await apiCall('POST', '/indicaciones', nuevaIndicacion);
|
||||||
|
setState(prev => ({
|
||||||
|
...prev,
|
||||||
|
indicaciones: [...prev.indicaciones, nuevaIndicacion],
|
||||||
|
}));
|
||||||
|
return nuevaIndicacion.id;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al agregar indicación:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
|
const actualizarIndicacion = useCallback(async (id: string, datos: Partial<Indicacion>) => {
|
||||||
|
const indicacion = state.indicaciones.find(i => i.id === id);
|
||||||
|
if (!indicacion) return;
|
||||||
|
const internacion = state.internaciones.find(i => i.id === indicacion.internacionId);
|
||||||
|
const areaId = internacion?.areaId || null;
|
||||||
|
if (!canAccessArea(areaId)) {
|
||||||
|
console.warn('No tiene permisos para actualizar indicación en esta área');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
await apiCall('PUT', `/indicaciones/${id}`, datos);
|
||||||
|
setState(prev => ({
|
||||||
|
...prev,
|
||||||
|
indicaciones: prev.indicaciones.map(i => i.id === id ? { ...i, ...datos } : i),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al actualizar indicación:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
|
const eliminarIndicacion = useCallback(async (id: string) => {
|
||||||
|
const indicacion = state.indicaciones.find(i => i.id === id);
|
||||||
|
if (!indicacion) return;
|
||||||
|
const internacion = state.internaciones.find(i => i.id === indicacion.internacionId);
|
||||||
|
const areaId = internacion?.areaId || null;
|
||||||
|
if (!canAccessArea(areaId)) {
|
||||||
|
console.warn('No tiene permisos para eliminar indicación en esta área');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
await apiCall('DELETE', `/indicaciones/${id}`);
|
||||||
|
setState(prev => ({
|
||||||
|
...prev,
|
||||||
|
indicaciones: prev.indicaciones.filter(i => i.id !== id),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al eliminar indicación:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
const eliminarATB = useCallback((id: string) => {
|
const eliminarATB = useCallback((id: string) => {
|
||||||
const atb = state.atb.find(a => a.id === id);
|
const atb = state.atb.find(a => a.id === id);
|
||||||
@@ -808,18 +1012,25 @@ export function useHospitalStore() {
|
|||||||
}));
|
}));
|
||||||
}, [state.internaciones, state.currentUser]);
|
}, [state.internaciones, state.currentUser]);
|
||||||
|
|
||||||
const agregarMovimientoIndicacion = useCallback((movimiento: any) => {
|
const agregarMovimientoIndicacion = useCallback(async (movimiento: any) => {
|
||||||
const internacion = state.internaciones.find(i => i.id === movimiento.internacionId);
|
const internacion = state.internaciones.find(i => i.id === movimiento.internacionId);
|
||||||
const areaId = internacion?.areaId || null;
|
const areaId = internacion?.areaId || null;
|
||||||
if (!canAccessArea(areaId)) {
|
if (!canAccessArea(areaId)) {
|
||||||
console.warn('No tiene permisos para agregar movimiento de indicación en esta área');
|
console.warn('No tiene permisos para agregar movimiento de indicación en esta área');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setState(prev => ({
|
const nuevoMovimiento = { ...movimiento, id: generateUUID() };
|
||||||
...prev,
|
try {
|
||||||
movimientosIndicaciones: [...(prev.movimientosIndicaciones || []), { ...movimiento, id: generateUUID() }],
|
await apiCall('POST', '/movimientos-indicaciones', nuevoMovimiento);
|
||||||
}));
|
setState(prev => ({
|
||||||
}, [state.internaciones, state.currentUser]);
|
...prev,
|
||||||
|
movimientosIndicaciones: [...(prev.movimientosIndicaciones || []), nuevoMovimiento],
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al agregar movimiento:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [state.internaciones, state.currentUser, apiCall]);
|
||||||
|
|
||||||
const getMovimientosByInternacion = useCallback((internacionId: string) => {
|
const getMovimientosByInternacion = useCallback((internacionId: string) => {
|
||||||
return (state.movimientosIndicaciones || [])
|
return (state.movimientosIndicaciones || [])
|
||||||
@@ -828,29 +1039,47 @@ export function useHospitalStore() {
|
|||||||
}, [state.movimientosIndicaciones]);
|
}, [state.movimientosIndicaciones]);
|
||||||
|
|
||||||
// Acciones de areas
|
// Acciones de areas
|
||||||
const agregarArea = useCallback((area: Omit<Area, 'id'>) => {
|
const agregarArea = useCallback(async (area: Omit<Area, 'id'>) => {
|
||||||
const nuevaArea: Area = { ...area, id: generateUUID() };
|
const nuevaArea: Area = { ...area, id: generateUUID() };
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('POST', '/areas', nuevaArea);
|
||||||
areas: [...prev.areas, nuevaArea],
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
return nuevaArea.id;
|
areas: [...prev.areas, nuevaArea],
|
||||||
}, []);
|
}));
|
||||||
|
return nuevaArea.id;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al agregar área:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [apiCall]);
|
||||||
|
|
||||||
const actualizarArea = useCallback((id: string, datos: Partial<Area>) => {
|
const actualizarArea = useCallback(async (id: string, datos: Partial<Area>) => {
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('PUT', `/areas/${id}`, datos);
|
||||||
areas: prev.areas.map(a => a.id === id ? { ...a, ...datos } : a),
|
setState(prev => ({
|
||||||
}));
|
...prev,
|
||||||
}, []);
|
areas: prev.areas.map(a => a.id === id ? { ...a, ...datos } : a),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al actualizar área:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [apiCall]);
|
||||||
|
|
||||||
const eliminarArea = useCallback((id: string) => {
|
const eliminarArea = useCallback(async (id: string) => {
|
||||||
setState(prev => ({
|
try {
|
||||||
...prev,
|
await apiCall('DELETE', `/areas/${id}`);
|
||||||
areas: prev.areas.filter(a => a.id !== id),
|
setState(prev => ({
|
||||||
camas: prev.camas.map(c => c.areaId === id ? { ...c, areaId: undefined } : c),
|
...prev,
|
||||||
}));
|
areas: prev.areas.filter(a => a.id !== id),
|
||||||
}, []);
|
camas: prev.camas.map(c => c.areaId === id ? { ...c, areaId: undefined } : c),
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error al eliminar área:', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}, [apiCall]);
|
||||||
|
|
||||||
// Funciones de utilidad para consultas
|
// Funciones de utilidad para consultas
|
||||||
const getPacienteById = useCallback((id: string) => {
|
const getPacienteById = useCallback((id: string) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user