UNPKG

@darwish/hooks-core

Version:

58 lines (57 loc) 2.2 kB
var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; import { useCallback, useMemo, useState } from "react"; import { isArray } from "@darwish/utils-is"; export default function useSet(initialValue) { var init = useCallback(function () { if (isArray(initialValue)) { return new Set(initialValue); } return new Set(initialValue); }, [initialValue]); var _a = useState(init), state = _a[0], setState = _a[1]; var has = useCallback(function (hasValue) { return state.has(hasValue); }, [initialValue, state]); var stableActions = useMemo(function () { return { add: function (addValue) { setState(function (prev) { return new Set(__spreadArray(__spreadArray([], Array.from(prev), true), [addValue], false)); }); }, remove: function (removeValue) { setState(function (prev) { return new Set(Array.from(prev).filter(function (v) { return v !== removeValue; })); }); }, toggle: function (toggleValue) { if (has(toggleValue)) { stableActions.remove(toggleValue); } else { stableActions.add(toggleValue); } }, reset: function () { setState(init); }, }; }, [setState, state]); var utils = __assign({ has: has }, stableActions); return [state, utils]; }