@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 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/branch/master
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
- autoLock = props.autoLock,
34
- getContainer = props.getContainer,
35
- debug = props.debug,
36
- _props$autoDestroy = props.autoDestroy,
37
- autoDestroy = _props$autoDestroy === void 0 ? true : _props$autoDestroy,
38
- children = props.children;
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
- _React$useState2 = _slicedToArray(_React$useState, 2),
42
- shouldRender = _React$useState2[0],
43
- setShouldRender = _React$useState2[1];
44
-
45
- var mergedRender = shouldRender || open; // ====================== Should Render ======================
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]); // ======================== Container ========================
50
+ }, [open, autoDestroy]);
52
51
 
52
+ // ======================== Container ========================
53
53
  var _React$useState3 = React.useState(function () {
54
- return getPortalContainer(getContainer);
55
- }),
56
- _React$useState4 = _slicedToArray(_React$useState3, 2),
57
- innerContainer = _React$useState4[0],
58
- setInnerContainer = _React$useState4[1];
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); // Tell component that we check this in effect which is safe to be `null`
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
- _useDom2 = _slicedToArray(_useDom, 2),
68
- defaultContainer = _useDom2[0],
69
- queueCreate = _useDom2[1];
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
- useScrollLocker(autoLock && open && canUseDom() && (mergedContainer === defaultContainer || mergedContainer === document.body)); // =========================== Ref ===========================
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
- var mergedRef = useComposeRef(childRef, ref); // ========================= Render ==========================
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
- } // Render inline
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
@@ -3,6 +3,5 @@ export function inlineMock(nextInline) {
3
3
  if (typeof nextInline === 'boolean') {
4
4
  inline = nextInline;
5
5
  }
6
-
7
6
  return inline;
8
7
  }
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
- if (!canUseDom()) {
16
- return null;
17
- }
18
-
19
- var defaultEle = document.createElement('div');
20
-
21
- if (process.env.NODE_ENV !== 'production' && debug) {
22
- defaultEle.setAttribute('data-debug', debug);
23
- }
24
-
25
- return defaultEle;
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
- _React$useState4 = _slicedToArray(_React$useState3, 2),
36
- queue = _React$useState4[0],
37
- setQueue = _React$useState4[1];
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
- }); // =========================== DOM ===========================
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 () {
@@ -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 getScrollBarSize from "rc-util/es/getScrollBarSize";
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
- uuid += 1;
14
- return "".concat(UNIQUE_ID, "_").concat(uuid);
15
- }),
16
- _React$useState2 = _slicedToArray(_React$useState, 1),
17
- id = _React$useState2[0];
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 = getScrollBarSize();
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
- autoLock = props.autoLock,
53
- getContainer = props.getContainer,
54
- debug = props.debug,
55
- _props$autoDestroy = props.autoDestroy,
56
- autoDestroy = _props$autoDestroy === void 0 ? true : _props$autoDestroy,
57
- children = props.children;
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
- _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
61
- shouldRender = _React$useState2[0],
62
- setShouldRender = _React$useState2[1];
63
-
64
- var mergedRender = shouldRender || open; // ====================== Should Render ======================
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]); // ======================== Container ========================
58
+ }, [open, autoDestroy]);
71
59
 
60
+ // ======================== Container ========================
72
61
  var _React$useState3 = React.useState(function () {
73
- return getPortalContainer(getContainer);
74
- }),
75
- _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
76
- innerContainer = _React$useState4[0],
77
- setInnerContainer = _React$useState4[1];
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); // Tell component that we check this in effect which is safe to be `null`
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
- _useDom2 = (0, _slicedToArray2.default)(_useDom, 2),
87
- defaultContainer = _useDom2[0],
88
- queueCreate = _useDom2[1];
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
- var mergedContainer = innerContainer !== null && innerContainer !== void 0 ? innerContainer : defaultContainer; // ========================= Locker ==========================
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
- var mergedRef = (0, _ref2.useComposeRef)(childRef, ref); // ========================= Render ==========================
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
- } // Render inline
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
- if (!(0, _canUseDom.default)()) {
33
- return null;
34
- }
35
-
36
- var defaultEle = document.createElement('div');
37
-
38
- if (process.env.NODE_ENV !== 'production' && debug) {
39
- defaultEle.setAttribute('data-debug', debug);
40
- }
41
-
42
- return defaultEle;
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
- _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
53
- queue = _React$useState4[0],
54
- setQueue = _React$useState4[1];
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
- }); // =========================== DOM ===========================
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 () {
@@ -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
- uuid += 1;
32
- return "".concat(UNIQUE_ID, "_").concat(uuid);
33
- }),
34
- _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 1),
35
- id = _React$useState2[0];
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.default)();
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
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.isBodyOverflowing = isBodyOverflowing;
7
-
8
7
  /**
9
8
  * Test usage export. Do not use in your production
10
9
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rc-component/portal",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "React Portal Component",
5
5
  "keywords": [
6
6
  "react",