UNPKG

@wordpress/components

Version:
96 lines (83 loc) 2.35 kB
import { createElement } from "@wordpress/element"; /** * External dependencies */ import classnames from 'classnames'; /** * WordPress dependencies */ import { Component } from '@wordpress/element'; import { ESCAPE } from '@wordpress/keycodes'; import { useFocusReturn, useFocusOnMount, useConstrainedTabbing, useMergeRefs } from '@wordpress/compose'; /** * Internal dependencies */ import withFocusOutside from '../higher-order/with-focus-outside'; function ModalFrameContent({ overlayClassName, contentLabel, aria: { describedby, labelledby }, children, className, role, style, focusOnMount, shouldCloseOnEsc, onRequestClose }) { function handleEscapeKeyDown(event) { if (shouldCloseOnEsc && event.keyCode === ESCAPE) { event.stopPropagation(); if (onRequestClose) { onRequestClose(event); } } } const focusOnMountRef = useFocusOnMount(focusOnMount); const constrainedTabbingRef = useConstrainedTabbing(); const focusReturnRef = useFocusReturn(); return (// eslint-disable-next-line jsx-a11y/no-static-element-interactions createElement("div", { className: classnames('components-modal__screen-overlay', overlayClassName), onKeyDown: handleEscapeKeyDown }, createElement("div", { className: classnames('components-modal__frame', className), style: style, ref: useMergeRefs([constrainedTabbingRef, focusReturnRef, focusOnMountRef]), role: role, "aria-label": contentLabel, "aria-labelledby": contentLabel ? null : labelledby, "aria-describedby": describedby, tabIndex: "-1" }, children)) ); } class ModalFrame extends Component { constructor() { super(...arguments); this.handleFocusOutside = this.handleFocusOutside.bind(this); } /** * Callback function called when clicked outside the modal. * * @param {Object} event Mouse click event. */ handleFocusOutside(event) { if (this.props.shouldCloseOnClickOutside && this.props.onRequestClose) { this.props.onRequestClose(event); } } /** * Renders the modal frame element. * * @return {WPElement} The modal frame element. */ render() { return createElement(ModalFrameContent, this.props); } } export default withFocusOutside(ModalFrame); //# sourceMappingURL=frame.js.map