ahooks
Version:
react hooks library
81 lines (80 loc) • 2.6 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = useSelections;
var _tslib = require("tslib");
var _react = require("react");
var _useMemoizedFn = _interopRequireDefault(require("../useMemoizedFn"));
function useSelections(items, defaultSelected) {
if (defaultSelected === void 0) {
defaultSelected = [];
}
var _a = (0, _tslib.__read)((0, _react.useState)(defaultSelected), 2),
selected = _a[0],
setSelected = _a[1];
var selectedSet = (0, _react.useMemo)(function () {
return new Set(selected);
}, [selected]);
var isSelected = function isSelected(item) {
return selectedSet.has(item);
};
var select = function select(item) {
selectedSet.add(item);
return setSelected(Array.from(selectedSet));
};
var unSelect = function unSelect(item) {
selectedSet["delete"](item);
return setSelected(Array.from(selectedSet));
};
var toggle = function toggle(item) {
if (isSelected(item)) {
unSelect(item);
} else {
select(item);
}
};
var selectAll = function selectAll() {
items.forEach(function (o) {
selectedSet.add(o);
});
setSelected(Array.from(selectedSet));
};
var unSelectAll = function unSelectAll() {
items.forEach(function (o) {
selectedSet["delete"](o);
});
setSelected(Array.from(selectedSet));
};
var noneSelected = (0, _react.useMemo)(function () {
return items.every(function (o) {
return !selectedSet.has(o);
});
}, [items, selectedSet]);
var allSelected = (0, _react.useMemo)(function () {
return items.every(function (o) {
return selectedSet.has(o);
}) && !noneSelected;
}, [items, selectedSet, noneSelected]);
var partiallySelected = (0, _react.useMemo)(function () {
return !noneSelected && !allSelected;
}, [noneSelected, allSelected]);
var toggleAll = function toggleAll() {
return allSelected ? unSelectAll() : selectAll();
};
return {
selected: selected,
noneSelected: noneSelected,
allSelected: allSelected,
partiallySelected: partiallySelected,
setSelected: setSelected,
isSelected: isSelected,
select: (0, _useMemoizedFn["default"])(select),
unSelect: (0, _useMemoizedFn["default"])(unSelect),
toggle: (0, _useMemoizedFn["default"])(toggle),
selectAll: (0, _useMemoizedFn["default"])(selectAll),
unSelectAll: (0, _useMemoizedFn["default"])(unSelectAll),
toggleAll: (0, _useMemoizedFn["default"])(toggleAll)
};
}
;