UNPKG

@uiw-admin/components

Version:
61 lines 1.76 kB
/* eslint-disable no-unused-vars */ import { useMemo, useState } from 'react'; export default function useSelections(items, defaultSelected, isSingle) { if (defaultSelected === void 0) { defaultSelected = []; } if (isSingle === void 0) { isSingle = false; } var [selected, setSelected] = useState(defaultSelected); var selectedSet = useMemo(() => new Set(selected), [selected]); var isSelected = item => selectedSet.has(item); var unSelectAll = () => { items.forEach(o => { selectedSet.delete(o); }); setSelected(Array.from(selectedSet)); }; var select = item => { if (isSingle) { unSelectAll(); } selectedSet.add(item); return setSelected(Array.from(selectedSet)); }; var unSelect = item => { selectedSet.delete(item); return setSelected(Array.from(selectedSet)); }; var toggle = item => { if (isSelected(item)) { unSelect(item); } else { select(item); } }; var selectAll = () => { items.forEach(o => { selectedSet.add(o); }); setSelected(Array.from(selectedSet)); }; var noneSelected = useMemo(() => items.every(o => !selectedSet.has(o)), [items, selectedSet]); var allSelected = useMemo(() => items.every(o => selectedSet.has(o)) && !noneSelected, [items, selectedSet, noneSelected]); var partiallySelected = useMemo(() => !noneSelected && !allSelected, [noneSelected, allSelected]); var toggleAll = () => allSelected ? unSelectAll() : selectAll(); return { selected, noneSelected, allSelected, partiallySelected, setSelected, isSelected, select: select, unSelect: unSelect, toggle: toggle, selectAll: selectAll, unSelectAll: unSelectAll, toggleAll: toggleAll }; }