/** * useToggle Hook * Enhanced boolean state management with multiple toggle options * * Features: * - Boolean state with toggle, set, and explicit setters * - Generic return type for state management * - Performance optimized with useCallback * - Simple and intuitive API * * @example * const { value, toggle, setValue, setTrue, setFalse } = useToggle(false) * * // Use in component * * * * * * @example * // With initial true state * const { value: isMenuOpen, toggle: toggleMenu } = useToggle(true) */ import { useState, useCallback } from 'react' export interface UseToggleReturn { /** Current boolean value */ value: boolean /** Toggle the value between true and false */ toggle: () => void /** Set the value directly */ setValue: (value: boolean | ((prev: boolean) => boolean)) => void /** Set value to true */ setTrue: () => void /** Set value to false */ setFalse: () => void } /** * Hook for managing boolean state with common toggle operations * @param initialValue - Initial boolean state (default: false) * @returns Object containing boolean state and operation methods */ export function useToggle(initialValue: boolean = false): UseToggleReturn { const [value, setValue] = useState(initialValue) const toggle = useCallback(() => { setValue((prev) => !prev) }, []) const setTrue = useCallback(() => { setValue(true) }, []) const setFalse = useCallback(() => { setValue(false) }, []) const handleSetValue = useCallback((newValue: boolean | ((prev: boolean) => boolean)) => { setValue(newValue) }, []) return { value, toggle, setValue: handleSetValue, setTrue, setFalse, } }