MCPcopy
hub / github.com/kitze/react-hanger / useSet

Function useSet

src/array/useSet.ts:14–51  ·  view source on GitHub ↗
(initialState: Set<T> = new Set())

Source from the content-addressed store, hash-verified

12const clone = <T>(value: Set<T>) => new Set<T>(value);
13
14export function useSet<T>(initialState: Set<T> = new Set()): UseSet<T> {
15 const [value, setValue] = useState(initialState);
16 const add = useCallback((item: T) => {
17 setValue((prevValue) => {
18 const copy = clone(prevValue);
19 copy.add(item);
20 return copy;
21 });
22 }, []);
23
24 const remove = useCallback((item: T) => {
25 setValue((prevValue) => {
26 const copy = clone(prevValue);
27 copy.delete(item);
28 return copy;
29 });
30 }, []);
31
32 const clear = useCallback(() => {
33 setValue((prevValue) => {
34 const copy = clone(prevValue);
35 copy.clear();
36 return copy;
37 });
38 }, []);
39
40 const actions: UseSetActions<T> = useMemo(
41 () => ({
42 setValue,
43 add,
44 remove,
45 clear,
46 }),
47 [add, clear, remove],
48 );
49
50 return useMemo(() => [value, actions], [value, actions]);
51}

Callers 1

index.test.tsFile · 0.90

Calls 1

cloneFunction · 0.85

Tested by

no test coverage detected