X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/fc14bf232fe2cb77bf1f14ab0002fca606234214..c48d10802d4ae95273f8b98e622e5df200cdc3a7:/src/store/snackbar/snackbar-reducer.ts diff --git a/src/store/snackbar/snackbar-reducer.ts b/src/store/snackbar/snackbar-reducer.ts index fc2f4a19..fa1717c7 100644 --- a/src/store/snackbar/snackbar-reducer.ts +++ b/src/store/snackbar/snackbar-reducer.ts @@ -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 => ({ ...initialState, ...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, }); };