UNPKG

@supunlakmal/hooks

Version:

A collection of reusable React hooks

59 lines 2.03 kB
import { useMemo, useState } from 'react'; /** * Custom hook to manage state as a Set, providing helper functions. * * @template T - The type of the values in the Set. * @param initialSet - Optional initial Set or an iterable of values. * @returns A tuple containing the current Set state and an actions object. */ export const useSet = (initialSet) => { const [set, setSet] = useState(() => new Set(initialSet)); const actions = useMemo(() => ({ add: (value) => { setSet((prevSet) => { if (prevSet.has(value)) { return prevSet; // No change if value already exists } const newSet = new Set(prevSet); newSet.add(value); return newSet; }); }, remove: (value) => { setSet((prevSet) => { if (!prevSet.has(value)) { return prevSet; // No change if value doesn't exist } const newSet = new Set(prevSet); newSet.delete(value); return newSet; }); }, toggle: (value) => { setSet((prevSet) => { const newSet = new Set(prevSet); if (newSet.has(value)) { newSet.delete(value); } else { newSet.add(value); } return newSet; }); }, reset: () => { // Reset back to the initial state provided when the hook was first called setSet(new Set(initialSet)); }, clear: () => { // Clear the set completely setSet(new Set()); }, has: (value) => { // Direct check on the current set state return set.has(value); }, }), [initialSet]); // Recalculate actions only if initialSet reference changes return [set, actions]; }; //# sourceMappingURL=useSet.js.map