@uiw-admin/components
Version:
86 lines (84 loc) • 2.69 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = useSelections;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
/* eslint-disable no-unused-vars */
function useSelections(items) {
var defaultSelected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var isSingle = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var _useState = (0, _react.useState)(defaultSelected),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
selected = _useState2[0],
setSelected = _useState2[1];
var selectedSet = (0, _react.useMemo)(function () {
return new Set(selected);
}, [selected]);
var isSelected = function isSelected(item) {
return selectedSet.has(item);
};
var unSelectAll = function unSelectAll() {
items.forEach(function (o) {
selectedSet["delete"](o);
});
setSelected(Array.from(selectedSet));
};
var select = function select(item) {
if (isSingle) {
unSelectAll();
}
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 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: select,
unSelect: unSelect,
toggle: toggle,
selectAll: selectAll,
unSelectAll: unSelectAll,
toggleAll: toggleAll
};
}
module.exports = exports.default;