import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import * as React from 'react'; export var useOpenState = function useOpenState(_ref) { var open = _ref.open, onOpen = _ref.onOpen, onClose = _ref.onClose; var isControllingOpenProp = React.useRef(typeof open === 'boolean').current; var _React$useState = React.useState(false), _React$useState2 = _slicedToArray(_React$useState, 2), openState = _React$useState2[0], setIsOpenState = _React$useState2[1]; // It is required to update inner state in useEffect in order to avoid situation when // Our component is not mounted yet, but `open` state is set to `true` (e.g. initially opened) React.useEffect(function () { if (isControllingOpenProp) { if (typeof open !== 'boolean') { throw new Error('You must not mix controlling and uncontrolled mode for `open` prop'); } setIsOpenState(open); } }, [isControllingOpenProp, open]); var setIsOpen = React.useCallback(function (newIsOpen) { if (!isControllingOpenProp) { setIsOpenState(newIsOpen); } if (newIsOpen && onOpen) { onOpen(); } if (!newIsOpen && onClose) { onClose(); } }, [isControllingOpenProp, onOpen, onClose]); return { isOpen: openState, setIsOpen: setIsOpen }; };