@wordpress/components
Version:
UI components for WordPress.
109 lines (89 loc) • 2.68 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _element = require("@wordpress/element");
var _classnames = _interopRequireDefault(require("classnames"));
var _keycodes = require("@wordpress/keycodes");
var _compose = require("@wordpress/compose");
var _withFocusOutside = _interopRequireDefault(require("../higher-order/with-focus-outside"));
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
function ModalFrameContent({
overlayClassName,
contentLabel,
aria: {
describedby,
labelledby
},
children,
className,
role,
style,
focusOnMount,
shouldCloseOnEsc,
onRequestClose
}) {
function handleEscapeKeyDown(event) {
if (shouldCloseOnEsc && event.keyCode === _keycodes.ESCAPE) {
event.stopPropagation();
if (onRequestClose) {
onRequestClose(event);
}
}
}
const focusOnMountRef = (0, _compose.useFocusOnMount)(focusOnMount);
const constrainedTabbingRef = (0, _compose.useConstrainedTabbing)();
const focusReturnRef = (0, _compose.useFocusReturn)();
return (// eslint-disable-next-line jsx-a11y/no-static-element-interactions
(0, _element.createElement)("div", {
className: (0, _classnames.default)('components-modal__screen-overlay', overlayClassName),
onKeyDown: handleEscapeKeyDown
}, (0, _element.createElement)("div", {
className: (0, _classnames.default)('components-modal__frame', className),
style: style,
ref: (0, _compose.useMergeRefs)([constrainedTabbingRef, focusReturnRef, focusOnMountRef]),
role: role,
"aria-label": contentLabel,
"aria-labelledby": contentLabel ? null : labelledby,
"aria-describedby": describedby,
tabIndex: "-1"
}, children))
);
}
class ModalFrame extends _element.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 (0, _element.createElement)(ModalFrameContent, this.props);
}
}
var _default = (0, _withFocusOutside.default)(ModalFrame);
exports.default = _default;
//# sourceMappingURL=frame.js.map