stupa-pdf-api/frontend/node_modules/@mui/x-date-pickers/legacy/internals/hooks/useOpenState.js

38 lines
1.3 KiB
JavaScript

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
};
};