@rc-component/portal 1.1.0 → 1.1.2
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/README.md +1 -1
- package/es/Portal.js +37 -42
- package/es/mock.js +0 -1
- package/es/useDom.js +18 -27
- package/es/useScrollLocker.js +7 -10
- package/lib/Context.js +0 -3
- package/lib/Portal.js +37 -53
- package/lib/index.js +0 -4
- package/lib/mock.js +0 -2
- package/lib/useDom.js +18 -36
- package/lib/useScrollLocker.js +7 -20
- package/lib/util.js +0 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ React 18 supported Portal Component.
|
|
|
9
9
|
[github-actions-image]: https://github.com/react-component/portal/workflows/CI/badge.svg
|
|
10
10
|
[github-actions-url]: https://github.com/react-component/portal/actions
|
|
11
11
|
[codecov-image]: https://img.shields.io/codecov/c/github/react-component/portal/master.svg?style=flat-square
|
|
12
|
-
[codecov-url]: https://codecov.io/gh/react-component/portal
|
|
12
|
+
[codecov-url]: https://app.codecov.io/gh/react-component/portal
|
|
13
13
|
[download-image]: https://img.shields.io/npm/dm/rc-portal.svg?style=flat-square
|
|
14
14
|
[download-url]: https://npmjs.org/package/rc-portal
|
|
15
15
|
|
package/es/Portal.js
CHANGED
|
@@ -2,108 +2,103 @@ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { createPortal } from 'react-dom';
|
|
4
4
|
import canUseDom from "rc-util/es/Dom/canUseDom";
|
|
5
|
+
import warning from "rc-util/es/warning";
|
|
5
6
|
import { supportRef, useComposeRef } from "rc-util/es/ref";
|
|
6
7
|
import OrderContext from "./Context";
|
|
7
8
|
import useDom from "./useDom";
|
|
8
9
|
import useScrollLocker from "./useScrollLocker";
|
|
9
10
|
import { inlineMock } from "./mock";
|
|
10
|
-
|
|
11
11
|
var getPortalContainer = function getPortalContainer(getContainer) {
|
|
12
12
|
if (getContainer === false) {
|
|
13
13
|
return false;
|
|
14
14
|
}
|
|
15
|
-
|
|
16
15
|
if (!canUseDom() || !getContainer) {
|
|
17
16
|
return null;
|
|
18
17
|
}
|
|
19
|
-
|
|
20
18
|
if (typeof getContainer === 'string') {
|
|
21
19
|
return document.querySelector(getContainer);
|
|
22
20
|
}
|
|
23
|
-
|
|
24
21
|
if (typeof getContainer === 'function') {
|
|
25
22
|
return getContainer();
|
|
26
23
|
}
|
|
27
|
-
|
|
28
24
|
return getContainer;
|
|
29
25
|
};
|
|
30
|
-
|
|
31
26
|
var Portal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
32
27
|
var open = props.open,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
28
|
+
autoLock = props.autoLock,
|
|
29
|
+
getContainer = props.getContainer,
|
|
30
|
+
debug = props.debug,
|
|
31
|
+
_props$autoDestroy = props.autoDestroy,
|
|
32
|
+
autoDestroy = _props$autoDestroy === void 0 ? true : _props$autoDestroy,
|
|
33
|
+
children = props.children;
|
|
40
34
|
var _React$useState = React.useState(open),
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
35
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
36
|
+
shouldRender = _React$useState2[0],
|
|
37
|
+
setShouldRender = _React$useState2[1];
|
|
38
|
+
var mergedRender = shouldRender || open;
|
|
39
|
+
|
|
40
|
+
// ========================= Warning =========================
|
|
41
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
42
|
+
warning(canUseDom() || !open, "Portal only work in client side. Please call 'useEffect' to show Portal instead default render in SSR.");
|
|
43
|
+
}
|
|
46
44
|
|
|
45
|
+
// ====================== Should Render ======================
|
|
47
46
|
React.useEffect(function () {
|
|
48
47
|
if (autoDestroy || open) {
|
|
49
48
|
setShouldRender(open);
|
|
50
49
|
}
|
|
51
|
-
}, [open, autoDestroy]);
|
|
50
|
+
}, [open, autoDestroy]);
|
|
52
51
|
|
|
52
|
+
// ======================== Container ========================
|
|
53
53
|
var _React$useState3 = React.useState(function () {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
return getPortalContainer(getContainer);
|
|
55
|
+
}),
|
|
56
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
57
|
+
innerContainer = _React$useState4[0],
|
|
58
|
+
setInnerContainer = _React$useState4[1];
|
|
60
59
|
React.useEffect(function () {
|
|
61
|
-
var customizeContainer = getPortalContainer(getContainer);
|
|
60
|
+
var customizeContainer = getPortalContainer(getContainer);
|
|
62
61
|
|
|
62
|
+
// Tell component that we check this in effect which is safe to be `null`
|
|
63
63
|
setInnerContainer(customizeContainer !== null && customizeContainer !== void 0 ? customizeContainer : null);
|
|
64
64
|
});
|
|
65
|
-
|
|
66
65
|
var _useDom = useDom(mergedRender && !innerContainer, debug),
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
var mergedContainer = innerContainer !== null && innerContainer !== void 0 ? innerContainer : defaultContainer; // ========================= Locker ==========================
|
|
66
|
+
_useDom2 = _slicedToArray(_useDom, 2),
|
|
67
|
+
defaultContainer = _useDom2[0],
|
|
68
|
+
queueCreate = _useDom2[1];
|
|
69
|
+
var mergedContainer = innerContainer !== null && innerContainer !== void 0 ? innerContainer : defaultContainer;
|
|
72
70
|
|
|
73
|
-
|
|
71
|
+
// ========================= Locker ==========================
|
|
72
|
+
useScrollLocker(autoLock && open && canUseDom() && (mergedContainer === defaultContainer || mergedContainer === document.body));
|
|
74
73
|
|
|
74
|
+
// =========================== Ref ===========================
|
|
75
75
|
var childRef = null;
|
|
76
|
-
|
|
77
76
|
if (children && supportRef(children) && ref) {
|
|
78
77
|
var _ref = children;
|
|
79
78
|
childRef = _ref.ref;
|
|
80
79
|
}
|
|
80
|
+
var mergedRef = useComposeRef(childRef, ref);
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
// ========================= Render ==========================
|
|
83
83
|
// Do not render when nothing need render
|
|
84
84
|
// When innerContainer is `undefined`, it may not ready since user use ref in the same render
|
|
85
|
-
|
|
86
85
|
if (!mergedRender || !canUseDom() || innerContainer === undefined) {
|
|
87
86
|
return null;
|
|
88
|
-
}
|
|
89
|
-
|
|
87
|
+
}
|
|
90
88
|
|
|
89
|
+
// Render inline
|
|
91
90
|
var renderInline = mergedContainer === false || inlineMock();
|
|
92
91
|
var reffedChildren = children;
|
|
93
|
-
|
|
94
92
|
if (ref) {
|
|
95
93
|
reffedChildren = /*#__PURE__*/React.cloneElement(children, {
|
|
96
94
|
ref: mergedRef
|
|
97
95
|
});
|
|
98
96
|
}
|
|
99
|
-
|
|
100
97
|
return /*#__PURE__*/React.createElement(OrderContext.Provider, {
|
|
101
98
|
value: queueCreate
|
|
102
99
|
}, renderInline ? reffedChildren : /*#__PURE__*/createPortal(reffedChildren, mergedContainer));
|
|
103
100
|
});
|
|
104
|
-
|
|
105
101
|
if (process.env.NODE_ENV !== 'production') {
|
|
106
102
|
Portal.displayName = 'Portal';
|
|
107
103
|
}
|
|
108
|
-
|
|
109
104
|
export default Portal;
|
package/es/mock.js
CHANGED
package/es/useDom.js
CHANGED
|
@@ -5,59 +5,51 @@ import useLayoutEffect from "rc-util/es/hooks/useLayoutEffect";
|
|
|
5
5
|
import canUseDom from "rc-util/es/Dom/canUseDom";
|
|
6
6
|
import OrderContext from "./Context";
|
|
7
7
|
var EMPTY_LIST = [];
|
|
8
|
+
|
|
8
9
|
/**
|
|
9
10
|
* Will add `div` to document. Nest call will keep order
|
|
10
11
|
* @param render Render DOM in document
|
|
11
12
|
*/
|
|
12
|
-
|
|
13
13
|
export default function useDom(render, debug) {
|
|
14
14
|
var _React$useState = React.useState(function () {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
defaultEle
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}),
|
|
27
|
-
_React$useState2 = _slicedToArray(_React$useState, 1),
|
|
28
|
-
ele = _React$useState2[0]; // ========================== Order ==========================
|
|
29
|
-
|
|
15
|
+
if (!canUseDom()) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
var defaultEle = document.createElement('div');
|
|
19
|
+
if (process.env.NODE_ENV !== 'production' && debug) {
|
|
20
|
+
defaultEle.setAttribute('data-debug', debug);
|
|
21
|
+
}
|
|
22
|
+
return defaultEle;
|
|
23
|
+
}),
|
|
24
|
+
_React$useState2 = _slicedToArray(_React$useState, 1),
|
|
25
|
+
ele = _React$useState2[0];
|
|
30
26
|
|
|
27
|
+
// ========================== Order ==========================
|
|
31
28
|
var appendedRef = React.useRef(false);
|
|
32
29
|
var queueCreate = React.useContext(OrderContext);
|
|
33
|
-
|
|
34
30
|
var _React$useState3 = React.useState(EMPTY_LIST),
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
32
|
+
queue = _React$useState4[0],
|
|
33
|
+
setQueue = _React$useState4[1];
|
|
39
34
|
var mergedQueueCreate = queueCreate || (appendedRef.current ? undefined : function (appendFn) {
|
|
40
35
|
setQueue(function (origin) {
|
|
41
36
|
var newQueue = [appendFn].concat(_toConsumableArray(origin));
|
|
42
37
|
return newQueue;
|
|
43
38
|
});
|
|
44
|
-
});
|
|
39
|
+
});
|
|
45
40
|
|
|
41
|
+
// =========================== DOM ===========================
|
|
46
42
|
function append() {
|
|
47
43
|
if (!ele.parentElement) {
|
|
48
44
|
document.body.appendChild(ele);
|
|
49
45
|
}
|
|
50
|
-
|
|
51
46
|
appendedRef.current = true;
|
|
52
47
|
}
|
|
53
|
-
|
|
54
48
|
function cleanup() {
|
|
55
49
|
var _ele$parentElement;
|
|
56
|
-
|
|
57
50
|
(_ele$parentElement = ele.parentElement) === null || _ele$parentElement === void 0 ? void 0 : _ele$parentElement.removeChild(ele);
|
|
58
51
|
appendedRef.current = false;
|
|
59
52
|
}
|
|
60
|
-
|
|
61
53
|
useLayoutEffect(function () {
|
|
62
54
|
if (render) {
|
|
63
55
|
if (queueCreate) {
|
|
@@ -68,7 +60,6 @@ export default function useDom(render, debug) {
|
|
|
68
60
|
} else {
|
|
69
61
|
cleanup();
|
|
70
62
|
}
|
|
71
|
-
|
|
72
63
|
return cleanup;
|
|
73
64
|
}, [render]);
|
|
74
65
|
useLayoutEffect(function () {
|
package/es/useScrollLocker.js
CHANGED
|
@@ -2,29 +2,26 @@ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { updateCSS, removeCSS } from "rc-util/es/Dom/dynamicCSS";
|
|
4
4
|
import useLayoutEffect from "rc-util/es/hooks/useLayoutEffect";
|
|
5
|
-
import
|
|
5
|
+
import { getTargetScrollBarSize } from "rc-util/es/getScrollBarSize";
|
|
6
6
|
import { isBodyOverflowing } from "./util";
|
|
7
7
|
var UNIQUE_ID = "rc-util-locker-".concat(Date.now());
|
|
8
8
|
var uuid = 0;
|
|
9
9
|
export default function useScrollLocker(lock) {
|
|
10
10
|
var mergedLock = !!lock;
|
|
11
|
-
|
|
12
11
|
var _React$useState = React.useState(function () {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
uuid += 1;
|
|
13
|
+
return "".concat(UNIQUE_ID, "_").concat(uuid);
|
|
14
|
+
}),
|
|
15
|
+
_React$useState2 = _slicedToArray(_React$useState, 1),
|
|
16
|
+
id = _React$useState2[0];
|
|
19
17
|
useLayoutEffect(function () {
|
|
20
18
|
if (mergedLock) {
|
|
21
|
-
var scrollbarSize =
|
|
19
|
+
var scrollbarSize = getTargetScrollBarSize(document.body).width;
|
|
22
20
|
var isOverflow = isBodyOverflowing();
|
|
23
21
|
updateCSS("\nhtml body {\n overflow-y: hidden;\n ".concat(isOverflow ? "width: calc(100% - ".concat(scrollbarSize, "px);") : '', "\n}"), id);
|
|
24
22
|
} else {
|
|
25
23
|
removeCSS(id);
|
|
26
24
|
}
|
|
27
|
-
|
|
28
25
|
return function () {
|
|
29
26
|
removeCSS(id);
|
|
30
27
|
};
|
package/lib/Context.js
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
var React = _interopRequireWildcard(require("react"));
|
|
11
|
-
|
|
12
9
|
var OrderContext = /*#__PURE__*/React.createContext(null);
|
|
13
10
|
var _default = OrderContext;
|
|
14
11
|
exports.default = _default;
|
package/lib/Portal.js
CHANGED
|
@@ -1,129 +1,113 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
6
|
-
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
8
|
exports.default = void 0;
|
|
11
|
-
|
|
12
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
-
|
|
14
10
|
var React = _interopRequireWildcard(require("react"));
|
|
15
|
-
|
|
16
11
|
var _reactDom = require("react-dom");
|
|
17
|
-
|
|
18
12
|
var _canUseDom = _interopRequireDefault(require("rc-util/lib/Dom/canUseDom"));
|
|
19
|
-
|
|
13
|
+
var _warning = _interopRequireDefault(require("rc-util/lib/warning"));
|
|
20
14
|
var _ref2 = require("rc-util/lib/ref");
|
|
21
|
-
|
|
22
15
|
var _Context = _interopRequireDefault(require("./Context"));
|
|
23
|
-
|
|
24
16
|
var _useDom3 = _interopRequireDefault(require("./useDom"));
|
|
25
|
-
|
|
26
17
|
var _useScrollLocker = _interopRequireDefault(require("./useScrollLocker"));
|
|
27
|
-
|
|
28
18
|
var _mock = require("./mock");
|
|
29
|
-
|
|
30
19
|
var getPortalContainer = function getPortalContainer(getContainer) {
|
|
31
20
|
if (getContainer === false) {
|
|
32
21
|
return false;
|
|
33
22
|
}
|
|
34
|
-
|
|
35
23
|
if (!(0, _canUseDom.default)() || !getContainer) {
|
|
36
24
|
return null;
|
|
37
25
|
}
|
|
38
|
-
|
|
39
26
|
if (typeof getContainer === 'string') {
|
|
40
27
|
return document.querySelector(getContainer);
|
|
41
28
|
}
|
|
42
|
-
|
|
43
29
|
if (typeof getContainer === 'function') {
|
|
44
30
|
return getContainer();
|
|
45
31
|
}
|
|
46
|
-
|
|
47
32
|
return getContainer;
|
|
48
33
|
};
|
|
49
|
-
|
|
50
34
|
var Portal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
51
35
|
var open = props.open,
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
36
|
+
autoLock = props.autoLock,
|
|
37
|
+
getContainer = props.getContainer,
|
|
38
|
+
debug = props.debug,
|
|
39
|
+
_props$autoDestroy = props.autoDestroy,
|
|
40
|
+
autoDestroy = _props$autoDestroy === void 0 ? true : _props$autoDestroy,
|
|
41
|
+
children = props.children;
|
|
59
42
|
var _React$useState = React.useState(open),
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
43
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
44
|
+
shouldRender = _React$useState2[0],
|
|
45
|
+
setShouldRender = _React$useState2[1];
|
|
46
|
+
var mergedRender = shouldRender || open;
|
|
47
|
+
|
|
48
|
+
// ========================= Warning =========================
|
|
49
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
50
|
+
(0, _warning.default)((0, _canUseDom.default)() || !open, "Portal only work in client side. Please call 'useEffect' to show Portal instead default render in SSR.");
|
|
51
|
+
}
|
|
65
52
|
|
|
53
|
+
// ====================== Should Render ======================
|
|
66
54
|
React.useEffect(function () {
|
|
67
55
|
if (autoDestroy || open) {
|
|
68
56
|
setShouldRender(open);
|
|
69
57
|
}
|
|
70
|
-
}, [open, autoDestroy]);
|
|
58
|
+
}, [open, autoDestroy]);
|
|
71
59
|
|
|
60
|
+
// ======================== Container ========================
|
|
72
61
|
var _React$useState3 = React.useState(function () {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
62
|
+
return getPortalContainer(getContainer);
|
|
63
|
+
}),
|
|
64
|
+
_React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
|
|
65
|
+
innerContainer = _React$useState4[0],
|
|
66
|
+
setInnerContainer = _React$useState4[1];
|
|
79
67
|
React.useEffect(function () {
|
|
80
|
-
var customizeContainer = getPortalContainer(getContainer);
|
|
68
|
+
var customizeContainer = getPortalContainer(getContainer);
|
|
81
69
|
|
|
70
|
+
// Tell component that we check this in effect which is safe to be `null`
|
|
82
71
|
setInnerContainer(customizeContainer !== null && customizeContainer !== void 0 ? customizeContainer : null);
|
|
83
72
|
});
|
|
84
|
-
|
|
85
73
|
var _useDom = (0, _useDom3.default)(mergedRender && !innerContainer, debug),
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
74
|
+
_useDom2 = (0, _slicedToArray2.default)(_useDom, 2),
|
|
75
|
+
defaultContainer = _useDom2[0],
|
|
76
|
+
queueCreate = _useDom2[1];
|
|
77
|
+
var mergedContainer = innerContainer !== null && innerContainer !== void 0 ? innerContainer : defaultContainer;
|
|
89
78
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
(0, _useScrollLocker.default)(autoLock && open && (0, _canUseDom.default)() && (mergedContainer === defaultContainer || mergedContainer === document.body)); // =========================== Ref ===========================
|
|
79
|
+
// ========================= Locker ==========================
|
|
80
|
+
(0, _useScrollLocker.default)(autoLock && open && (0, _canUseDom.default)() && (mergedContainer === defaultContainer || mergedContainer === document.body));
|
|
93
81
|
|
|
82
|
+
// =========================== Ref ===========================
|
|
94
83
|
var childRef = null;
|
|
95
|
-
|
|
96
84
|
if (children && (0, _ref2.supportRef)(children) && ref) {
|
|
97
85
|
var _ref = children;
|
|
98
86
|
childRef = _ref.ref;
|
|
99
87
|
}
|
|
88
|
+
var mergedRef = (0, _ref2.useComposeRef)(childRef, ref);
|
|
100
89
|
|
|
101
|
-
|
|
90
|
+
// ========================= Render ==========================
|
|
102
91
|
// Do not render when nothing need render
|
|
103
92
|
// When innerContainer is `undefined`, it may not ready since user use ref in the same render
|
|
104
|
-
|
|
105
93
|
if (!mergedRender || !(0, _canUseDom.default)() || innerContainer === undefined) {
|
|
106
94
|
return null;
|
|
107
|
-
}
|
|
108
|
-
|
|
95
|
+
}
|
|
109
96
|
|
|
97
|
+
// Render inline
|
|
110
98
|
var renderInline = mergedContainer === false || (0, _mock.inlineMock)();
|
|
111
99
|
var reffedChildren = children;
|
|
112
|
-
|
|
113
100
|
if (ref) {
|
|
114
101
|
reffedChildren = /*#__PURE__*/React.cloneElement(children, {
|
|
115
102
|
ref: mergedRef
|
|
116
103
|
});
|
|
117
104
|
}
|
|
118
|
-
|
|
119
105
|
return /*#__PURE__*/React.createElement(_Context.default.Provider, {
|
|
120
106
|
value: queueCreate
|
|
121
107
|
}, renderInline ? reffedChildren : /*#__PURE__*/(0, _reactDom.createPortal)(reffedChildren, mergedContainer));
|
|
122
108
|
});
|
|
123
|
-
|
|
124
109
|
if (process.env.NODE_ENV !== 'production') {
|
|
125
110
|
Portal.displayName = 'Portal';
|
|
126
111
|
}
|
|
127
|
-
|
|
128
112
|
var _default = Portal;
|
|
129
113
|
exports.default = _default;
|
package/lib/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
@@ -12,10 +11,7 @@ Object.defineProperty(exports, "inlineMock", {
|
|
|
12
11
|
return _mock.inlineMock;
|
|
13
12
|
}
|
|
14
13
|
});
|
|
15
|
-
|
|
16
14
|
var _Portal = _interopRequireDefault(require("./Portal"));
|
|
17
|
-
|
|
18
15
|
var _mock = require("./mock");
|
|
19
|
-
|
|
20
16
|
var _default = _Portal.default;
|
|
21
17
|
exports.default = _default;
|
package/lib/mock.js
CHANGED
|
@@ -7,11 +7,9 @@ exports.inline = void 0;
|
|
|
7
7
|
exports.inlineMock = inlineMock;
|
|
8
8
|
var inline = false;
|
|
9
9
|
exports.inline = inline;
|
|
10
|
-
|
|
11
10
|
function inlineMock(nextInline) {
|
|
12
11
|
if (typeof nextInline === 'boolean') {
|
|
13
12
|
exports.inline = inline = nextInline;
|
|
14
13
|
}
|
|
15
|
-
|
|
16
14
|
return inline;
|
|
17
15
|
}
|
package/lib/useDom.js
CHANGED
|
@@ -1,80 +1,63 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
6
|
-
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
8
|
exports.default = useDom;
|
|
11
|
-
|
|
12
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
|
-
|
|
14
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
-
|
|
16
11
|
var React = _interopRequireWildcard(require("react"));
|
|
17
|
-
|
|
18
12
|
var _useLayoutEffect = _interopRequireDefault(require("rc-util/lib/hooks/useLayoutEffect"));
|
|
19
|
-
|
|
20
13
|
var _canUseDom = _interopRequireDefault(require("rc-util/lib/Dom/canUseDom"));
|
|
21
|
-
|
|
22
14
|
var _Context = _interopRequireDefault(require("./Context"));
|
|
23
|
-
|
|
24
15
|
var EMPTY_LIST = [];
|
|
16
|
+
|
|
25
17
|
/**
|
|
26
18
|
* Will add `div` to document. Nest call will keep order
|
|
27
19
|
* @param render Render DOM in document
|
|
28
20
|
*/
|
|
29
|
-
|
|
30
21
|
function useDom(render, debug) {
|
|
31
22
|
var _React$useState = React.useState(function () {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
defaultEle
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}),
|
|
44
|
-
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 1),
|
|
45
|
-
ele = _React$useState2[0]; // ========================== Order ==========================
|
|
46
|
-
|
|
23
|
+
if (!(0, _canUseDom.default)()) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
var defaultEle = document.createElement('div');
|
|
27
|
+
if (process.env.NODE_ENV !== 'production' && debug) {
|
|
28
|
+
defaultEle.setAttribute('data-debug', debug);
|
|
29
|
+
}
|
|
30
|
+
return defaultEle;
|
|
31
|
+
}),
|
|
32
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 1),
|
|
33
|
+
ele = _React$useState2[0];
|
|
47
34
|
|
|
35
|
+
// ========================== Order ==========================
|
|
48
36
|
var appendedRef = React.useRef(false);
|
|
49
37
|
var queueCreate = React.useContext(_Context.default);
|
|
50
|
-
|
|
51
38
|
var _React$useState3 = React.useState(EMPTY_LIST),
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
39
|
+
_React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
|
|
40
|
+
queue = _React$useState4[0],
|
|
41
|
+
setQueue = _React$useState4[1];
|
|
56
42
|
var mergedQueueCreate = queueCreate || (appendedRef.current ? undefined : function (appendFn) {
|
|
57
43
|
setQueue(function (origin) {
|
|
58
44
|
var newQueue = [appendFn].concat((0, _toConsumableArray2.default)(origin));
|
|
59
45
|
return newQueue;
|
|
60
46
|
});
|
|
61
|
-
});
|
|
47
|
+
});
|
|
62
48
|
|
|
49
|
+
// =========================== DOM ===========================
|
|
63
50
|
function append() {
|
|
64
51
|
if (!ele.parentElement) {
|
|
65
52
|
document.body.appendChild(ele);
|
|
66
53
|
}
|
|
67
|
-
|
|
68
54
|
appendedRef.current = true;
|
|
69
55
|
}
|
|
70
|
-
|
|
71
56
|
function cleanup() {
|
|
72
57
|
var _ele$parentElement;
|
|
73
|
-
|
|
74
58
|
(_ele$parentElement = ele.parentElement) === null || _ele$parentElement === void 0 ? void 0 : _ele$parentElement.removeChild(ele);
|
|
75
59
|
appendedRef.current = false;
|
|
76
60
|
}
|
|
77
|
-
|
|
78
61
|
(0, _useLayoutEffect.default)(function () {
|
|
79
62
|
if (render) {
|
|
80
63
|
if (queueCreate) {
|
|
@@ -85,7 +68,6 @@ function useDom(render, debug) {
|
|
|
85
68
|
} else {
|
|
86
69
|
cleanup();
|
|
87
70
|
}
|
|
88
|
-
|
|
89
71
|
return cleanup;
|
|
90
72
|
}, [render]);
|
|
91
73
|
(0, _useLayoutEffect.default)(function () {
|
package/lib/useScrollLocker.js
CHANGED
|
@@ -1,48 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
6
|
-
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
8
|
exports.default = useScrollLocker;
|
|
11
|
-
|
|
12
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
-
|
|
14
10
|
var React = _interopRequireWildcard(require("react"));
|
|
15
|
-
|
|
16
11
|
var _dynamicCSS = require("rc-util/lib/Dom/dynamicCSS");
|
|
17
|
-
|
|
18
12
|
var _useLayoutEffect = _interopRequireDefault(require("rc-util/lib/hooks/useLayoutEffect"));
|
|
19
|
-
|
|
20
|
-
var _getScrollBarSize = _interopRequireDefault(require("rc-util/lib/getScrollBarSize"));
|
|
21
|
-
|
|
13
|
+
var _getScrollBarSize = require("rc-util/lib/getScrollBarSize");
|
|
22
14
|
var _util = require("./util");
|
|
23
|
-
|
|
24
15
|
var UNIQUE_ID = "rc-util-locker-".concat(Date.now());
|
|
25
16
|
var uuid = 0;
|
|
26
|
-
|
|
27
17
|
function useScrollLocker(lock) {
|
|
28
18
|
var mergedLock = !!lock;
|
|
29
|
-
|
|
30
19
|
var _React$useState = React.useState(function () {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
20
|
+
uuid += 1;
|
|
21
|
+
return "".concat(UNIQUE_ID, "_").concat(uuid);
|
|
22
|
+
}),
|
|
23
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 1),
|
|
24
|
+
id = _React$useState2[0];
|
|
37
25
|
(0, _useLayoutEffect.default)(function () {
|
|
38
26
|
if (mergedLock) {
|
|
39
|
-
var scrollbarSize = (0, _getScrollBarSize.
|
|
27
|
+
var scrollbarSize = (0, _getScrollBarSize.getTargetScrollBarSize)(document.body).width;
|
|
40
28
|
var isOverflow = (0, _util.isBodyOverflowing)();
|
|
41
29
|
(0, _dynamicCSS.updateCSS)("\nhtml body {\n overflow-y: hidden;\n ".concat(isOverflow ? "width: calc(100% - ".concat(scrollbarSize, "px);") : '', "\n}"), id);
|
|
42
30
|
} else {
|
|
43
31
|
(0, _dynamicCSS.removeCSS)(id);
|
|
44
32
|
}
|
|
45
|
-
|
|
46
33
|
return function () {
|
|
47
34
|
(0, _dynamicCSS.removeCSS)(id);
|
|
48
35
|
};
|
package/lib/util.js
CHANGED