@rc-component/portal 1.0.0-9 → 1.0.1

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/es/Portal.d.ts CHANGED
@@ -14,4 +14,5 @@ export interface PortalProps {
14
14
  /** @private debug name. Do not use in prod */
15
15
  debug?: string;
16
16
  }
17
- export default function Portal(props: PortalProps): JSX.Element;
17
+ declare const Portal: React.ForwardRefExoticComponent<PortalProps & React.RefAttributes<any>>;
18
+ export default Portal;
package/es/Portal.js CHANGED
@@ -1,7 +1,8 @@
1
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
1
+ 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 { supportRef, useComposeRef } from "rc-util/es/ref";
5
6
  import OrderContext from "./Context";
6
7
  import useDom from "./useDom";
7
8
  import useScrollLocker from "./useScrollLocker";
@@ -27,7 +28,7 @@ var getPortalContainer = function getPortalContainer(getContainer) {
27
28
  return getContainer;
28
29
  };
29
30
 
30
- export default function Portal(props) {
31
+ var Portal = /*#__PURE__*/React.forwardRef(function (props, ref) {
31
32
  var open = props.open,
32
33
  autoLock = props.autoLock,
33
34
  getContainer = props.getContainer,
@@ -68,7 +69,16 @@ export default function Portal(props) {
68
69
 
69
70
  var mergedContainer = innerContainer !== null && innerContainer !== void 0 ? innerContainer : defaultContainer; // ========================= Locker ==========================
70
71
 
71
- useScrollLocker(autoLock && open && canUseDom() && (mergedContainer === defaultContainer || mergedContainer === document.body)); // ========================= Render ==========================
72
+ useScrollLocker(autoLock && open && canUseDom() && (mergedContainer === defaultContainer || mergedContainer === document.body)); // =========================== Ref ===========================
73
+
74
+ var childRef = null;
75
+
76
+ if (children && supportRef(children) && ref) {
77
+ var _ref = children;
78
+ childRef = _ref.ref;
79
+ }
80
+
81
+ var mergedRef = useComposeRef(childRef, ref); // ========================= Render ==========================
72
82
  // Do not render when nothing need render
73
83
  // When innerContainer is `undefined`, it may not ready since user use ref in the same render
74
84
 
@@ -78,7 +88,21 @@ export default function Portal(props) {
78
88
 
79
89
 
80
90
  var renderInline = mergedContainer === false || inlineMock();
91
+ var reffedChildren = children;
92
+
93
+ if (ref) {
94
+ reffedChildren = /*#__PURE__*/React.cloneElement(children, {
95
+ ref: mergedRef
96
+ });
97
+ }
98
+
81
99
  return /*#__PURE__*/React.createElement(OrderContext.Provider, {
82
100
  value: queueCreate
83
- }, renderInline ? children : /*#__PURE__*/createPortal(children, mergedContainer));
84
- }
101
+ }, renderInline ? reffedChildren : /*#__PURE__*/createPortal(reffedChildren, mergedContainer));
102
+ });
103
+
104
+ if (process.env.NODE_ENV !== 'production') {
105
+ Portal.displayName = 'Portal';
106
+ }
107
+
108
+ export default Portal;
package/es/useDom.js CHANGED
@@ -1,5 +1,5 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
1
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
3
  import * as React from 'react';
4
4
  import useLayoutEffect from "rc-util/es/hooks/useLayoutEffect";
5
5
  import canUseDom from "rc-util/es/Dom/canUseDom";
@@ -1,4 +1,4 @@
1
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
1
+ 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";
package/lib/Portal.d.ts CHANGED
@@ -14,4 +14,5 @@ export interface PortalProps {
14
14
  /** @private debug name. Do not use in prod */
15
15
  debug?: string;
16
16
  }
17
- export default function Portal(props: PortalProps): JSX.Element;
17
+ declare const Portal: React.ForwardRefExoticComponent<PortalProps & React.RefAttributes<any>>;
18
+ export default Portal;
package/lib/Portal.js CHANGED
@@ -7,7 +7,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.default = Portal;
10
+ exports.default = void 0;
11
11
 
12
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
13
 
@@ -17,6 +17,8 @@ var _reactDom = require("react-dom");
17
17
 
