21128: multiselect vs details panel resolved Arvados-DCO-1.1-Signed-off-by: Lisa...
[arvados.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 };
13
14 const multiselectToolbarInitialState = {
15     isVisible: false,
16     checkedList: {},
17     selectedUuid: '',
18 };
19
20 const { TOGGLE_VISIBLITY, SET_CHECKEDLIST, SELECT_ONE, DESELECT_ONE, TOGGLE_ONE, SET_SELECTED_UUID } = multiselectActionContants;
21
22 export const multiselectReducer = (state: MultiselectToolbarState = multiselectToolbarInitialState, action) => {
23     switch (action.type) {
24         case TOGGLE_VISIBLITY:
25             return { ...state, isVisible: action.payload };
26         case SET_CHECKEDLIST:
27             return { ...state, checkedList: action.payload };
28         case SELECT_ONE:
29             return { ...state, checkedList: { ...state.checkedList, [action.payload]: true } };
30         case DESELECT_ONE:
31             return { ...state, checkedList: { ...state.checkedList, [action.payload]: false } };
32         case TOGGLE_ONE:
33             return { ...state, checkedList: { ...state.checkedList, [action.payload]: !state.checkedList[action.payload] } };
34         case SET_SELECTED_UUID:
35             return {...state, selectedUuid: action.payload || ''}
36         default:
37             return state;
38     }
39 };