rooks
Version:
Essential React custom hooks ⚓ to super charge your components!
50 lines (49 loc) • 1.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useSetState = void 0;
var react_1 = require("react");
/**
* useSetState
* @description Manage the state of a Set in React.
* @param {Set<T>} initialSetValue The initial value of the set to manage.
* @returns {UseSetStateReturnValue<T>} The state of the Set and the controls.
* @see {@link https://react-hooks.org/docs/useSetState}
* @example
* import { useSetState } from "./useSetState";
* const [set, setControls] = useSetState(new Set());
* setControls.add(1); // {1}
* setControls.add(2); // {1, 2}
* setControls.delete(1); // {2}
* setControls.clear(); // {}
*
*/
function useSetState(initialSetValue) {
var _a = (0, react_1.useState)(new Set(initialSetValue)), setValue = _a[0], setSetValue = _a[1];
var add = (0, react_1.useCallback)(function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
setSetValue(new Set(setValue.add.apply(setValue, args)));
}, [setValue, setSetValue]);
var deleteValue = (0, react_1.useCallback)(function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var newSetValue = new Set(setValue);
newSetValue.delete.apply(newSetValue, args);
setSetValue(newSetValue);
}, [setValue, setSetValue]);
var clear = (0, react_1.useCallback)(function () {
setSetValue(new Set());
}, [setSetValue]);
var controls = (0, react_1.useMemo)(function () {
return { add: add, delete: deleteValue, clear: clear };
}, [add, deleteValue, clear]);
var returnValue = (0, react_1.useMemo)(function () {
return [setValue, controls];
}, [setValue, controls]);
return returnValue;
}
exports.useSetState = useSetState;