|
@@ -0,0 +1,126 @@
|
|
|
+import { createEntityListSlices } from '../../../list_template/createListSlices';
|
|
|
+import {
|
|
|
+ createFetchThunk,
|
|
|
+ createDeleteThunk,
|
|
|
+} from '../../../list_template/thunk.factory';
|
|
|
+import { work } from '../types/worklist';
|
|
|
+import { WorkFilter } from '../types/workfilter';
|
|
|
+import { PayloadAction } from '@reduxjs/toolkit';
|
|
|
+import {
|
|
|
+ setId,
|
|
|
+ setName,
|
|
|
+ setAccNo,
|
|
|
+ setStartTime,
|
|
|
+ setEndTime,
|
|
|
+ setStatus,
|
|
|
+ setPage,
|
|
|
+ setPageSize,
|
|
|
+} from '../slices/searchSlice';
|
|
|
+
|
|
|
+// Define the fetch thunk
|
|
|
+import { fetchTaskList } from '../../../../API/patient/workActions';
|
|
|
+
|
|
|
+export const fetchWorkThunk = createFetchThunk<WorkFilter, work>(
|
|
|
+ 'worklist',
|
|
|
+ async ({ page, pageSize, filters }) => {
|
|
|
+ // const filtersEx: WorkFilter = { ...filters, status: 'Arrived' }
|
|
|
+ const { items, total } = await fetchTaskList(page, pageSize, filters);
|
|
|
+ return { data: items, total };
|
|
|
+ }
|
|
|
+);
|
|
|
+
|
|
|
+// Define the delete thunk
|
|
|
+const deleteWorkThunk = createDeleteThunk(
|
|
|
+ 'worklist',
|
|
|
+ // eslint-disable-next-line
|
|
|
+ async (ids) => {
|
|
|
+ // todo 还没有实现API
|
|
|
+ // Implement the deleter function to delete worklist items
|
|
|
+ // await fetch(`/api/worklist`, {
|
|
|
+ // method: 'DELETE',
|
|
|
+ // headers: {
|
|
|
+ // 'Content-Type': 'application/json',
|
|
|
+ // },
|
|
|
+ // body: JSON.stringify({ ids }),
|
|
|
+ // });
|
|
|
+ }
|
|
|
+);
|
|
|
+const extraReducersForFilter = (builder) => {
|
|
|
+ builder.addCase(
|
|
|
+ setId.type,
|
|
|
+ (state: WorkFilter, action: PayloadAction<string>) => {
|
|
|
+ state.patient_id = action.payload;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ builder.addCase(
|
|
|
+ setName.type,
|
|
|
+ (state: WorkFilter, action: PayloadAction<string>) => {
|
|
|
+ state.patient_name = action.payload;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ builder.addCase(
|
|
|
+ setAccNo.type,
|
|
|
+ (state: WorkFilter, action: PayloadAction<string>) => {
|
|
|
+ state.access_number = action.payload;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ builder.addCase(
|
|
|
+ setStartTime.type,
|
|
|
+ (state: WorkFilter, action: PayloadAction<string>) => {
|
|
|
+ state.start_time = action.payload;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ builder.addCase(
|
|
|
+ setEndTime.type,
|
|
|
+ (state: WorkFilter, action: PayloadAction<string>) => {
|
|
|
+ state.end_time = action.payload;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ builder.addCase(
|
|
|
+ setStatus.type,
|
|
|
+ (state: WorkFilter, action: PayloadAction<string>) => {
|
|
|
+ state.status = action.payload;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ builder.addCase(
|
|
|
+ setPage.type,
|
|
|
+ (state: WorkFilter, action: PayloadAction<number>) => {
|
|
|
+ state.page = action.payload;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ builder.addCase(
|
|
|
+ setPageSize.type,
|
|
|
+ (state: WorkFilter, action: PayloadAction<number>) => {
|
|
|
+ state.page_size = action.payload;
|
|
|
+ }
|
|
|
+ );
|
|
|
+};
|
|
|
+// Create the worklist slices
|
|
|
+const {
|
|
|
+ entitiesSlice,
|
|
|
+ filtersSlice,
|
|
|
+ paginationSlice,
|
|
|
+ selectionSlice,
|
|
|
+ uiSlice,
|
|
|
+} = createEntityListSlices<work, WorkFilter>(
|
|
|
+ 'historylist',
|
|
|
+ fetchWorkThunk,
|
|
|
+ deleteWorkThunk,
|
|
|
+ extraReducersForFilter,
|
|
|
+ {
|
|
|
+ patient_id: '',
|
|
|
+ patient_name: '',
|
|
|
+ start_time: '',
|
|
|
+ end_time: '',
|
|
|
+ access_number: '',
|
|
|
+ status: 'Completed',
|
|
|
+ page: 1,
|
|
|
+ page_size: 10,
|
|
|
+ } satisfies WorkFilter
|
|
|
+);
|
|
|
+
|
|
|
+export const historyEntitiesSlice = entitiesSlice;
|
|
|
+export const historyFiltersSlice = filtersSlice;
|
|
|
+export const historyPaginationSlice = paginationSlice;
|
|
|
+export const historySelectionSlice = selectionSlice;
|
|
|
+export const historyUISlice = uiSlice;
|