UNPKG

@vimeo/iris

Version:
72 lines (65 loc) 4.16 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var tslib_es6 = require('../../../tslib.es6-3ec409b7.js'); var React = require('react'); var ReactDOM = require('react-dom'); var utils_hooks_usePortal_DEPRECATED_usePortal_DEPRECATED_style = require('./usePortal_DEPRECATED.style.js'); var utils_hooks_usePortal_DEPRECATED_useMountAnimations = require('./useMountAnimations.js'); var utils_hooks_usePortal_DEPRECATED_coordinates = require('./coordinates.js'); var utils_hooks_usePortal_DEPRECATED_Anchor = require('./Anchor.js'); var utils_hooks_useOutsideClick = require('../useOutsideClick.js'); var utils_DOM_SSR = require('../../DOM/SSR.js'); var utils_DOM_createPortalOutlet = require('../../DOM/createPortalOutlet.js'); require('styled-components'); require('../useIsomorphicEffect.js'); require('../../DOM/getComputedStyles.js'); require('../../DOM/animate.js'); require('../../events/onEvent.js'); require('polished'); require('../../DOM/createElement.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); function usePortal_DEPRECATED(Component, portalConfig) { var screenRef = React.useRef(null); var childRef = React.useRef(null); var ref = React.useRef(null); var _a = portalConfig.allowPageInteraction, allowPageInteraction = _a === void 0 ? false : _a, _b = portalConfig.anchorToWindow, anchorToWindow = _b === void 0 ? false : _b, _c = portalConfig.attach, attach = _c === void 0 ? null : _c, forceActive = portalConfig.forceActive, _d = portalConfig.margin, margin = _d === void 0 ? 8 : _d, onChildClick = portalConfig.onClick, _e = portalConfig.screen, screen = _e === void 0 ? false : _e, _f = portalConfig.trigger, trigger = _f === void 0 ? 'click' : _f; var _g = utils_hooks_usePortal_DEPRECATED_useMountAnimations.useMountAnimations(portalConfig, { childRef: childRef, screenRef: screenRef }), open = _g.open, close = _g.close, active = _g.active, animationProps = _g.animationProps; var controlled = forceActive === true || forceActive === false; var toggle = function (e) { return (!controlled && active ? close(e) : open(e)); }; var toggleWithChildClick = function (e) { onChildClick && onChildClick(e); toggle(e); }; utils_hooks_useOutsideClick.useOutsideClick([ref, childRef], function (event) { if (allowPageInteraction) return; if (!controlled && trigger === 'click') close(event); }); if (utils_DOM_SSR.SSR) return [null, null]; var outlet = utils_DOM_createPortalOutlet.createPortalOutlet('iris-portals'); var clickProps = { onClick: toggleWithChildClick }; var hoverProps = { onMouseEnter: open, onMouseLeave: close }; var clickable = !controlled && trigger === 'click' && clickProps; var hoverable = !controlled && trigger === 'hover' && hoverProps; var children = React.cloneElement(Component, tslib_es6.__assign({ ref: childRef }, animationProps)); var Portal = ReactDOM.createPortal(React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(utils_hooks_usePortal_DEPRECATED_Anchor.Anchor, { anchor: ref, anchorToWindow: anchorToWindow, attach: utils_hooks_usePortal_DEPRECATED_coordinates.coordinates(attach, anchorToWindow), childRef: childRef, margin: margin, children: children }), screen && React__default["default"].createElement(utils_hooks_usePortal_DEPRECATED_usePortal_DEPRECATED_style.Screen, { ref: screenRef, onClick: toggle })), outlet); return [active && Portal, tslib_es6.__assign(tslib_es6.__assign({ ref: ref }, clickable), hoverable)]; } function isForwardRef(type) { return (type.$$typeof && type.$$typeof.toString() === 'Symbol(react.forward_ref)'); } function isDOMElement(type) { return typeof type === 'string'; } function validate(_a) { var type = _a.type; return isDOMElement(type) || isForwardRef(type); } exports.usePortal_DEPRECATED = usePortal_DEPRECATED; exports.validate = validate;