import { createSlice, PayloadAction, Middleware } from '@reduxjs/toolkit'; import { AprConfig, getAprExposureParams } from '../../API/exam/APRActions'; interface AprState { aprConfig: AprConfig; bodysize: string; workstation: string; isAECEnabled: boolean; currentExposureMode: string; } const initialState: AprState = { aprConfig: { AECDensity: 0, AECField: '', AECFilm: 0, Dose: 0, ExposureMode: 0, Focus: 0, TOD: 0, TubeLoad: 0, kV: 0, mA: 0, mAs: 0, ms: 0, }, bodysize: '', workstation: '', isAECEnabled: false, currentExposureMode: '', }; const aprSlice = createSlice({ name: 'apr', initialState, reducers: { setAprConfig: (state, action: PayloadAction) => { state.aprConfig = action.payload; }, setBodysize: (state, action: PayloadAction) => { state.bodysize = action.payload; }, setWorkstation: (state, action: PayloadAction) => { state.workstation = action.payload; }, setIsAECEnabled: (state, action: PayloadAction) => { state.isAECEnabled = action.payload; }, setCurrentExposureMode: (state, action: PayloadAction) => { state.currentExposureMode = action.payload; }, }, }); // eslint-disable-next-line @typescript-eslint/no-explicit-any const aprMiddleware: Middleware = (store) => (next) => (action: any) => { if ( action.type === aprSlice.actions.setBodysize.type || action.type === aprSlice.actions.setWorkstation.type ) { const state = store.getState(); const id = state.bodyPositionList.selectedBodyPosition?.view_id || 'default_id'; // Dynamically determined based on selectedBodyPosition const workStationId = parseInt(state.apr.workstation, 10); const patientSize = state.apr.bodysize; if (state.apr.bodysize && state.apr.workstation) { getAprExposureParams(id, workStationId, patientSize).then((data) => { store.dispatch(setAprConfig(data)); }); } } return next(action); }; export const { setAprConfig, setBodysize, setWorkstation, setIsAECEnabled, setCurrentExposureMode, } = aprSlice.actions; export default aprSlice.reducer; export { aprMiddleware };