UNPKG

rsuite

Version:

A suite of react components

69 lines (53 loc) 2.2 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireWildcard(require("react")); var _reactDom = require("react-dom"); var _canUseDOM = _interopRequireDefault(require("dom-lib/canUseDOM")); var MountedPortal = /*#__PURE__*/_react.default.memo(function (_ref) { var children = _ref.children, container = _ref.container; var _useState = (0, _react.useState)(false), mounted = _useState[0], setMounted = _useState[1]; (0, _react.useEffect)(function () { return setMounted(true); }, []); if (container && mounted) { return /*#__PURE__*/(0, _reactDom.createPortal)(children, container); } return null; }); function usePortal(props) { if (props === void 0) { props = {}; } var _props = props, container = _props.container, _props$waitMount = _props.waitMount, waitMount = _props$waitMount === void 0 ? false : _props$waitMount; var rootElemRef = (0, _react.useRef)(_canUseDOM.default ? document.body : null); (0, _react.useEffect)(function () { var containerElement = typeof container === 'function' ? container() : container; // Parent is either a new root or the existing dom element var parentElement = containerElement || document.body; rootElemRef.current = parentElement; }, [rootElemRef, container]); var Portal = (0, _react.useCallback)(function (_ref2) { var children = _ref2.children; return rootElemRef.current != null ? /*#__PURE__*/(0, _reactDom.createPortal)(children, rootElemRef.current) : null; }, []); var WaitMountPortal = (0, _react.useCallback)(function (props) { return /*#__PURE__*/_react.default.createElement(MountedPortal, (0, _extends2.default)({ container: rootElemRef.current }, props)); }, []); return { target: rootElemRef.current, Portal: waitMount ? WaitMountPortal : Portal }; } var _default = usePortal; exports.default = _default;