import {useCallback, useRef, useState} from 'react';
export default function useSet(initialState = new Set()) {
const initialSetRef = useRef(initialState);
const [set, setSet] = useState(initialState);
const add = useCallback((value) => {
setSet((prev) => {
const next = new Set(prev);
next.add(value);
return next;
});
}, []);
const remove = useCallback((value) => {
setSet((prev) => {
const next = new Set(prev);
next.delete(value);
return next;
});
}, []);
const toggle = useCallback((value) => {
setSet((prev) => {
const next = new Set(prev);
if(next.has(value)) {
next.delete(value);
} else {
next.add(value);
}
return next;
});
}, []);
const reset = useCallback(() => {
setSet(initialSetRef.current);
}, [initialSetRef]);
const clear = useCallback(() => {
setSet(new Set());
}, []);
return {
set,
add,
remove,
toggle,
reset,
clear,
};
}