UNPKG

@blockstack/ui

Version:

Blockstack UI components built using React and styled-components with styled-system.

57 lines (48 loc) 1.44 kB
import { useState, useCallback } from 'react'; import { useControllableProp } from './use-controllable.esm.js'; import { usePrevious } from './use-previous.esm.js'; function useDisclosure(props) { if (props === void 0) { props = {}; } var _props = props, onCloseProp = _props.onClose, onOpenProp = _props.onOpen; var _React$useState = useState(props.defaultIsOpen || false), isOpenState = _React$useState[0], setIsOpen = _React$useState[1]; var _useControllableProp = useControllableProp(props.isOpen, isOpenState), isControlled = _useControllableProp[0], isOpen = _useControllableProp[1]; var prevIsOpen = usePrevious(isOpen); var onClose = useCallback(function () { if (!isControlled) { setIsOpen(false); } if (onCloseProp) { onCloseProp(); } }, [isControlled, onCloseProp]); var onOpen = useCallback(function () { if (!isControlled) { setIsOpen(true); } if (onOpenProp) { onOpenProp(); } }, [isControlled, onOpenProp]); var onToggle = useCallback(function () { var action = isOpen ? onClose : onOpen; action(); }, [isOpen, onOpen, onClose]); return { isOpen: Boolean(isOpen), prevIsOpen: Boolean(prevIsOpen), onOpen: onOpen, onClose: onClose, onToggle: onToggle, isControlled: isControlled }; } export { useDisclosure }; //# sourceMappingURL=use-disclosure.esm.js.map