@craftercms/studio-ui
Version:
Services, components, models & utils to build CrafterCMS authoring extensions.
70 lines (68 loc) • 2.67 kB
JavaScript
/*
* 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;