UNPKG

@craftercms/studio-ui

Version:

Services, components, models & utils to build CrafterCMS authoring extensions.

70 lines (68 loc) 2.67 kB
/* * Copyright (C) 2007-2022 Crafter Software Corporation. All Rights Reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* * Copyright (C) 2007-2023 Crafter Software Corporation. All Rights Reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ import { useMemo, useState } from 'react'; import { getDashletFilterSystemTypeGroups, setDashletFilterSystemTypeGroups } from '../utils/state'; import { filterOptionsLookup } from '../components/ActivityDashlet/DashletFilter'; import useActiveSite from './useActiveSite'; export function useDashletFilterState(storageKey) { const { uuid } = useActiveSite(); const [selectedKeys, setSelectedKeys] = useState(() => getDashletFilterSystemTypeGroups(uuid, storageKey) ?? ['all']); const getUpdatedKeys = (key) => { let updatedKeys = key === 'all' ? [key] : selectedKeys.includes(key) ? selectedKeys.filter((k) => k !== key) : [...selectedKeys.filter((k) => k !== 'all'), key]; if (updatedKeys.length === 0) { updatedKeys = ['all']; } return updatedKeys; }; const selectedTypes = useMemo(() => { const types = []; selectedKeys.forEach((key) => { key && types.push(...filterOptionsLookup[key].types); }); return types; }, [selectedKeys]); const onChange = (e, key) => { const newKeys = getUpdatedKeys(key); setSelectedKeys(newKeys); setDashletFilterSystemTypeGroups(uuid, storageKey, newKeys); }; return { selectedKeys, onChange, selectedTypes }; } export default useDashletFilterState;