import { createSlice, PayloadAction } from '@reduxjs/toolkit'; import { View as BodyPosition } from '../../API/patient/viewActions'; import { Work } from './examWorksCacheSlice'; import { dview } from '@/domain/dview'; export interface ExtendedBodyPosition extends BodyPosition { patient_name: string; patient_id: string; registration_number: string; study_description: string; body_position_image: string; collimator_length: number | string; collimator_width: number | string; sid: string; work: Work; sop_instance_uid: string; series_instance_uid?: string; study_instance_uid?: string; secondary_sop_uid?: string; study_id?: string; dview: dview; } interface BodyPositionListState { bodyPositions: ExtendedBodyPosition[]; selectedBodyPosition: ExtendedBodyPosition | null; } const initialState: BodyPositionListState = { bodyPositions: [], selectedBodyPosition: null, }; const bodyPositionListSlice = createSlice({ name: 'bodyPositionList', initialState, reducers: { addBodyPosition: (state, action: PayloadAction) => { state.bodyPositions.push(action.payload); }, setBodyPositions: ( state, action: PayloadAction ) => { state.bodyPositions = action.payload; }, setSelectedBodyPosition: ( state, action: PayloadAction ) => { state.selectedBodyPosition = action.payload; }, setByIndex: (state, action: PayloadAction) => { if (action.payload >= 0 && action.payload < state.bodyPositions.length) { state.selectedBodyPosition = state.bodyPositions[action.payload]; } }, addViewsToBodyPosition: ( state, action: PayloadAction<{ instanceUid: string; dviews: dview[] }> ) => { const [dview] = action.payload.dviews; if (dview && state.selectedBodyPosition) { const newBodyPosition: ExtendedBodyPosition = { ...state.selectedBodyPosition, work: { ...state.selectedBodyPosition.work, Views: [...state.selectedBodyPosition.work.Views, dview], }, sop_instance_uid: action.payload.instanceUid, }; state.bodyPositions.push(newBodyPosition); } }, removeBodyPositionBySopInstanceUid: ( state, action: PayloadAction ) => { state.bodyPositions = state.bodyPositions.filter( (bodyPosition) => bodyPosition.sop_instance_uid !== action.payload ); }, }, }); export const { addBodyPosition, setBodyPositions, setSelectedBodyPosition, setByIndex, addViewsToBodyPosition, removeBodyPositionBySopInstanceUid, } = bodyPositionListSlice.actions; export default bodyPositionListSlice.reducer;