@uiw-admin/components
Version:
61 lines • 1.76 kB
JavaScript
/* 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
};
}