From 8ebcbc0c9c86f9d7a95f4d92d161940623d6c14e Mon Sep 17 00:00:00 2001 From: Benoit Tremblay Date: Sun, 9 Sep 2018 20:36:06 -0400 Subject: [PATCH 1/2] Fix typing on Route component prop --- packages/react-router/modules/Route.js | 3 ++- packages/react-router/package-lock.json | 15 ++++++++++++++- packages/react-router/package.json | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/react-router/modules/Route.js b/packages/react-router/modules/Route.js index 8d289bb9df..3caf7767bc 100644 --- a/packages/react-router/modules/Route.js +++ b/packages/react-router/modules/Route.js @@ -2,6 +2,7 @@ import warning from "warning"; import invariant from "invariant"; import React from "react"; import PropTypes from "prop-types"; +import PropTypesElementType from "prop-types-elementtype"; import matchPath from "./matchPath"; const isEmptyChildren = children => React.Children.count(children) === 0; @@ -16,7 +17,7 @@ class Route extends React.Component { exact: PropTypes.bool, strict: PropTypes.bool, sensitive: PropTypes.bool, - component: PropTypes.func, + component: PropTypesElementType, render: PropTypes.func, children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]), location: PropTypes.object diff --git a/packages/react-router/package-lock.json b/packages/react-router/package-lock.json index 43bd86f9fc..c6c74280b2 100644 --- a/packages/react-router/package-lock.json +++ b/packages/react-router/package-lock.json @@ -1,6 +1,6 @@ { "name": "react-router", - "version": "4.3.0", + "version": "4.3.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -6690,6 +6690,14 @@ "object-assign": "^4.1.1" } }, + "prop-types-elementtype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prop-types-elementtype/-/prop-types-elementtype-1.0.0.tgz", + "integrity": "sha512-b+fAEWv0T6SBZNIriTtdwe1LCfJEuksz3LZUTNz/ilX4HdgWZwsaHOoVKAbET4bwv+Ao8xCelEZQ+uhPWzNYcw==", + "requires": { + "react-is": "^16.5.0" + } + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -6794,6 +6802,11 @@ "prop-types": "^15.6.0" } }, + "react-is": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.5.0.tgz", + "integrity": "sha512-kpkCGLsChXTEQJVmowQqHpCjHKJFwB4SIChYaaaiAkq8OtE2aBg5pQe8/xnFlGmz9KmMx1H4oQRUyxP7qC9v5A==" + }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", diff --git a/packages/react-router/package.json b/packages/react-router/package.json index 14597cf4ec..b2b9639047 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -44,6 +44,7 @@ "loose-envify": "^1.3.1", "path-to-regexp": "^1.7.0", "prop-types": "^15.6.1", + "prop-types-elementtype": "^1.0.0", "warning": "^4.0.1" }, "devDependencies": { From 86ebac424a3e2e3487c507620f13f1b6a257fef7 Mon Sep 17 00:00:00 2001 From: Benoit Tremblay Date: Sun, 9 Sep 2018 20:44:44 -0400 Subject: [PATCH 2/2] Add unit test for Route component typing --- .../modules/__tests__/Route-test.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/react-router/modules/__tests__/Route-test.js b/packages/react-router/modules/__tests__/Route-test.js index 13c046a72d..b74664d162 100644 --- a/packages/react-router/modules/__tests__/Route-test.js +++ b/packages/react-router/modules/__tests__/Route-test.js @@ -207,6 +207,25 @@ describe("", () => { expect(typeof actual.match).toBe("object"); expect(typeof actual.location).toBe("object"); }); + + it("support forwardRef component", () => { + // Make sure the component PropTypes is not throwing a warning + // forwardRef are generated by React and not a function + const TEXT = "Mrs. Kato"; + const node = document.createElement("div"); + const Component = React.forwardRef((props, ref) => ( +
{TEXT}
+ )); + + ReactDOM.render( + + + , + node + ); + + expect(node.innerHTML).toContain(TEXT); + }); }); describe("", () => {