UseDisclosure
guarahooks/use-disclosureFreeHook
Manages boolean state for UI components like dialogs, modals, and popovers.
Live preview
live · rendered by the registry
Rendered by guarahooks on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://guarahooks.com/r/use-disclosure.jsonSource
1'use client';23import { useCallback, useRef, useState } from 'react';45interface DisclosureCallbacks {6 onOpen?: () => void;7 onClose?: () => void;8}910interface DisclosureState {11 isOpen: boolean;12 open: () => void;13 close: () => void;14 toggle: () => void;15}1617export function useDisclosure(18 initialState = false,19 callbacks?: DisclosureCallbacks,20): [boolean, Omit<DisclosureState, 'isOpen'>] {21 const callbacksRef = useRef(callbacks);22 callbacksRef.current = callbacks;2324 const [isOpen, setIsOpen] = useState(initialState);2526 const open = useCallback(() => {27 setIsOpen((prev) => {28 if (!prev) {29 callbacksRef.current?.onOpen?.();30 return true;31 }32 return prev;33 });34 }, []);3536 const close = useCallback(() => {37 setIsOpen((prev) => {38 if (prev) {39 callbacksRef.current?.onClose?.();40 return false;41 }42 return prev;43 });44 }, []);4546 const toggle = useCallback(() => {47 setIsOpen((prev) => {48 if (prev) {49 callbacksRef.current?.onClose?.();50 return false;51 }52 callbacksRef.current?.onOpen?.();53 return true;54 });55 }, []);5657 return [isOpen, { open, close, toggle }];58}
Files it writes
More from guarahooks
All 100 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| UseAbortControlleruse-abort-controller | guarahooks | Hooks | Free | no deps | |
| UseArrayStateuse-array-state | guarahooks | Hooks | Free | no deps | |
| UseAxiosuse-axios | guarahooks | Hooks | Free | no deps | |
| UseBatteryStatususe-battery-status | guarahooks | Hooks | Free | no deps | |
| UseBetterAuthuse-better-auth | guarahooks | Hooks | Free | no deps | |
| UseClickOutsideuse-click-outside | guarahooks | Hooks | Free | no deps | |
| UseConfirmuse-confirm | guarahooks | Hooks | Free | no deps | |
| UseCookieuse-cookie | guarahooks | Hooks | Free | no deps |
