@samitouri / QOS-React-2 / commits / dbf6942512

Added (local) fork of @reach/portal to unblock OwnersStack MenuButton PR

Brian Vaughn committed Apr 9, 2019 at 08:54 UTC dbf6942512afd314981589b3b5df39766288b55f
10 files changed +201 -12
.eslintignore
+1
@@ -3,6 +3,7 @@ node_modules
3 shells/browser/chrome/build
4 shells/browser/firefox/build
5 shells/dev/build
6 +vendor
7
8 package-lock.json
9 yarn.lock
\ No newline at end of file
.prettierignore
+1
@@ -3,6 +3,7 @@ node_modules
3 shells/browser/chrome/build
4 shells/browser/firefox/build
5 shells/dev/build
6 +vendor
7
8 package-lock.json
9 yarn.lock
\ No newline at end of file
package.json
+3 -1
@@ -38,6 +38,9 @@
38 ],
39 "**/*.js": "eslint --max-warnings 0"
40 },
41 + "resolutions": {
42 + "@reach/portal": "file:./vendor/@reach/portal"
43 + },
44 "dependencies": {
45 "@babel/core": "^7.1.6",
46 "@babel/plugin-proposal-class-properties": "^7.1.0",
@@ -100,7 +103,6 @@
103 "react-color": "^2.11.7",
104 "react-dom": "^16.8.4",
105 "react-is": "^16.8.4",
103 - "react-portal": "^3.1.0",
106 "react-virtualized-auto-sizer": "^1.0.2",
107 "react-window": "^1.5.1",
108 "scheduler": "^0.13",
vendor/@reach/portal/.eslintignore new
+1
@@ -0,0 +1 @@
1 +index.js
\ No newline at end of file
vendor/@reach/portal/es/index.js new
+44
@@ -0,0 +1,44 @@
1 +import React from "react";
2 +import { createPortal } from "react-dom";
3 +import Component from "@reach/component-component";
4 +
5 +var Portal = function Portal(_ref) {
6 + var children = _ref.children,
7 + _ref$type = _ref.type,
8 + type = _ref$type === undefined ? "reach-portal" : _ref$type;
9 + return React.createElement(Component, {
10 + getRefs: function getRefs() {
11 + return { mountNode: null, portalNode: null };
12 + },
13 + didMount: function didMount(_ref2) {
14 + var refs = _ref2.refs,
15 + forceUpdate = _ref2.forceUpdate;
16 +
17 + // It's possible that the content we are portal has, itself, been portaled.
18 + // In that case, it's important to append to the correct document element.
19 + var ownerDocument = refs.mountNode.ownerDocument;
20 + refs.portalNode = ownerDocument.createElement(type);
21 + ownerDocument.body.appendChild(refs.portalNode);
22 + forceUpdate();
23 + },
24 + willUnmount: function willUnmount(_ref3) {
25 + var portalNode = _ref3.refs.portalNode;
26 +
27 + portalNode.ownerDocument.body.removeChild(portalNode);
28 + },
29 + render: function render(_ref4) {
30 + var refs = _ref4.refs;
31 + var portalNode = refs.portalNode;
32 +
33 + if (!portalNode) {
34 + return React.createElement("div", { ref: function ref(div) {
35 + return refs.mountNode = div;
36 + } });
37 + } else {
38 + return createPortal(children, portalNode);
39 + }
40 + }
41 + });
42 +};
43 +
44 +export default Portal;
\ No newline at end of file
vendor/@reach/portal/examples/basic.example.js new
+35
@@ -0,0 +1,35 @@
1 +import React from "react";
2 +import Portal from "../src/index";
3 +
4 +export let name = "Basic";
5 +
6 +export let Example = () => (
7 + <div
8 + style={{
9 + height: 40,
10 + overflow: "auto"
11 + }}
12 + >
13 + <div style={{ border: "solid 5px", padding: 20, marginLeft: 170 }}>
14 + This is in the normal react root, with an overflow hidden parent, clips
15 + the box.
16 + </div>
17 + <Portal>
18 + <div
19 + style={{
20 + position: "absolute",
21 + top: 0,
22 + left: 20,
23 + width: 100,
24 + border: "solid 5px",
25 + padding: 20,
26 + background: "#f0f0f0"
27 + }}
28 + >
29 + This is in the portal, rendered in the DOM at the document root so the
30 + CSS doesn't screw things up, but we render it in the react hierarchy
31 + where it makes sense.
32 + </div>
33 + </Portal>
34 + </div>
35 +);
vendor/@reach/portal/index.js new
+56
@@ -0,0 +1,56 @@
1 +"use strict";
2 +
3 +exports.__esModule = true;
4 +
5 +var _react = require("react");
6 +
7 +var _react2 = _interopRequireDefault(_react);
8 +
9 +var _reactDom = require("react-dom");
10 +
11 +var _componentComponent = require("@reach/component-component");
12 +
13 +var _componentComponent2 = _interopRequireDefault(_componentComponent);
14 +
15 +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16 +
17 +var Portal = function Portal(_ref) {
18 + var children = _ref.children,
19 + _ref$type = _ref.type,
20 + type = _ref$type === undefined ? "reach-portal" : _ref$type;
21 + return _react2.default.createElement(_componentComponent2.default, {
22 + getRefs: function getRefs() {
23 + return { mountNode: null, portalNode: null };
24 + },
25 + didMount: function didMount(_ref2) {
26 + var refs = _ref2.refs,
27 + forceUpdate = _ref2.forceUpdate;
28 +
29 + // It's possible that the content we are portal has, itself, been portaled.
30 + // In that case, it's important to append to the correct document element.
31 + var ownerDocument = refs.mountNode.ownerDocument;
32 + refs.portalNode = ownerDocument.createElement(type);
33 + ownerDocument.body.appendChild(refs.portalNode);
34 + forceUpdate();
35 + },
36 + willUnmount: function willUnmount(_ref3) {
37 + var portalNode = _ref3.refs.portalNode;
38 +
39 + portalNode.ownerDocument.body.removeChild(portalNode);
40 + },
41 + render: function render(_ref4) {
42 + var refs = _ref4.refs;
43 + var portalNode = refs.portalNode;
44 +
45 + if (!portalNode) {
46 + return _react2.default.createElement("div", { ref: function ref(div) {
47 + return refs.mountNode = div;
48 + } });
49 + } else {
50 + return (0, _reactDom.createPortal)(children, portalNode);
51 + }
52 + }
53 + });
54 +};
55 +
56 +exports.default = Portal;
\ No newline at end of file
vendor/@reach/portal/package.json new
+28
@@ -0,0 +1,28 @@
1 +{
2 + "name": "@reach/portal",
3 + "version": "0.1.3",
4 + "description": "Declarative portals for React",
5 + "main": "index.js",
6 + "module": "es/index.js",
7 + "scripts": {
8 + "test": "echo \"Write some tests you bum!\"",
9 + "build": "node ../../shared/build-package",
10 + "lint": "eslint . --max-warnings=0"
11 + },
12 + "dependencies": {
13 + "@reach/component-component": "^0.1.3"
14 + },
15 + "peerDependencies": {
16 + "react": "^16.4.0",
17 + "react-dom": "^16.4.0"
18 + },
19 + "author": "",
20 + "license": "MIT",
21 + "files": [
22 + "es",
23 + "src",
24 + "lib",
25 + "index.js",
26 + "styles.css"
27 + ]
28 +}
vendor/@reach/portal/src/index.js new
+30
@@ -0,0 +1,30 @@
1 +import React from "react";
2 +import { createPortal } from "react-dom";
3 +import Component from "@reach/component-component";
4 +
5 +let Portal = ({ children, type = "reach-portal" }) => (
6 + <Component
7 + getRefs={() => ({ mountNode: null, portalNode: null })}
8 + didMount={({ refs, forceUpdate }) => {
9 + // It's possible that the content we are portal has, itself, been portaled.
10 + // In that case, it's important to append to the correct document element.
11 + const ownerDocument = refs.mountNode.ownerDocument;
12 + refs.portalNode = ownerDocument.createElement(type);
13 + ownerDocument.body.appendChild(refs.portalNode);
14 + forceUpdate();
15 + }}
16 + willUnmount={({ refs: { portalNode } }) => {
17 + portalNode.ownerDocument.body.removeChild(portalNode);
18 + }}
19 + render={({ refs }) => {
20 + const { portalNode } = refs;
21 + if (!portalNode) {
22 + return <div ref={div => (refs.mountNode = div)} />;
23 + } else {
24 + return createPortal(children, portalNode);
25 + }
26 + }}
27 + />
28 +);
29 +
30 +export default Portal;
yarn.lock
+2 -11
@@ -768,10 +768,8 @@
768 resolved "https://registry.yarnpkg.com/@reach/observe-rect/-/observe-rect-1.0.3.tgz#2ea3dcc369ab22bd9f050a92ea319321356a61e8"
769 integrity sha1-LqPcw2mrIr2fBQqS6jGTITVqYeg=
770
771 -"@reach/portal@^0.1.3":
771 +"@reach/portal@^0.1.3", "@reach/portal@file:./vendor/@reach/portal":
772 version "0.1.3"
773 - resolved "https://registry.yarnpkg.com/@reach/portal/-/portal-0.1.3.tgz#31d820f31bbab73570d5b5a449e2b0fa6457802f"
774 - integrity sha512-yDcu5XZWfWKmKvbOs/uS7vITPVFXmn+XY5V6YcGhlz20KgwG+aJX2c7yvYzO++Zr0qvmtQCmxA4EGEciqIys6g==
773 dependencies:
774 "@reach/component-component" "^0.1.3"
775
@@ -8584,7 +8582,7 @@ promise@^7.1.1:
8582 dependencies:
8583 asap "~2.0.3"
8584
8587 -prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2:
8585 +prop-types@^15.5.10, prop-types@^15.6.1, prop-types@^15.6.2:
8586 version "15.7.2"
8587 resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
8588 integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@@ -8796,13 +8794,6 @@ react-lifecycles-compat@^3.0.4:
8794 resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
8795 integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
8796
8799 -react-portal@^3.1.0:
8800 - version "3.2.0"
8801 - resolved "https://registry.yarnpkg.com/react-portal/-/react-portal-3.2.0.tgz#4224e19b2b05d5cbe730a7ba0e34ec7585de0043"
8802 - integrity sha512-avb1FreAZAVCvNNyS2dCpxZiPYPJnAasHYPxdVBTROgNFeI+KSb+OoMHNsC1GbDawESCriPwCX+qKua6WSPIFw==
8803 - dependencies:
8804 - prop-types "^15.5.8"
8805 -
8797 react-virtualized-auto-sizer@^1.0.2:
8798 version "1.0.2"
8799 resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.2.tgz#a61dd4f756458bbf63bd895a92379f9b70f803bd"