X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/c632f0edf3f863fd29efb90e010f286b40cb9e92..c421cba83fb4d6ca6dd11ada099c7b8c1da55d27:/src/store/snackbar/snackbar-reducer.ts diff --git a/src/store/snackbar/snackbar-reducer.ts b/src/store/snackbar/snackbar-reducer.ts index 403c19f0..73c566fc 100644 --- a/src/store/snackbar/snackbar-reducer.ts +++ b/src/store/snackbar/snackbar-reducer.ts @@ -2,26 +2,43 @@ // // 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 + }) + }; + }, + CLOSE_SNACKBAR: () => ({ + ...state, + open: false + }), + SHIFT_MESSAGES: () => { + const messages = state.messages.filter((m, idx) => idx > 0); + return { + open: messages.length > 0, + messages + }; + }, default: () => state, }); };