import { useCallback, useMemo, useState } from 'react'; export const useSharedVisibility = () => { const [ activeIds, setActiveIds ] = useState([]); 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 }; }