X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/28b6afc1e8ccf652c7a8fd43e22a8ac788febd85..04704ea80b294655fe14d0c8cddf4ec1a6b21b4d:/services/workbench2/src/store/multiselect/multiselect-reducer.tsx diff --git a/services/workbench2/src/store/multiselect/multiselect-reducer.tsx b/services/workbench2/src/store/multiselect/multiselect-reducer.tsx index 75c4b1f993..b488932f0b 100644 --- a/services/workbench2/src/store/multiselect/multiselect-reducer.tsx +++ b/services/workbench2/src/store/multiselect/multiselect-reducer.tsx @@ -2,20 +2,38 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { multiselectActionContants } from "./multiselect-actions"; +import { multiselectActionConstants } from "./multiselect-actions"; import { TCheckedList } from "components/data-table/data-table"; type MultiselectToolbarState = { isVisible: boolean; checkedList: TCheckedList; + selectedUuid: string; + disabledButtons: string[]; }; const multiselectToolbarInitialState = { isVisible: false, checkedList: {}, + selectedUuid: '', + disabledButtons: [] }; -const { TOGGLE_VISIBLITY, SET_CHECKEDLIST, DESELECT_ONE } = multiselectActionContants; +const uncheckAllOthers = (inputList: TCheckedList, uuid: string) => { + const checkedlist = {...inputList} + for (const key in checkedlist) { + if (key !== uuid) checkedlist[key] = false; + } + return checkedlist; +}; + +const toggleOneCheck = (inputList: TCheckedList, uuid: string)=>{ + const checkedlist = { ...inputList }; + const isOnlyOneSelected = Object.values(checkedlist).filter(x => x === true).length === 1; + return { ...inputList, [uuid]: (checkedlist[uuid] && checkedlist[uuid] === true) && isOnlyOneSelected ? false : true }; +} + +const { TOGGLE_VISIBLITY, SET_CHECKEDLIST, SELECT_ONE, DESELECT_ONE, DESELECT_ALL_OTHERS, TOGGLE_ONE, SET_SELECTED_UUID, ADD_DISABLED, REMOVE_DISABLED } = multiselectActionConstants; export const multiselectReducer = (state: MultiselectToolbarState = multiselectToolbarInitialState, action) => { switch (action.type) { @@ -23,8 +41,20 @@ export const multiselectReducer = (state: MultiselectToolbarState = multiselectT return { ...state, isVisible: action.payload }; case SET_CHECKEDLIST: return { ...state, checkedList: action.payload }; + case SELECT_ONE: + return { ...state, checkedList: { ...state.checkedList, [action.payload]: true } }; case DESELECT_ONE: return { ...state, checkedList: { ...state.checkedList, [action.payload]: false } }; + case DESELECT_ALL_OTHERS: + return { ...state, checkedList: uncheckAllOthers(state.checkedList, action.payload) }; + case TOGGLE_ONE: + return { ...state, checkedList: toggleOneCheck(state.checkedList, action.payload) }; + case SET_SELECTED_UUID: + return {...state, selectedUuid: action.payload || ''} + case ADD_DISABLED: + return { ...state, disabledButtons: [...state.disabledButtons, action.payload]} + case REMOVE_DISABLED: + return { ...state, disabledButtons: state.disabledButtons.filter((button) => button !== action.payload) }; default: return state; }