useSharedVisibility.ts 942 o
Télécharger le fichier
import { useCallback, useMemo, useState } from 'react';
export const useSharedVisibility = () => {
const [activeIds, setActiveIds] = useState<number[]>([]);
const isVisible = useMemo(() => !!activeIds.length, [activeIds]);
const activate = useCallback(() => {
let id = -1;
setActiveIds((prevValue) => {
const newValue = [...prevValue];
id = newValue.length ? newValue[newValue.length - 1] + 1 : 0;
newValue.push(id);
return newValue;
});
return id;
}, []);
const deactivate = useCallback((id: number) => {
setActiveIds((prevValue) => {
const newValue = [...prevValue];
const index = newValue.indexOf(id);
if (index === -1) return prevValue;
newValue.splice(index, 1);
return newValue;
});
}, []);
return { isVisible, activate, deactivate };
};
