099a1b5bf836c9836ac8f143405edf8f1424112d
[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 };
12
13 const multiselectToolbarInitialState = {
14     isVisible: false,
15     checkedList: {},
16 };
17
18 const { TOGGLE_VISIBLITY, SET_CHECKEDLIST, SELECT_ONE, DESELECT_ONE, TOGGLE_ONE } = multiselectActionContants;
19
20 export const multiselectReducer = (state: MultiselectToolbarState = multiselectToolbarInitialState, action) => {
21     switch (action.type) {
22         case TOGGLE_VISIBLITY:
23             return { ...state, isVisible: action.payload };
24         case SET_CHECKEDLIST:
25             return { ...state, checkedList: action.payload };
26         case SELECT_ONE:
27             return { ...state, checkedList: { ...state.checkedList, [action.payload]: true } };
28         case DESELECT_ONE:
29             return { ...state, checkedList: { ...state.checkedList, [action.payload]: false } };
30         case TOGGLE_ONE:
31             return { ...state, checkedList: { ...state.checkedList, [action.payload]: !state.checkedList[action.payload] } };
32         default:
33             return state;
34     }
35 };