Bladeren bron

fix(patient-register): clear pending and selected position lists when exiting register process

sw 1 maand geleden
bovenliggende
commit
b2e9e68339

+ 50 - 0
src/states/leavingRegisterMonitor.test.ts

@@ -0,0 +1,50 @@
+// import { configureStore } from '@reduxjs/toolkit';
+// import businessFlowMiddleware from './businessFlowMiddleware';
+// import leavingRegisterMonitor from './leavingRegisterMonitor';
+// import BusinessFlowReducer, { setBusinessFlow } from './BusinessFlowSlice';
+// import viewSelectionReducer, { setAvailableViews, setProtocols } from './patient/viewSelection';
+
+// const store = configureStore({
+//   reducer: {
+//     BusinessFlow: BusinessFlowReducer,
+//     viewSelection: viewSelectionReducer,
+//   },
+//   middleware: (getDefaultMiddleware) =>
+//     getDefaultMiddleware().concat(
+//       businessFlowMiddleware,
+//       leavingRegisterMonitor
+//     ),
+// });
+
+// describe('leavingRegisterMonitor middleware', () => {
+//   beforeEach(() => {
+//     store.dispatch(setBusinessFlow('register'));
+//     store.dispatch(setAvailableViews([{ id: 1, name: 'View1' }]));
+//     store.dispatch(setProtocols([{ id: 1, name: 'Protocol1' }]));
+//   });
+
+//   it('should clear selectedViews and availableViews when transitioning from register to worklist', () => {
+//     store.dispatch(setBusinessFlow('worklist'));
+//     const state = store.getState();
+//     expect(state.viewSelection.selectedViews).toEqual([]);
+//     expect(state.viewSelection.availableViews).toEqual([]);
+//     expect(state.viewSelection.protocols).toEqual([]);
+//   });
+
+//   it('should clear selectedViews and availableViews when transitioning from register to exam', () => {
+//     store.dispatch(setBusinessFlow('exam'));
+//     const state = store.getState();
+//     expect(state.viewSelection.selectedViews).toEqual([]);
+//     expect(state.viewSelection.availableViews).toEqual([]);
+//     expect(state.viewSelection.protocols).toEqual([]);
+//   });
+
+//   it('should not clear selectedViews and availableViews when transitioning from worklist to exam', () => {
+//     store.dispatch(setBusinessFlow('worklist'));
+//     store.dispatch(setBusinessFlow('exam'));
+//     const state = store.getState();
+//     expect(state.viewSelection.selectedViews).toEqual([]);
+//     expect(state.viewSelection.availableViews).toEqual([]);
+//     expect(state.viewSelection.protocols).toEqual([]);
+//   });
+// });

+ 29 - 0
src/states/leavingRegisterMonitor.ts

@@ -0,0 +1,29 @@
+import { Middleware, PayloadAction } from '@reduxjs/toolkit';
+import { setBusinessFlow } from './BusinessFlowSlice';
+import { RootState } from './store';
+import { clearSelectedViews, setAvailableViews } from './patient/viewSelection';
+
+const leavingRegisterMonitor: Middleware =
+  (store) => (next) => (action: PayloadAction<string>) => {
+    if (action.type !== setBusinessFlow.type) {
+      return next(action); // Only handle setBusinessFlow actions
+    }
+
+    const state = store.getState() as RootState;
+    const currentKey = state.BusinessFlow.currentKey;
+
+    const result = next(action);
+    // Check if transitioning from 'register' to a specified action
+    if (currentKey === 'register' && action.payload !== 'register') {
+      // Clear selectedViews and availableViews
+      console.log(
+        `检查到从register退出,进入了 ${action.payload} ,所以清空注册页面的相关信息`
+      );
+      store.dispatch(setAvailableViews([]));
+      store.dispatch(clearSelectedViews());
+    }
+
+    return result;
+  };
+
+export default leavingRegisterMonitor;

+ 4 - 0
src/states/patient/viewSelection/index.ts

@@ -114,6 +114,9 @@ const viewSelectionSlice = createSlice({
         (view) => view.guid !== action.payload
       );
     },
+    clearSelectedViews(state) {
+      state.selectedViews = [];
+    },
   },
   extraReducers: (builder) => {
     builder
@@ -199,6 +202,7 @@ export const {
   setAvailableViews,
   setProtocols,
   removeSelectedView,
+  clearSelectedViews,
 } = viewSelectionSlice.actions;
 
 export default viewSelectionSlice.reducer;

+ 3 - 1
src/states/store.ts

@@ -18,6 +18,7 @@ import { aprMiddleware } from './exam/aprSlice';
 import functionAreaReducer from './view/functionAreaSlice';
 import searchReducer from './patient/worklist/slices/searchSlice';
 import businessFlowMiddleware from './businessFlowMiddleware';
+import leavingRegisterMonitor from './leavingRegisterMonitor';
 import {
   workEntitiesSlice,
   workFiltersSlice,
@@ -79,7 +80,8 @@ const store = configureStore({
       worksListenerMiddleware,
       bodyPositionListenerMiddleware,
       aprMiddleware,
-      businessFlowMiddleware
+      businessFlowMiddleware,
+      leavingRegisterMonitor
     ),
 });