Skip to content

Instantly share code, notes, and snippets.

@christianvmm
Created March 1, 2024 03:29
Show Gist options
  • Select an option

  • Save christianvmm/3e2818171ae84745b11e78de04c356e6 to your computer and use it in GitHub Desktop.

Select an option

Save christianvmm/3e2818171ae84745b11e78de04c356e6 to your computer and use it in GitHub Desktop.
import { useCallback, useState } from 'react'
export type UseDisclosureReturn = {
open: boolean
onOpen: () => void
onClose: () => void
onToggle: () => void
onOpenChange: (v: boolean) => void
}
export function useDisclosure(initialValue = false): UseDisclosureReturn {
const [open, setOpen] = useState(initialValue)
const onOpen = useCallback(() => {
setOpen(true)
}, [])
const onClose = useCallback(() => {
setOpen(false)
}, [])
const onToggle = useCallback(() => {
setOpen((v) => !v)
}, [])
const onOpenChange = useCallback((v: boolean) => {
setOpen(v)
}, [])
return {
open,
onOpen,
onClose,
onToggle,
onOpenChange,
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment