PR fixes, extract format start and finished dates
[arvados-workbench2.git] / src / store / snackbar / snackbar-reducer.ts
index 403c19f0071d4eac0949becc10fbb389082c40bb..fa1717c7a4aba0cd51b0e633d486150fde87b64a 100644 (file)
@@ -2,26 +2,44 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { SnackbarAction, snackbarActions } from "./snackbar-actions";
+import { SnackbarAction, snackbarActions, SnackbarKind, SnackbarMessage } from "./snackbar-actions";
 
 export interface SnackbarState {
-    message: string;
+    messages: SnackbarMessage[];
     open: boolean;
-    hideDuration: number;
 }
 
 const DEFAULT_HIDE_DURATION = 3000;
 
 const initialState: SnackbarState = {
-    message: "",
-    open: false,
-    hideDuration: DEFAULT_HIDE_DURATION
+    messages: [],
+    open: false
 };
 
 export const snackbarReducer = (state = initialState, action: SnackbarAction) => {
     return snackbarActions.match(action, {
-        OPEN_SNACKBAR: data => ({ ...data, open: true }),
-        CLOSE_SNACKBAR: () => initialState,
+        OPEN_SNACKBAR: data => {
+            return {
+                open: true,
+                messages: state.messages.concat({
+                    message: data.message,
+                    hideDuration: data.hideDuration ? data.hideDuration : DEFAULT_HIDE_DURATION,
+                    kind: data.kind ? data.kind : SnackbarKind.INFO, 
+                    link: data.link
+                })
+            };
+        },
+        CLOSE_SNACKBAR: () => ({
+            ...state,
+            open: false
+        }),
+        SHIFT_MESSAGES: () => {
+            const messages = state.messages.filter((m, idx) => idx > 0);
+            return {
+                open: messages.length > 0,
+                messages
+            };
+        },
         default: () => state,
     });
 };