All Downloads are FREE. Search and download functionalities are using the official Maven repository.

package.dist.esm.hooks.use-disclosure.js Maven / Gradle / Ivy

"use strict";
"use client";
import { useState, useCallback } from 'react';
import { useCallbackRef } from './use-callback-ref.js';

function useDisclosure(props = {}) {
  const { onClose: onCloseProp, onOpen: onOpenProp, open: openProp } = props;
  const handleOpen = useCallbackRef(onOpenProp);
  const handleClose = useCallbackRef(onCloseProp);
  const [openState, setopen] = useState(props.defaultOpen || false);
  const open = openProp !== void 0 ? openProp : openState;
  const isControlled = openProp !== void 0;
  const onClose = useCallback(() => {
    if (!isControlled) {
      setopen(false);
    }
    handleClose?.();
  }, [isControlled, handleClose]);
  const onOpen = useCallback(() => {
    if (!isControlled) {
      setopen(true);
    }
    handleOpen?.();
  }, [isControlled, handleOpen]);
  const onToggle = useCallback(() => {
    if (open) {
      onClose();
    } else {
      onOpen();
    }
  }, [open, onOpen, onClose]);
  return {
    open,
    onOpen,
    onClose,
    onToggle
  };
}

export { useDisclosure };




© 2015 - 2025 Weber Informatics LLC | Privacy Policy