import { useState, useCallback, useMemo } from 'react'; export interface UseToggleHook { isOn: boolean; toggleOn(): void; toggleOff(): void; toggle(): void; setToggle(isOn: boolean): void; } export function useToggle(defaultIsOn: boolean = false): UseToggleHook { const [isOn, setToggle] = useState(defaultIsOn); const toggleOn = useCallback(() => setToggle(true), []); const toggleOff = useCallback(() => setToggle(false), []); const toggle = useCallback(() => setToggle((prevIsOn) => !prevIsOn), []); return useMemo( () => ({ isOn, toggleOn, toggleOff, toggle, setToggle }), [isOn, toggleOn, toggleOff, toggle, setToggle] ); }