mirror of
https://github.com/oxen-io/session-desktop.git
synced 2023-12-14 02:12:57 +01:00
34 lines
917 B
TypeScript
34 lines
917 B
TypeScript
import { useCallback, useState } from 'react';
|
|
import { isEqual } from 'lodash';
|
|
|
|
export function useSet<T>(initialValues: Array<T> = []) {
|
|
const [uniqueValues, setUniqueValues] = useState<Array<T>>(initialValues);
|
|
|
|
const addTo = useCallback(
|
|
(valueToAdd: T) => {
|
|
if (uniqueValues.includes(valueToAdd)) {
|
|
return;
|
|
}
|
|
setUniqueValues([...uniqueValues, valueToAdd]);
|
|
},
|
|
[uniqueValues, setUniqueValues]
|
|
);
|
|
const removeFrom = useCallback(
|
|
(valueToRemove: T) => {
|
|
if (!uniqueValues.includes(valueToRemove)) {
|
|
return;
|
|
}
|
|
setUniqueValues(uniqueValues.filter(v => !isEqual(v, valueToRemove)));
|
|
},
|
|
[uniqueValues, setUniqueValues]
|
|
);
|
|
|
|
const empty = useCallback(() => {
|
|
if (uniqueValues.length) {
|
|
setUniqueValues([]);
|
|
return;
|
|
}
|
|
}, [uniqueValues, setUniqueValues]);
|
|
|
|
return { uniqueValues, addTo, removeFrom, empty };
|
|
}
|