Merge branch '21128-toolbar-context-menu'
[arvados-workbench2.git] / src / store / multiselect / multiselect-reducer.tsx
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { multiselectActionContants } from "./multiselect-actions";
6 import { TCheckedList } from "components/data-table/data-table";
7
8 type MultiselectToolbarState = {
9     isVisible: boolean;
10     checkedList: TCheckedList;
11     selectedUuid: string;
12     disabledButtons: string[]
13 };
14
15 const multiselectToolbarInitialState = {
16     isVisible: false,
17     checkedList: {},
18     selectedUuid: '',
19     disabledButtons: []
20 };
21
22 const { TOGGLE_VISIBLITY, SET_CHECKEDLIST, SELECT_ONE, DESELECT_ONE, TOGGLE_ONE, SET_SELECTED_UUID, ADD_DISABLED, REMOVE_DISABLED } = multiselectActionContants;
23
24 export const multiselectReducer = (state: MultiselectToolbarState = multiselectToolbarInitialState, action) => {
25     switch (action.type) {
26         case TOGGLE_VISIBLITY:
27             return { ...state, isVisible: action.payload };
28         case SET_CHECKEDLIST:
29             return { ...state, checkedList: action.payload };
30         case SELECT_ONE:
31             return { ...state, checkedList: { ...state.checkedList, [action.payload]: true } };
32         case DESELECT_ONE:
33             return { ...state, checkedList: { ...state.checkedList, [action.payload]: false } };
34         case TOGGLE_ONE:
35             return { ...state, checkedList: { ...state.checkedList, [action.payload]: !state.checkedList[action.payload] } };
36         case SET_SELECTED_UUID:
37             return {...state, selectedUuid: action.payload || ''}
38         case ADD_DISABLED:
39             return { ...state, disabledButtons: [...state.disabledButtons, action.payload]}
40         case REMOVE_DISABLED:
41             return { ...state, disabledButtons: state.disabledButtons.filter((button) => button !== action.payload) };
42         default:
43             return state;
44     }
45 };