@blockstack/ui
Version:
Blockstack UI components built using React and styled-components with styled-system.
57 lines (48 loc) • 1.44 kB
JavaScript
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