history.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import { createEntityListSlices } from '../../../list_template/createListSlices';
  2. import {
  3. createFetchThunk,
  4. createDeleteThunk,
  5. } from '../../../list_template/thunk.factory';
  6. import { work } from '../types/worklist';
  7. import { WorkFilter } from '../types/workfilter';
  8. import { PayloadAction } from '@reduxjs/toolkit';
  9. import {
  10. setId,
  11. setName,
  12. setAccNo,
  13. setStartTime,
  14. setEndTime,
  15. setStatus,
  16. setPage,
  17. setPageSize,
  18. } from '../slices/searchSlice';
  19. // Define the fetch thunk
  20. import { fetchTaskList } from '../../../../API/patient/workActions';
  21. export const fetchWorkThunk = createFetchThunk<WorkFilter, work>(
  22. 'worklist',
  23. async ({ page, pageSize, filters }) => {
  24. // const filtersEx: WorkFilter = { ...filters, status: 'Arrived' }
  25. const { items, total } = await fetchTaskList(page, pageSize, filters);
  26. return { data: items, total };
  27. }
  28. );
  29. // Define the delete thunk
  30. const deleteWorkThunk = createDeleteThunk(
  31. 'worklist',
  32. // eslint-disable-next-line
  33. async (ids) => {
  34. // todo 还没有实现API
  35. // Implement the deleter function to delete worklist items
  36. // await fetch(`/api/worklist`, {
  37. // method: 'DELETE',
  38. // headers: {
  39. // 'Content-Type': 'application/json',
  40. // },
  41. // body: JSON.stringify({ ids }),
  42. // });
  43. }
  44. );
  45. const extraReducersForFilter = (builder) => {
  46. builder.addCase(
  47. setId.type,
  48. (state: WorkFilter, action: PayloadAction<string>) => {
  49. state.patient_id = action.payload;
  50. }
  51. );
  52. builder.addCase(
  53. setName.type,
  54. (state: WorkFilter, action: PayloadAction<string>) => {
  55. state.patient_name = action.payload;
  56. }
  57. );
  58. builder.addCase(
  59. setAccNo.type,
  60. (state: WorkFilter, action: PayloadAction<string>) => {
  61. state.access_number = action.payload;
  62. }
  63. );
  64. builder.addCase(
  65. setStartTime.type,
  66. (state: WorkFilter, action: PayloadAction<string>) => {
  67. state.start_time = action.payload;
  68. }
  69. );
  70. builder.addCase(
  71. setEndTime.type,
  72. (state: WorkFilter, action: PayloadAction<string>) => {
  73. state.end_time = action.payload;
  74. }
  75. );
  76. builder.addCase(
  77. setStatus.type,
  78. (state: WorkFilter, action: PayloadAction<string>) => {
  79. state.status = action.payload;
  80. }
  81. );
  82. builder.addCase(
  83. setPage.type,
  84. (state: WorkFilter, action: PayloadAction<number>) => {
  85. state.page = action.payload;
  86. }
  87. );
  88. builder.addCase(
  89. setPageSize.type,
  90. (state: WorkFilter, action: PayloadAction<number>) => {
  91. state.page_size = action.payload;
  92. }
  93. );
  94. };
  95. // Create the worklist slices
  96. const {
  97. entitiesSlice,
  98. filtersSlice,
  99. paginationSlice,
  100. selectionSlice,
  101. uiSlice,
  102. } = createEntityListSlices<work, WorkFilter>(
  103. 'historylist',
  104. fetchWorkThunk,
  105. deleteWorkThunk,
  106. 'StudyID',
  107. extraReducersForFilter,
  108. {
  109. patient_id: '',
  110. patient_name: '',
  111. start_time: '',
  112. end_time: '',
  113. access_number: '',
  114. status: 'Completed',
  115. page: 1,
  116. page_size: 10,
  117. } satisfies WorkFilter
  118. );
  119. export const historyEntitiesSlice = entitiesSlice;
  120. export const historyFiltersSlice = filtersSlice;
  121. export const historyPaginationSlice = paginationSlice;
  122. export const historySelectionSlice = selectionSlice;
  123. export const historyUISlice = uiSlice;