UNPKG

10 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5exports.__esModule = true;
6exports.default = void 0;
7
8var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
9
10var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
12var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
13
14var _classnames = _interopRequireDefault(require("classnames"));
15
16var _addEventListener = _interopRequireDefault(require("dom-helpers/addEventListener"));
17
18var _canUseDOM = _interopRequireDefault(require("dom-helpers/canUseDOM"));
19
20var _ownerDocument = _interopRequireDefault(require("dom-helpers/ownerDocument"));
21
22var _removeEventListener = _interopRequireDefault(require("dom-helpers/removeEventListener"));
23
24var _scrollbarSize = _interopRequireDefault(require("dom-helpers/scrollbarSize"));
25
26var _react = _interopRequireDefault(require("react"));
27
28var _Modal = _interopRequireDefault(require("react-overlays/Modal"));
29
30var _BootstrapModalManager = _interopRequireDefault(require("./BootstrapModalManager"));
31
32var _Fade = _interopRequireDefault(require("./Fade"));
33
34var _ModalBody = _interopRequireDefault(require("./ModalBody"));
35
36var _ModalContext = _interopRequireDefault(require("./ModalContext"));
37
38var _ModalDialog = _interopRequireDefault(require("./ModalDialog"));
39
40var _ModalFooter = _interopRequireDefault(require("./ModalFooter"));
41
42var _ModalHeader = _interopRequireDefault(require("./ModalHeader"));
43
44var _ModalTitle = _interopRequireDefault(require("./ModalTitle"));
45
46var _ThemeProvider = require("./ThemeProvider");
47
48var defaultProps = {
49 show: false,
50 backdrop: true,
51 keyboard: true,
52 autoFocus: true,
53 enforceFocus: true,
54 restoreFocus: true,
55 animation: true,
56 dialogAs: _ModalDialog.default,
57 manager: new _BootstrapModalManager.default()
58};
59/* eslint-disable no-use-before-define, react/no-multi-comp */
60
61function DialogTransition(props) {
62 return _react.default.createElement(_Fade.default, props);
63}
64
65function BackdropTransition(props) {
66 return _react.default.createElement(_Fade.default, props);
67}
68/* eslint-enable no-use-before-define */
69
70
71var Modal =
72/*#__PURE__*/
73function (_React$Component) {
74 (0, _inheritsLoose2.default)(Modal, _React$Component);
75
76 function Modal() {
77 var _this;
78
79 for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
80 _args[_key] = arguments[_key];
81 }
82
83 _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;
84 _this.state = {
85 style: {}
86 };
87 _this.modalContext = {
88 onHide: function onHide() {
89 return _this.props.onHide();
90 }
91 };
92
93 _this.setModalRef = function (ref) {
94 _this._modal = ref;
95 };
96
97 _this.handleDialogMouseDown = function () {
98 _this._waitingForMouseUp = true;
99 };
100
101 _this.handleMouseUp = function (e) {
102 if (_this._waitingForMouseUp && e.target === _this._modal.dialog) {
103 _this._ignoreBackdropClick = true;
104 }
105
106 _this._waitingForMouseUp = false;
107 };
108
109 _this.handleClick = function (e) {
110 if (_this._ignoreBackdropClick || e.target !== e.currentTarget) {
111 _this._ignoreBackdropClick = false;
112 return;
113 }
114
115 _this.props.onHide();
116 };
117
118 _this.handleEnter = function (node) {
119 var _this$props;
120
121 if (node) {
122 node.style.display = 'block';
123
124 _this.updateDialogStyle(node);
125 }
126
127 for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
128 args[_key2 - 1] = arguments[_key2];
129 }
130
131 if (_this.props.onEnter) (_this$props = _this.props).onEnter.apply(_this$props, [node].concat(args));
132 };
133
134 _this.handleEntering = function (node) {
135 var _this$props2;
136
137 for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
138 args[_key3 - 1] = arguments[_key3];
139 }
140
141 if (_this.props.onEntering) (_this$props2 = _this.props).onEntering.apply(_this$props2, [node].concat(args)); // FIXME: This should work even when animation is disabled.
142
143 (0, _addEventListener.default)(window, 'resize', _this.handleWindowResize);
144 };
145
146 _this.handleExited = function (node) {
147 var _this$props3;
148
149 if (node) node.style.display = ''; // RHL removes it sometimes
150
151 for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
152 args[_key4 - 1] = arguments[_key4];
153 }
154
155 if (_this.props.onExited) (_this$props3 = _this.props).onExited.apply(_this$props3, args); // FIXME: This should work even when animation is disabled.
156
157 (0, _removeEventListener.default)(window, 'resize', _this.handleWindowResize);
158 };
159
160 _this.handleWindowResize = function () {
161 _this.updateDialogStyle(_this._modal.dialog);
162 };
163
164 _this.renderBackdrop = function (props) {
165 var _this$props4 = _this.props,
166 bsPrefix = _this$props4.bsPrefix,
167 backdropClassName = _this$props4.backdropClassName,
168 animation = _this$props4.animation;
169 return _react.default.createElement("div", (0, _extends2.default)({}, props, {
170 className: (0, _classnames.default)(bsPrefix + "-backdrop", backdropClassName, !animation && 'show')
171 }));
172 };
173
174 return _this;
175 }
176
177 var _proto = Modal.prototype;
178
179 _proto.componentWillUnmount = function componentWillUnmount() {
180 // Clean up the listener if we need to.
181 (0, _removeEventListener.default)(window, 'resize', this.handleWindowResize);
182 };
183
184 _proto.updateDialogStyle = function updateDialogStyle(node) {
185 if (!_canUseDOM.default) return;
186 var manager = this.props.manager;
187 var containerIsOverflowing = manager.isContainerOverflowing(this._modal);
188 var modalIsOverflowing = node.scrollHeight > (0, _ownerDocument.default)(node).documentElement.clientHeight;
189 this.setState({
190 style: {
191 paddingRight: containerIsOverflowing && !modalIsOverflowing ? (0, _scrollbarSize.default)() : undefined,
192 paddingLeft: !containerIsOverflowing && modalIsOverflowing ? (0, _scrollbarSize.default)() : undefined
193 }
194 });
195 };
196
197 _proto.render = function render() {
198 var _this$props5 = this.props,
199 bsPrefix = _this$props5.bsPrefix,
200 className = _this$props5.className,
201 style = _this$props5.style,
202 dialogClassName = _this$props5.dialogClassName,
203 children = _this$props5.children,
204 Dialog = _this$props5.dialogAs,
205 show = _this$props5.show,
206 animation = _this$props5.animation,
207 backdrop = _this$props5.backdrop,
208 keyboard = _this$props5.keyboard,
209 manager = _this$props5.manager,
210 onEscapeKeyDown = _this$props5.onEscapeKeyDown,
211 onShow = _this$props5.onShow,
212 onHide = _this$props5.onHide,
213 container = _this$props5.container,
214 autoFocus = _this$props5.autoFocus,
215 enforceFocus = _this$props5.enforceFocus,
216 restoreFocus = _this$props5.restoreFocus,
217 onEntered = _this$props5.onEntered,
218 onExit = _this$props5.onExit,
219 onExiting = _this$props5.onExiting,
220 _ = _this$props5.onExited,
221 _1 = _this$props5.onEntering,
222 _6 = _this$props5.onEnter,
223 _4 = _this$props5.onEntering,
224 _2 = _this$props5.backdropClassName,
225 props = (0, _objectWithoutPropertiesLoose2.default)(_this$props5, ["bsPrefix", "className", "style", "dialogClassName", "children", "dialogAs", "show", "animation", "backdrop", "keyboard", "manager", "onEscapeKeyDown", "onShow", "onHide", "container", "autoFocus", "enforceFocus", "restoreFocus", "onEntered", "onExit", "onExiting", "onExited", "onEntering", "onEnter", "onEntering", "backdropClassName"]);
226 var clickHandler = backdrop === true ? this.handleClick : null;
227 var baseModalStyle = (0, _extends2.default)({}, style, {}, this.state.style); // Sets `display` always block when `animation` is false
228
229 if (!animation) baseModalStyle.display = 'block';
230 return _react.default.createElement(_ModalContext.default.Provider, {
231 value: this.modalContext
232 }, _react.default.createElement(_Modal.default, {
233 show: show,
234 backdrop: backdrop,
235 container: container,
236 keyboard: keyboard,
237 autoFocus: autoFocus,
238 enforceFocus: enforceFocus,
239 restoreFocus: restoreFocus,
240 onEscapeKeyDown: onEscapeKeyDown,
241 onShow: onShow,
242 onHide: onHide,
243 onEntered: onEntered,
244 onExit: onExit,
245 onExiting: onExiting,
246 manager: manager,
247 ref: this.setModalRef,
248 style: baseModalStyle,
249 className: (0, _classnames.default)(className, bsPrefix),
250 containerClassName: bsPrefix + "-open",
251 transition: animation ? DialogTransition : undefined,
252 backdropTransition: animation ? BackdropTransition : undefined,
253 renderBackdrop: this.renderBackdrop,
254 onClick: clickHandler,
255 onMouseUp: this.handleMouseUp,
256 onEnter: this.handleEnter,
257 onEntering: this.handleEntering,
258 onExited: this.handleExited
259 }, _react.default.createElement(Dialog, (0, _extends2.default)({}, props, {
260 onMouseDown: this.handleDialogMouseDown,
261 className: dialogClassName
262 }), children)));
263 };
264
265 return Modal;
266}(_react.default.Component);
267
268Modal.defaultProps = defaultProps;
269var DecoratedModal = (0, _ThemeProvider.createBootstrapComponent)(Modal, 'modal');
270DecoratedModal.Body = _ModalBody.default;
271DecoratedModal.Header = _ModalHeader.default;
272DecoratedModal.Title = _ModalTitle.default;
273DecoratedModal.Footer = _ModalFooter.default;
274DecoratedModal.Dialog = _ModalDialog.default;
275DecoratedModal.TRANSITION_DURATION = 300;
276DecoratedModal.BACKDROP_TRANSITION_DURATION = 150;
277var _default = DecoratedModal;
278exports.default = _default;
279module.exports = exports["default"];
\No newline at end of file