UNPKG

@shopify/polaris

Version:

Shopify’s admin product component library

97 lines (93 loc) 3.97 kB
'use strict'; var React = require('react'); var reactTransitionGroup = require('react-transition-group'); var focus = require('../../utilities/focus.js'); var css = require('../../utilities/css.js'); var types = require('../../types.js'); var shared = require('../shared.js'); var useTheme = require('../../utilities/use-theme.js'); var Sheet_module = require('./Sheet.css.js'); var hooks = require('../../utilities/media-query/hooks.js'); var Portal = require('../Portal/Portal.js'); var TrapFocus = require('../TrapFocus/TrapFocus.js'); var KeypressListener = require('../KeypressListener/KeypressListener.js'); var Backdrop = require('../Backdrop/Backdrop.js'); const BOTTOM_CLASS_NAMES = { enter: css.classNames(Sheet_module.default.Bottom, Sheet_module.default.enterBottom), enterActive: css.classNames(Sheet_module.default.Bottom, Sheet_module.default.enterBottomActive), exit: css.classNames(Sheet_module.default.Bottom, Sheet_module.default.exitBottom), exitActive: css.classNames(Sheet_module.default.Bottom, Sheet_module.default.exitBottomActive) }; const RIGHT_CLASS_NAMES = { enter: css.classNames(Sheet_module.default.Right, Sheet_module.default.enterRight), enterActive: css.classNames(Sheet_module.default.Right, Sheet_module.default.enterRightActive), exit: css.classNames(Sheet_module.default.Right, Sheet_module.default.exitRight), exitActive: css.classNames(Sheet_module.default.Right, Sheet_module.default.exitRightActive) }; /** @deprecated Use Modal instead or avoid modal patterns all together. */ function Sheet({ children, open, onClose, onEntered, onExit, accessibilityLabel, activator }) { const theme = useTheme.useTheme(); const { isNavigationCollapsed } = hooks.useMediaQuery(); const container = React.useRef(null); const activatorRef = React.useRef(null); const handleClose = React.useCallback(() => { onClose(); const activatorElement = activator && isRef(activator) ? activator && activator.current : activatorRef.current; if (activatorElement) { requestAnimationFrame(() => focus.focusFirstFocusableNode(activatorElement)); } }, [activator, onClose]); React.useEffect(() => { if (process.env.NODE_ENV === 'development') { // eslint-disable-next-line no-console console.warn('Deprecation: <Sheet /> is deprecated. This component might be removed in a future major version of Polaris. Use <Modal /> instead or avoid modal patterns all together.'); } }, []); const activatorMarkup = activator && !isRef(activator) ? /*#__PURE__*/React.createElement("div", { ref: activatorRef }, activator) : null; return /*#__PURE__*/React.createElement(React.Fragment, null, activatorMarkup, /*#__PURE__*/React.createElement(Portal.Portal, { idPrefix: "sheet" }, /*#__PURE__*/React.createElement(reactTransitionGroup.CSSTransition, { nodeRef: container, classNames: isNavigationCollapsed ? BOTTOM_CLASS_NAMES : RIGHT_CLASS_NAMES, timeout: parseInt(theme.motion['motion-duration-300'], 10), in: open, mountOnEnter: true, unmountOnExit: true, onEntered: onEntered, onExit: onExit }, /*#__PURE__*/React.createElement("div", Object.assign({ className: Sheet_module.default.Container }, shared.layer.props, shared.overlay.props, { ref: container }), /*#__PURE__*/React.createElement(TrapFocus.TrapFocus, { trapping: open }, /*#__PURE__*/React.createElement("div", { role: "dialog", "aria-modal": true, tabIndex: -1, className: Sheet_module.default.Sheet, "aria-label": accessibilityLabel }, children)))), /*#__PURE__*/React.createElement(KeypressListener.KeypressListener, { keyCode: types.Key.Escape, handler: handleClose }), open && /*#__PURE__*/React.createElement(Backdrop.Backdrop, { transparent: true, onClick: handleClose }))); } function isRef(ref) { return Object.prototype.hasOwnProperty.call(ref, 'current'); } exports.Sheet = Sheet;