53 lines
1.8 KiB
TypeScript
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.
|
|
*/
|