18
18
  var _canUseDom = _interopRequireDefault(require("rc-util/lib/Dom/canUseDom"));
19
19
 
20
+ var _ref2 = require("rc-util/lib/ref");
21
+
20
22
  var _Context = _interopRequireDefault(require("./Context"));
21
23
 
22
24
  var _useDom3 = _interopRequireDefault(require("./useDom"));
@@ -45,7 +47,7 @@ var getPortalContainer = function getPortalContainer(getContainer) {
45
47
  return getContainer;
46
48
  };
47
49
 
48
- function Portal(props) {
50
+ var Portal = /*#__PURE__*/React.forwardRef(function (props, ref) {
49
51
  var open = props.open,
50
52
  autoLock = props.autoLock,
51
53
  getContainer = props.getContainer,
@@ -86,7 +88,16 @@ function Portal(props) {
86
88
 
87
89
  var mergedContainer = innerContainer !== null && innerContainer !== void 0 ? innerContainer : defaultContainer; // ========================= Locker ==========================
88
90
 
89
- (0, _useScrollLocker.default)(autoLock && open && (0, _canUseDom.default)() && (mergedContainer === defaultContainer || mergedContainer === document.body)); // ========================= Render ==========================
91
+ (0, _useScrollLocker.default)(autoLock && open && (0, _canUseDom.default)() && (mergedContainer === defaultContainer || mergedContainer === document.body)); // =========================== Ref ===========================
92
+
93
+ var childRef = null;
94
+
95
+ if (children && (0, _ref2.supportRef)(children) && ref) {
96
+ var _ref = children;
97
+ childRef = _ref.ref;
98
+ }
99
+
100
+ var mergedRef = (0, _ref2.useComposeRef)(childRef, ref); // ========================= Render ==========================
90
101
  // Do not render when nothing need render
91
102
  // When innerContainer is `undefined`, it may not ready since user use ref in the same render
92
103
 
@@ -96,7 +107,22 @@ function Portal(props) {
96
107
 
97
108
 
98
109
  var renderInline = mergedContainer === false || (0, _mock.inlineMock)();
110
+ var reffedChildren = children;
111
+
112
+ if (ref) {
113
+ reffedChildren = /*#__PURE__*/React.cloneElement(children, {
114
+ ref: mergedRef
115
+ });
116
+ }
117
+
99
118
  return /*#__PURE__*/React.createElement(_Context.default.Provider, {
100
119
  value: queueCreate
101
- }, renderInline ? children : /*#__PURE__*/(0, _reactDom.createPortal)(children, mergedContainer));
102
- }
120
+ }, renderInline ? reffedChildren : /*#__PURE__*/(0, _reactDom.createPortal)(reffedChildren, mergedContainer));
121
+ });
122
+
123
+ if (process.env.NODE_ENV !== 'production') {
124
+ Portal.displayName = 'Portal';
125
+ }
126
+
127
+ var _default = Portal;
128
+ exports.default = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rc-component/portal",
3
- "version": "1.0.0-9",
3
+ "version": "1.0.1",
4
4
  "description": "React Portal Component",
5
5
  "keywords": [
6
6
  "react",
@@ -39,15 +39,16 @@
39
39
  "test": "npm run test:client && npm run test:server",
40
40
  "test:client": "umi-test --testPathIgnorePatterns=ssr.test.tsx --testPathIgnorePatterns=ssr.test.tsx",
41
41
  "test:coverage": "npm run test:client --coverage",
42
- "test:server": "umi-test --env=node tests/ssr.test.tsx",
42
+ "test:server": "umi-test --env=node -- tests/ssr.test.tsx",
43
43
  "watch": "father dev"
44
44
  },
45
45
  "dependencies": {
46
46
  "@babel/runtime": "^7.18.0",
47
47
  "classnames": "^2.3.2",
48
- "rc-util": "^5.8.0"
48
+ "rc-util": "^5.16.0"
49
49
  },
50
50
  "devDependencies": {
51
+ "@rc-component/father-plugin": "^1.0.0",
51
52
  "@testing-library/jest-dom": "^5.16.4",
52
53
  "@testing-library/react": "^13.0.0",
53
54
  "@types/jest": "^26.0.20",