19231: Add smaller page sizes (10 and 20 items) to load faster
[arvados-workbench2.git] / src / store / snackbar / snackbar-reducer.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { SnackbarAction, snackbarActions, SnackbarKind, SnackbarMessage } from "./snackbar-actions";
6
7 export interface SnackbarState {
8     messages: SnackbarMessage[];
9     open: boolean;
10 }
11
12 const DEFAULT_HIDE_DURATION = 3000;
13
14 const initialState: SnackbarState = {
15     messages: [],
16     open: false
17 };
18
19 export const snackbarReducer = (state = initialState, action: SnackbarAction) => {
20     return snackbarActions.match(action, {
21         OPEN_SNACKBAR: data => {
22             return {
23                 open: true,
24                 messages: state.messages.concat({
25                     message: data.message,
26                     hideDuration: data.hideDuration ? data.hideDuration : DEFAULT_HIDE_DURATION,
27                     kind: data.kind ? data.kind : SnackbarKind.INFO, 
28                     link: data.link
29                 })
30             };
31         },
32         CLOSE_SNACKBAR: () => ({
33             ...state,
34             open: false
35         }),
36         SHIFT_MESSAGES: () => {
37             const messages = state.messages.filter((m, idx) => idx > 0);
38             return {
39                 open: messages.length > 0,
40                 messages
41             };
42         },
43         default: () => state,
44     });
45 };