UNPKG

ahooks

Version:
81 lines (80 loc) 2.6 kB
"use strict"; 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) }; }