x25 19.1.6 → 19.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Modal/ModalWindow.d.ts +1 -1
- package/Modal/ModalWindow.js +111 -53
- package/Modal/ModalWindow.js.map +1 -1
- package/Modal/Root.js +22 -4
- package/Modal/Root.js.map +1 -1
- package/Modal/types.d.ts +1 -0
- package/package.json +1 -1
package/Modal/ModalWindow.d.ts
CHANGED
package/Modal/ModalWindow.js
CHANGED
|
@@ -1,85 +1,143 @@
|
|
|
1
|
-
import
|
|
1
|
+
import classnames from "classnames";
|
|
2
|
+
import React, { useCallback, useEffect, useId, useRef, useState } from "react";
|
|
3
|
+
import { createPortal } from "react-dom";
|
|
2
4
|
import { useDispatch } from "react-redux";
|
|
3
5
|
import { hideModal } from "./actions.js";
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const ENTER_DELAY = 150, EXIT_DELAY = 150, BASE_Z_INDEX = 1055, Z_INDEX_STEP = 20, FOCUSABLE_SELECTOR = [
|
|
7
|
+
"a[href]",
|
|
8
|
+
"button:not([disabled])",
|
|
9
|
+
"input:not([disabled])",
|
|
10
|
+
"select:not([disabled])",
|
|
11
|
+
"textarea:not([disabled])",
|
|
12
|
+
"[tabindex]:not([tabindex=\"-1\"])",
|
|
13
|
+
].join(", "), ModalWindow = (props) => {
|
|
14
|
+
const { size = "", Footer, Header, stackIndex = 0, } = props, [show, setShow] = useState(false), bodyRef = useRef(null), dialogRef = useRef(null), enterTimeoutRef = useRef(0), exitTimeoutRef = useRef(0), isClosingRef = useRef(false), previousFocusRef = useRef(null), mouseDownTargetRef = useRef(null), propsRef = useRef(props), titleId = useId(), dispatch = useDispatch();
|
|
15
|
+
propsRef.current = props;
|
|
16
|
+
const tryToClose = useCallback((cb) => {
|
|
17
|
+
if (isClosingRef.current) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
isClosingRef.current = true;
|
|
21
|
+
if (enterTimeoutRef.current) {
|
|
22
|
+
window.clearTimeout(enterTimeoutRef.current);
|
|
23
|
+
enterTimeoutRef.current = 0;
|
|
24
|
+
}
|
|
25
|
+
if (exitTimeoutRef.current) {
|
|
26
|
+
window.clearTimeout(exitTimeoutRef.current);
|
|
27
|
+
}
|
|
28
|
+
setShow(false);
|
|
29
|
+
exitTimeoutRef.current = window.setTimeout(() => {
|
|
30
|
+
const latest = propsRef.current;
|
|
31
|
+
if (!latest.preventDispatchHideModal) {
|
|
8
32
|
dispatch(hideModal());
|
|
9
33
|
}
|
|
10
|
-
if (typeof
|
|
11
|
-
|
|
34
|
+
if (typeof latest.onClose === "function") {
|
|
35
|
+
latest.onClose();
|
|
36
|
+
}
|
|
37
|
+
if (typeof cb === "function") {
|
|
38
|
+
cb();
|
|
39
|
+
}
|
|
40
|
+
}, EXIT_DELAY);
|
|
41
|
+
}, [dispatch]);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
previousFocusRef.current = document.activeElement;
|
|
44
|
+
enterTimeoutRef.current = window.setTimeout(() => {
|
|
45
|
+
setShow(true);
|
|
46
|
+
if (dialogRef.current) {
|
|
47
|
+
const alreadyFocused = dialogRef.current.contains(document.activeElement);
|
|
48
|
+
if (!alreadyFocused) {
|
|
49
|
+
const target = dialogRef.current.querySelector(FOCUSABLE_SELECTOR);
|
|
50
|
+
(target || dialogRef.current).focus();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}, ENTER_DELAY);
|
|
54
|
+
return () => {
|
|
55
|
+
if (enterTimeoutRef.current) {
|
|
56
|
+
window.clearTimeout(enterTimeoutRef.current);
|
|
57
|
+
}
|
|
58
|
+
if (exitTimeoutRef.current) {
|
|
59
|
+
window.clearTimeout(exitTimeoutRef.current);
|
|
12
60
|
}
|
|
13
|
-
|
|
14
|
-
|
|
61
|
+
const previous = previousFocusRef.current;
|
|
62
|
+
if (previous && typeof previous.focus === "function" && document.contains(previous)) {
|
|
63
|
+
window.setTimeout(() => {
|
|
64
|
+
previous.focus();
|
|
65
|
+
}, 0);
|
|
15
66
|
}
|
|
16
67
|
};
|
|
17
|
-
|
|
18
|
-
clearTimeout(exitTimeout);
|
|
19
|
-
setWaitingToClose(true);
|
|
20
|
-
setShow(false);
|
|
21
|
-
const theExit = setTimeout(() => {
|
|
22
|
-
closeModal();
|
|
23
|
-
}, delay);
|
|
24
|
-
setExitTimeout(theExit);
|
|
25
|
-
};
|
|
68
|
+
}, []);
|
|
26
69
|
useEffect(() => {
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
70
|
+
const handleMouseDown = (event) => {
|
|
71
|
+
mouseDownTargetRef.current = event.target;
|
|
72
|
+
}, handleMouseUp = (event) => {
|
|
73
|
+
const downTarget = mouseDownTargetRef.current;
|
|
74
|
+
mouseDownTargetRef.current = null;
|
|
75
|
+
if (downTarget !== event.target) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (!bodyRef.current || !dialogRef.current) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const target = event.target, inBackdrop = bodyRef.current.contains(target), inDialog = dialogRef.current.contains(target);
|
|
82
|
+
if (inBackdrop && !inDialog) {
|
|
31
83
|
tryToClose();
|
|
32
84
|
}
|
|
33
85
|
};
|
|
34
|
-
document.addEventListener("mousedown",
|
|
86
|
+
document.addEventListener("mousedown", handleMouseDown);
|
|
87
|
+
document.addEventListener("mouseup", handleMouseUp);
|
|
35
88
|
return () => {
|
|
36
|
-
document.removeEventListener("mousedown",
|
|
89
|
+
document.removeEventListener("mousedown", handleMouseDown);
|
|
90
|
+
document.removeEventListener("mouseup", handleMouseUp);
|
|
37
91
|
};
|
|
38
|
-
}, [
|
|
92
|
+
}, [tryToClose]);
|
|
39
93
|
useEffect(() => {
|
|
40
|
-
const
|
|
41
|
-
if (event.key === "Escape" && !
|
|
94
|
+
const handleKeyDown = (event) => {
|
|
95
|
+
if (event.key === "Escape" && !propsRef.current.doNotCloseByEscape) {
|
|
42
96
|
tryToClose();
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (event.key === "Tab" && dialogRef.current) {
|
|
100
|
+
const focusable = Array.from(dialogRef.current.querySelectorAll(FOCUSABLE_SELECTOR));
|
|
101
|
+
if (focusable.length === 0) {
|
|
102
|
+
event.preventDefault();
|
|
103
|
+
dialogRef.current.focus();
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const [first] = focusable, last = focusable[focusable.length - 1], active = document.activeElement;
|
|
107
|
+
if (event.shiftKey && active === first) {
|
|
108
|
+
event.preventDefault();
|
|
109
|
+
last.focus();
|
|
110
|
+
}
|
|
111
|
+
else if (!event.shiftKey && active === last) {
|
|
112
|
+
event.preventDefault();
|
|
113
|
+
first.focus();
|
|
114
|
+
}
|
|
43
115
|
}
|
|
44
116
|
};
|
|
45
|
-
|
|
46
|
-
document.addEventListener("keydown", keyPressed, false);
|
|
47
|
-
}
|
|
117
|
+
document.addEventListener("keydown", handleKeyDown, false);
|
|
48
118
|
return () => {
|
|
49
|
-
|
|
50
|
-
document.removeEventListener("keydown", keyPressed, false);
|
|
51
|
-
}
|
|
119
|
+
document.removeEventListener("keydown", handleKeyDown, false);
|
|
52
120
|
};
|
|
53
|
-
}, [
|
|
54
|
-
useEffect(() => {
|
|
55
|
-
if (!show && !waitingToClose) {
|
|
56
|
-
const theEnter = setTimeout(() => {
|
|
57
|
-
setShow(true);
|
|
58
|
-
}, delay);
|
|
59
|
-
setEnterTimeout(theEnter);
|
|
60
|
-
}
|
|
61
|
-
}, [show, waitingToClose]);
|
|
62
|
-
useEffect(() => () => {
|
|
63
|
-
clearTimeout(enterTimeout);
|
|
64
|
-
clearTimeout(exitTimeout);
|
|
65
|
-
});
|
|
121
|
+
}, [tryToClose]);
|
|
66
122
|
useEffect(() => {
|
|
67
123
|
if (props.pleaseClose) {
|
|
68
124
|
tryToClose();
|
|
69
125
|
}
|
|
70
|
-
}, [props.pleaseClose]);
|
|
71
|
-
|
|
126
|
+
}, [props.pleaseClose, tryToClose]);
|
|
127
|
+
const zIndex = BASE_Z_INDEX + (stackIndex * Z_INDEX_STEP), dialogClass = classnames("modal-dialog", { [`modal-${size}`]: size });
|
|
128
|
+
return createPortal(React.createElement("div", { "aria-labelledby": titleId, "aria-modal": "true", className: classnames("modal", "fade", "d-block", { show }), ref: bodyRef, role: "dialog", style: {
|
|
72
129
|
background: "rgb(0 0 0 / 45%)",
|
|
130
|
+
zIndex,
|
|
73
131
|
} },
|
|
74
|
-
React.createElement("div", { className:
|
|
132
|
+
React.createElement("div", { className: dialogClass, ref: dialogRef, role: "document", tabIndex: -1 },
|
|
75
133
|
React.createElement("div", { className: "modal-content" },
|
|
76
134
|
props.customContent ? (React.cloneElement(props.children, { tryToClose })) : (React.createElement(React.Fragment, null,
|
|
77
135
|
React.createElement("div", { className: "modal-header" },
|
|
78
|
-
typeof Header === "undefined" ? (React.createElement("h5", { className: "modal-title" }, props.title)) : (React.createElement(Header, Object.assign({ title: props.title
|
|
79
|
-
React.createElement("button", { "aria-label": "Close", className: "btn btn-link",
|
|
80
|
-
React.createElement("i", { className: "fa fa-times" }))),
|
|
136
|
+
typeof Header === "undefined" ? (React.createElement("h5", { className: "modal-title", id: titleId }, props.title)) : (React.createElement(Header, Object.assign({}, props.headerProps, { title: props.title, titleId: titleId, tryToClose: tryToClose }))),
|
|
137
|
+
React.createElement("button", { "aria-label": "Close", className: "btn btn-link", onClick: () => tryToClose(), type: "button" },
|
|
138
|
+
React.createElement("i", { "aria-hidden": "true", className: "fa fa-times" }))),
|
|
81
139
|
React.createElement("div", { className: "modal-body" }, props.doNoPassTryToCloseToBody ? props.children : React.cloneElement(props.children, { tryToClose })))),
|
|
82
|
-
typeof Footer === "undefined" ? null : (React.createElement(Footer, Object.assign({}, props.footerProps, { tryToClose: tryToClose })))))));
|
|
140
|
+
typeof Footer === "undefined" ? null : (React.createElement(Footer, Object.assign({}, props.footerProps, { tryToClose: tryToClose })))))), document.body);
|
|
83
141
|
};
|
|
84
142
|
export default ModalWindow;
|
|
85
143
|
//# sourceMappingURL=ModalWindow.js.map
|
package/Modal/ModalWindow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalWindow.js","sourceRoot":"","sources":["../../src/Modal/ModalWindow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ModalWindow.js","sourceRoot":"","sources":["../../src/Modal/ModalWindow.tsx"],"names":[],"mappings":"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"}
|
package/Modal/Root.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { useDispatch, useSelector } from "react-redux";
|
|
3
3
|
import { propsAreEqualCreator } from "../utility/others.js";
|
|
4
|
-
import {
|
|
4
|
+
import { softHideModal } from "./actions.js";
|
|
5
5
|
import getComponent from "./getComponent.js";
|
|
6
6
|
import { selectors } from "./reducer.js";
|
|
7
7
|
const getTopModalProp = (list, key) => {
|
|
@@ -13,6 +13,12 @@ const getTopModalProp = (list, key) => {
|
|
|
13
13
|
return topProps.get(key);
|
|
14
14
|
}
|
|
15
15
|
return null;
|
|
16
|
+
}, isTopAlreadyClosing = (list) => {
|
|
17
|
+
if (list.size === 0) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const top = list.last();
|
|
21
|
+
return Boolean(top === null || top === void 0 ? void 0 : top.get("pleaseClose"));
|
|
16
22
|
};
|
|
17
23
|
const propsAreEqual = propsAreEqualCreator([], ["list"]), RawModalRoot = ({ list }) => {
|
|
18
24
|
if (list.size === 0) {
|
|
@@ -26,10 +32,10 @@ const propsAreEqual = propsAreEqualCreator([], ["list"]), RawModalRoot = ({ list
|
|
|
26
32
|
const theProps = ((current === null || current === void 0 ? void 0 : current.hasIn(["props", "immutableProps"])) ? ({
|
|
27
33
|
modalProps: current.get("props"),
|
|
28
34
|
}) : (current.get("props").toJS()));
|
|
29
|
-
return (React.createElement(Component, Object.assign({ doNotCloseByEscape: isTheLastOne, key: index, pleaseClose: current.get("pleaseClose") }, theProps)));
|
|
35
|
+
return (React.createElement(Component, Object.assign({ doNotCloseByEscape: isTheLastOne, key: index, pleaseClose: current.get("pleaseClose"), stackIndex: index }, theProps)));
|
|
30
36
|
})));
|
|
31
37
|
}, InnerModalRoot = React.memo(RawModalRoot, propsAreEqual), ModalRoot = () => {
|
|
32
|
-
const list = useSelector(selectors.getModals), dispatch = useDispatch(), prevSizeRef = React.useRef(0), skipCountRef = React.useRef(0), decreaseFromPopstateRef = React.useRef(0), listRef = React.useRef(list);
|
|
38
|
+
const list = useSelector(selectors.getModals), dispatch = useDispatch(), hasModals = list.size > 0, prevSizeRef = React.useRef(0), skipCountRef = React.useRef(0), decreaseFromPopstateRef = React.useRef(0), listRef = React.useRef(list);
|
|
33
39
|
listRef.current = list;
|
|
34
40
|
React.useEffect(() => {
|
|
35
41
|
const currentSize = list.size, prev = prevSizeRef.current;
|
|
@@ -67,14 +73,26 @@ const propsAreEqual = propsAreEqualCreator([], ["list"]), RawModalRoot = ({ list
|
|
|
67
73
|
window.history.pushState({ x25Modal: true }, "");
|
|
68
74
|
return;
|
|
69
75
|
}
|
|
76
|
+
if (isTopAlreadyClosing(currentList)) {
|
|
77
|
+
window.history.pushState({ x25Modal: true }, "");
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
70
80
|
decreaseFromPopstateRef.current += 1;
|
|
71
|
-
dispatch(
|
|
81
|
+
dispatch(softHideModal());
|
|
72
82
|
};
|
|
73
83
|
window.addEventListener("popstate", handlePopState);
|
|
74
84
|
return () => {
|
|
75
85
|
window.removeEventListener("popstate", handlePopState);
|
|
76
86
|
};
|
|
77
87
|
}, [dispatch]);
|
|
88
|
+
React.useEffect(() => {
|
|
89
|
+
if (hasModals) {
|
|
90
|
+
document.body.classList.add("modal-open");
|
|
91
|
+
}
|
|
92
|
+
return () => {
|
|
93
|
+
document.body.classList.remove("modal-open");
|
|
94
|
+
};
|
|
95
|
+
}, [hasModals]);
|
|
78
96
|
return React.createElement(InnerModalRoot, { list: list });
|
|
79
97
|
};
|
|
80
98
|
export default ModalRoot;
|
package/Modal/Root.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Root.js","sourceRoot":"","sources":["../../src/Modal/Root.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Root.js","sourceRoot":"","sources":["../../src/Modal/Root.tsx"],"names":[],"mappings":"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"}
|
package/Modal/types.d.ts
CHANGED
package/package.json
CHANGED