| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import { createSlice, PayloadAction } from '@reduxjs/toolkit';
- import { saveReportThunk } from './saveReportThunk';
- import { previewReportThunk } from './previewReportThunk';
- import { Task } from '@/domain/work';
- import { ReportContent, ReportContentValue } from '@/API/report/ReportActions';
- import { set } from 'lodash';
- interface DiagnosticReportState {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- report: ReportContent | null;
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- previewResponse: any;
- isPreviewing: boolean;
- isSaving: boolean;
- isFinished: boolean;
- visible: boolean;
- needsPreview: boolean;
- currentWork: Task | null; // 当前选中的工作
- }
- const initialState: DiagnosticReportState = {
- report: null,
- previewResponse: null,
- isPreviewing: false,
- isSaving: false,
- isFinished: false,
- visible: false,
- needsPreview: false,
- currentWork: null,
- };
- const diagnosticReportSlice = createSlice({
- name: 'diagnosticReport',
- initialState,
- reducers: {
- finishReport(state) {
- state.isFinished = true;
- },
- setVisible(
- state,
- action: PayloadAction<boolean | { visible: boolean; work?: Task }>
- ) {
- if (typeof action.payload === 'boolean') {
- state.visible = action.payload;
- } else {
- state.visible = action.payload.visible;
- if (action.payload.work) {
- state.currentWork = action.payload.work;
- }
- }
- },
- toggleVisible(state) {
- state.visible = !state.visible;
- },
- setNeedsPreview(state, action: PayloadAction<boolean>) {
- state.needsPreview = action.payload;
- },
- setReport(state, action: PayloadAction<ReportContent>) {
- state.report = action.payload;
- },
- resetReport(state) {
- state.report = initialState.report;
- },
- updateReportField(
- state,
- action: PayloadAction<{
- path: keyof ReportContent | string;
- value: ReportContentValue;
- }>
- ) {
- const { path, value } = action.payload;
- set(state, path, value);
- },
- },
- extraReducers: (builder) => {
- builder
- .addCase(saveReportThunk.pending, (state) => {
- state.isSaving = true;
- })
- .addCase(saveReportThunk.fulfilled, (state) => {
- state.isSaving = false;
- state.isFinished = true;
- })
- .addCase(saveReportThunk.rejected, (state) => {
- state.isSaving = false;
- })
- .addCase(previewReportThunk.pending, (state) => {
- state.isPreviewing = true;
- })
- .addCase(previewReportThunk.fulfilled, (state, action) => {
- state.isPreviewing = false;
- state.needsPreview = true;
- state.previewResponse = action.payload; // Store the response in the new field
- })
- .addCase(previewReportThunk.rejected, (state) => {
- state.isPreviewing = false;
- });
- },
- });
- export const {
- finishReport,
- setVisible,
- toggleVisible,
- setNeedsPreview,
- setReport,
- resetReport,
- updateReportField,
- } = diagnosticReportSlice.actions;
- export default diagnosticReportSlice.reducer;
|