Persist dialog data after closing to avoid dialog content blinking
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Thu, 2 Aug 2018 13:38:41 +0000 (15:38 +0200)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Thu, 2 Aug 2018 13:38:41 +0000 (15:38 +0200)
Feature #13855

Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski@contractors.roche.com>

src/store/dialog/dialog-reducer.test.ts
src/store/dialog/dialog-reducer.ts

index 1beb6eeea31b779d07bee73c48e45ba8cd3d3404..f0bf9be8189fe31484135a61712675c3c46b5149 100644 (file)
@@ -18,4 +18,13 @@ describe('DialogReducer', () => {
         const state = dialogReducer({}, dialogActions.CLOSE_DIALOG({ id }));
         expect(state[id]).toEqual({ open: false });
     });
+    
+    it('CLOSE_DIALOG persist data', () => {
+        const id = 'test id';
+        const [newState] = [{}]
+            .map(state => dialogReducer(state, dialogActions.OPEN_DIALOG({ id, data: 'test data' })))
+            .map(state => dialogReducer(state, dialogActions.CLOSE_DIALOG({ id })));
+        
+        expect(newState[id]).toEqual({ open: false, data: 'test data' });
+    });
 });
index 6013ab64c1bc240404679963fd0d355a1e402c16..e49f65debc70c37dbfaeaa3f960cbf60442a96fe 100644 (file)
@@ -14,7 +14,9 @@ export interface Dialog {
 export const dialogReducer = (state: DialogState = {}, action: DialogAction) =>
     dialogActions.match(action, {
         OPEN_DIALOG: ({ id, data }) => ({ ...state, [id]: { open: true, data } }),
-        CLOSE_DIALOG: ({ id }) => ({ ...state, [id]: { open: false } }),
+        CLOSE_DIALOG: ({ id }) => ({ 
+            ...state, 
+            [id]: state[id] ? { ...state[id], open: false } : { open: false } }),
         default: () => state,
     });