UNPKG

4.59 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4
5var _react = require('react');
6
7var _react2 = _interopRequireDefault(_react);
8
9var _a11yFocusScope = require('a11y-focus-scope');
10
11var _a11yFocusScope2 = _interopRequireDefault(_a11yFocusScope);
12
13var _a11yFocusStore = require('a11y-focus-store');
14
15var _a11yFocusStore2 = _interopRequireDefault(_a11yFocusStore);
16
17var _exenv = require('exenv');
18
19var _exenv2 = _interopRequireDefault(_exenv);
20
21function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
23function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
24
25function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
26
27function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
28
29function setFocusOn(applicationElement, element) {
30 _a11yFocusStore2.default.storeFocus();
31 if (applicationElement) applicationElement.setAttribute('aria-hidden', 'true');
32 _a11yFocusScope2.default.scopeFocus(element);
33}
34
35function resetFocus(applicationElement) {
36 _a11yFocusScope2.default.unscopeFocus();
37 if (applicationElement) applicationElement.removeAttribute('aria-hidden');
38 _a11yFocusStore2.default.restoreFocus();
39}
40
41var ReactModal2 = (function (_React$Component) {
42 _inherits(ReactModal2, _React$Component);
43
44 function ReactModal2() {
45 var _temp, _this, _ret;
46
47 _classCallCheck(this, ReactModal2);
48
49 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
50 args[_key] = arguments[_key];
51 }
52
53 return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.handleDocumentKeydown = function (event) {
54 if (_this.props.closeOnEsc && event.keyCode === 27) {
55 _this.props.onClose();
56 }
57 }, _this.handleBackdropClick = function () {
58 if (_this.props.closeOnBackdropClick) {
59 _this.props.onClose();
60 }
61 }, _this.handleModalClick = function (event) {
62 event.stopPropagation();
63 }, _temp), _possibleConstructorReturn(_this, _ret);
64 }
65
66 ReactModal2.getApplicationElement = function getApplicationElement() {
67 console.warn('`ReactModal2.getApplicationElement` needs to be set for accessibility reasons');
68 };
69
70 ReactModal2.prototype.componentDidMount = function componentDidMount() {
71 if (_exenv2.default.canUseDOM) {
72 setFocusOn(ReactModal2.getApplicationElement(), this.refs.modal);
73 document.addEventListener('keydown', this.handleDocumentKeydown.bind(this));
74 }
75 };
76
77 ReactModal2.prototype.componentWillUnmount = function componentWillUnmount() {
78 if (_exenv2.default.canUseDOM) {
79 resetFocus(ReactModal2.getApplicationElement());
80 document.removeEventListener('keydown', this.handleDocumentKeydown.bind(this));
81 }
82 };
83
84 ReactModal2.prototype.render = function render() {
85 return _react2.default.createElement(
86 'div',
87 { ref: 'backdrop',
88 className: this.props.backdropClassName,
89 style: this.props.backdropStyles,
90 onClick: this.handleBackdropClick },
91 _react2.default.createElement(
92 'div',
93 { ref: 'modal',
94 className: this.props.modalClassName,
95 style: this.props.modalStyles,
96 onClick: this.handleModalClick,
97 tabIndex: '-1' },
98 this.props.children
99 )
100 );
101 };
102
103 return ReactModal2;
104})(_react2.default.Component);
105
106ReactModal2.propTypes = {
107 onClose: _react2.default.PropTypes.func.isRequired,
108
109 closeOnEsc: _react2.default.PropTypes.bool,
110 closeOnBackdropClick: _react2.default.PropTypes.bool,
111
112 backdropClassName: _react2.default.PropTypes.string,
113 backdropStyles: _react2.default.PropTypes.object,
114
115 modalClassName: _react2.default.PropTypes.string,
116 modalStyles: _react2.default.PropTypes.object
117};
118ReactModal2.defaultProps = {
119 closeOnEsc: true,
120 closeOnBackdropClick: true
121};
122exports.default = ReactModal2;
\No newline at end of file