NeoScan_Physician/app/modules/CaseReview/redux/caseReviewActions.ts

53 lines
1.8 KiB
TypeScript

/*
* File: caseReviewActions.ts
* Description: Async actions (thunks) for CaseReview state
* Design & Developed by Tech4Biz Solutions
* Copyright (c) Spurrin Innovations. All rights reserved.
*/
import { createAsyncThunk } from '@reduxjs/toolkit';
import { setLoading, selectCase, setError } from './caseReviewSlice';
import { setImages } from './dicomSlice';
import { setFindings, setConfidence } from './aiAnalysisSlice';
import { dicomAPI } from '../services/dicomAPI';
import { aiAnalysisAPI } from '../services/aiAnalysisAPI';
/**
* Thunk to fetch case details, DICOM images, and AI analysis
*/
export const fetchCaseDetails = createAsyncThunk(
'caseReview/fetchCaseDetails',
async (caseId: string, { dispatch, rejectWithValue }) => {
try {
dispatch(setLoading(true));
// Fetch DICOM images
const dicomRes = await dicomAPI.getImages(caseId);
if (dicomRes.ok && dicomRes.data) {
dispatch(setImages(dicomRes.data));
} else {
dispatch(setError('Failed to load DICOM images'));
return rejectWithValue('Failed to load DICOM images');
}
// Fetch AI analysis
const aiRes = await aiAnalysisAPI.getAnalysis(caseId);
if (aiRes.ok && aiRes.data) {
dispatch(setFindings(aiRes.data.findings));
dispatch(setConfidence(aiRes.data.confidence));
} else {
dispatch(setError('Failed to load AI analysis'));
return rejectWithValue('Failed to load AI analysis');
}
dispatch(setLoading(false));
} catch (error: any) {
dispatch(setError(error.message));
dispatch(setLoading(false));
return rejectWithValue(error.message);
}
}
);
/*
* End of File: caseReviewActions.ts
* Design & Developed by Tech4Biz Solutions
* Copyright (c) Spurrin Innovations. All rights reserved.
*/