From 4fdb1def391fb1c3471145da01dd1262d685d821 Mon Sep 17 00:00:00 2001
From: blam
Date: Sun, 7 Jun 2020 03:07:46 +0200
Subject: [PATCH 01/16] chore(react-router-v6): starting to move things to
react-router-v6
---
packages/app/package.json | 3 +-
.../default-app/packages/app/package.json.hbs | 102 ++++++++--------
.../plugins/welcome/package.json.hbs | 74 ++++++------
packages/core-api/package.json | 2 +-
packages/core-api/src/app/App.tsx | 20 ++--
packages/core/package.json | 5 +-
.../core/src/layout/ErrorPage/ErrorPage.tsx | 4 +-
packages/dev-utils/package.json | 4 +-
packages/test-utils/package.json | 4 +-
plugins/catalog/package.json | 4 +-
plugins/circleci/package.json | 4 +-
plugins/circleci/src/components/App.tsx | 23 ++--
plugins/graphiql/package.json | 2 +-
plugins/home-page/package.json | 2 +-
plugins/lighthouse/package.json | 2 +-
.../src/components/AuditList/index.test.tsx | 8 +-
.../src/components/AuditList/index.tsx | 4 +-
.../src/components/CreateAudit/index.test.tsx | 8 +-
.../src/components/CreateAudit/index.tsx | 12 +-
plugins/register-component/package.json | 4 +-
plugins/scaffolder/package.json | 2 +-
plugins/welcome/package.json | 2 +-
yarn.lock | 109 ++++--------------
23 files changed, 167 insertions(+), 237 deletions(-)
diff --git a/packages/app/package.json b/packages/app/package.json
index 15681d0548..6b5c5b4e78 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -22,7 +22,7 @@
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-hot-loader": "^4.12.21",
- "react-router-dom": "^5.2.0",
+ "react-router-dom": "6.0.0-alpha.5",
"react-use": "^14.2.0",
"zen-observable": "^0.8.15"
},
@@ -34,7 +34,6 @@
"@types/jest": "^25.2.2",
"@types/jquery": "^3.3.34",
"@types/node": "^12.0.0",
- "@types/react-router-dom": "^5.1.3",
"@types/zen-observable": "^0.8.0",
"cross-env": "^7.0.0",
"cypress": "^4.2.0",
diff --git a/packages/cli/templates/default-app/packages/app/package.json.hbs b/packages/cli/templates/default-app/packages/app/package.json.hbs
index 2c35dee754..46e27c5b91 100644
--- a/packages/cli/templates/default-app/packages/app/package.json.hbs
+++ b/packages/cli/templates/default-app/packages/app/package.json.hbs
@@ -1,53 +1,53 @@
{
- "name": "app",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@material-ui/core": "^4.9.1",
- "@material-ui/icons": "^4.9.1",
- "@material-ui/lab": "4.0.0-alpha.45",
- "@backstage/cli": "^{{version}}",
- "@backstage/core": "^{{version}}",
- "@backstage/theme": "^{{version}}",
- "plugin-welcome": "0.0.0",
- "react": "^16.13.1",
- "react-dom": "^16.13.1",
- "react-router-dom": "^5.2.0",
- "react-use": "^14.2.0"
- },
- "devDependencies": {
- "@testing-library/jest-dom": "^5.7.0",
- "@testing-library/react": "^9.3.2",
- "@testing-library/user-event": "^10.2.4",
- "@types/jest": "^25.2.2",
- "@types/node": "^12.0.0",
- "@types/react-router-dom": "^5.1.3",
- "@types/testing-library__jest-dom": "^5.0.4",
- "cross-env": "^7.0.0",
- "cypress": "^4.2.0",
- "eslint-plugin-cypress": "^2.10.3",
- "start-server-and-test": "^1.10.11"
- },
- "scripts": {
- "start": "backstage-cli app:serve",
- "bundle": "backstage-cli app:build",
- "test": "backstage-cli test",
- "lint": "backstage-cli lint",
- "test:e2e": "cross-env PORT=3001 start-server-and-test start http://localhost:3001 cy:dev",
- "test:e2e:ci": "cross-env PORT=3001 start-server-and-test start http://localhost:3001 cy:run",
- "cy:dev": "cypress open",
- "cy:run": "cypress run"
- },
- "browserslist": {
- "production": [
- ">0.2%",
- "not dead",
- "not op_mini all"
- ],
- "development": [
- "last 1 chrome version",
- "last 1 firefox version",
- "last 1 safari version"
- ]
- }
+"name": "app",
+"version": "0.0.0",
+"private": true,
+"dependencies": {
+"@material-ui/core": "^4.9.1",
+"@material-ui/icons": "^4.9.1",
+"@material-ui/lab": "4.0.0-alpha.45",
+"@backstage/cli": "^{{version}}",
+"@backstage/core": "^{{version}}",
+"@backstage/theme": "^{{version}}",
+"plugin-welcome": "0.0.0",
+"react": "^16.13.1",
+"react-dom": "^16.13.1",
+"react-router-dom": "6.0.0-alpha.5",
+"react-use": "^14.2.0"
+},
+"devDependencies": {
+"@testing-library/jest-dom": "^5.7.0",
+"@testing-library/react": "^9.3.2",
+"@testing-library/user-event": "^10.2.4",
+"@types/jest": "^25.2.2",
+"@types/node": "^12.0.0",
+"@types/react-router-dom": "6.0.0-alpha.5",
+"@types/testing-library__jest-dom": "^5.0.4",
+"cross-env": "^7.0.0",
+"cypress": "^4.2.0",
+"eslint-plugin-cypress": "^2.10.3",
+"start-server-and-test": "^1.10.11"
+},
+"scripts": {
+"start": "backstage-cli app:serve",
+"bundle": "backstage-cli app:build",
+"test": "backstage-cli test",
+"lint": "backstage-cli lint",
+"test:e2e": "cross-env PORT=3001 start-server-and-test start http://localhost:3001 cy:dev",
+"test:e2e:ci": "cross-env PORT=3001 start-server-and-test start http://localhost:3001 cy:run",
+"cy:dev": "cypress open",
+"cy:run": "cypress run"
+},
+"browserslist": {
+"production": [
+">0.2%",
+"not dead",
+"not op_mini all"
+],
+"development": [
+"last 1 chrome version",
+"last 1 firefox version",
+"last 1 safari version"
+]
+}
}
diff --git a/packages/cli/templates/default-app/plugins/welcome/package.json.hbs b/packages/cli/templates/default-app/plugins/welcome/package.json.hbs
index b18839bab6..42676f56ee 100644
--- a/packages/cli/templates/default-app/plugins/welcome/package.json.hbs
+++ b/packages/cli/templates/default-app/plugins/welcome/package.json.hbs
@@ -1,39 +1,39 @@
{
- "name": "plugin-welcome",
- "version": "0.0.0",
- "main": "dist/index.esm.js",
- "main:src": "src/index.ts",
- "types": "src/index.ts",
- "private": true,
- "scripts": {
- "build": "backstage-cli plugin:build",
- "start": "backstage-cli plugin:serve",
- "lint": "backstage-cli lint",
- "test": "backstage-cli test",
- "diff": "backstage-cli plugin:diff",
- "prepack": "backstage-cli prepack",
- "postpack": "backstage-cli postpack",
- "clean": "backstage-cli clean"
- },
- "dependencies": {
- "@backstage/core": "^{{version}}",
- "@backstage/theme": "^{{version}}",
- "@material-ui/core": "^4.9.1",
- "@material-ui/icons": "^4.9.1",
- "react": "^16.13.1",
- "react-dom": "^16.13.1",
- "react-use": "^14.2.0",
- "react-router-dom": "^5.2.0"
- },
- "devDependencies": {
- "@backstage/cli": "^{{version}}",
- "@backstage/dev-utils": "^{{version}}",
- "@testing-library/jest-dom": "^5.7.0",
- "@testing-library/react": "^9.3.2",
- "@types/testing-library__jest-dom": "^5.0.4",
- "jest-fetch-mock": "^3.0.3"
- },
- "files": [
- "dist/**/*.{js,d.ts}"
- ]
+"name": "plugin-welcome",
+"version": "0.0.0",
+"main": "dist/index.esm.js",
+"main:src": "src/index.ts",
+"types": "src/index.ts",
+"private": true,
+"scripts": {
+"build": "backstage-cli plugin:build",
+"start": "backstage-cli plugin:serve",
+"lint": "backstage-cli lint",
+"test": "backstage-cli test",
+"diff": "backstage-cli plugin:diff",
+"prepack": "backstage-cli prepack",
+"postpack": "backstage-cli postpack",
+"clean": "backstage-cli clean"
+},
+"dependencies": {
+"@backstage/core": "^{{version}}",
+"@backstage/theme": "^{{version}}",
+"@material-ui/core": "^4.9.1",
+"@material-ui/icons": "^4.9.1",
+"react": "^16.13.1",
+"react-dom": "^16.13.1",
+"react-use": "^14.2.0",
+"react-router-dom": "6.0.0-alpha.5"
+},
+"devDependencies": {
+"@backstage/cli": "^{{version}}",
+"@backstage/dev-utils": "^{{version}}",
+"@testing-library/jest-dom": "^5.7.0",
+"@testing-library/react": "^9.3.2",
+"@types/testing-library__jest-dom": "^5.0.4",
+"jest-fetch-mock": "^3.0.3"
+},
+"files": [
+"dist/**/*.{js,d.ts}"
+]
}
diff --git a/packages/core-api/package.json b/packages/core-api/package.json
index 8139f2c54a..aa88fb1aeb 100644
--- a/packages/core-api/package.json
+++ b/packages/core-api/package.json
@@ -34,7 +34,7 @@
"@types/react": "^16.9",
"prop-types": "^15.7.2",
"react": "^16.12.0",
- "react-router-dom": "^5.2.0",
+ "react-router-dom": "6.0.0-alpha.5",
"react-use": "^14.2.0",
"zen-observable": "^0.8.15"
},
diff --git a/packages/core-api/src/app/App.tsx b/packages/core-api/src/app/App.tsx
index 575dcfc59d..e47aa545ab 100644
--- a/packages/core-api/src/app/App.tsx
+++ b/packages/core-api/src/app/App.tsx
@@ -15,7 +15,7 @@
*/
import React, { ComponentType, FC } from 'react';
-import { Route, Switch, Redirect } from 'react-router-dom';
+import { Route, Redirect, Routes, Navigate } from 'react-router-dom';
import { AppContextProvider } from './AppContext';
import { BackstageApp, AppComponents, AppConfigLoader } from './types';
import { BackstagePlugin } from '../plugin';
@@ -85,26 +85,26 @@ export class PrivateAppImpl implements BackstageApp {
for (const output of plugin.output()) {
switch (output.type) {
case 'legacy-route': {
- const { path, component, options = {} } = output;
+ const { path, component: Component, options = {} } = output;
const { exact = true } = options;
routes.push(
}
exact={exact}
/>,
);
break;
}
case 'route': {
- const { target, component, options = {} } = output;
+ const { target, component: Component, options = {} } = output;
const { exact = true } = options;
routes.push(
}
exact={exact}
/>,
);
@@ -114,7 +114,7 @@ export class PrivateAppImpl implements BackstageApp {
const { path, target, options = {} } = output;
const { exact = true } = options;
routes.push(
- ,
+ ,
);
break;
}
@@ -122,7 +122,7 @@ export class PrivateAppImpl implements BackstageApp {
const { from, to, options = {} } = output;
const { exact = true } = options;
routes.push(
-
+
{routes}
-
-
+ } />
+
);
return () => rendered;
diff --git a/packages/core/package.json b/packages/core/package.json
index 818634238b..6c54b2c59e 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -34,7 +34,6 @@
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.45",
"@types/react": "^16.9",
- "@types/react-router-dom": "^5.1.5",
"@types/react-sparklines": "^1.7.0",
"classnames": "^2.2.6",
"clsx": "^1.1.0",
@@ -45,8 +44,8 @@
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-helmet": "6.0.0",
- "react-router": "^5.2.0",
- "react-router-dom": "^5.2.0",
+ "react-router": "6.0.0-alpha.5",
+ "react-router-dom": "6.0.0-alpha.5",
"react-sparklines": "^1.7.0",
"react-syntax-highlighter": "^12.2.1",
"react-use": "^14.2.0"
diff --git a/packages/core/src/layout/ErrorPage/ErrorPage.tsx b/packages/core/src/layout/ErrorPage/ErrorPage.tsx
index b94c7409fc..fa2315307f 100644
--- a/packages/core/src/layout/ErrorPage/ErrorPage.tsx
+++ b/packages/core/src/layout/ErrorPage/ErrorPage.tsx
@@ -19,7 +19,7 @@ import { Typography, Link, Grid } from '@material-ui/core';
import { makeStyles } from '@material-ui/core/styles';
import { BackstageTheme } from '@backstage/theme';
import { MicDrop } from './MicDrop';
-import { useHistory } from 'react-router';
+import { useNavigate } from 'react-router';
interface IErrorPageProps {
status: string;
@@ -40,7 +40,7 @@ const useStyles = makeStyles(theme => ({
export const ErrorPage = ({ status, statusMessage }: IErrorPageProps) => {
const classes = useStyles();
- const history = useHistory();
+ const history = useNavigate();
return (
diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json
index ab595ea9a7..b2c5e1fa59 100644
--- a/packages/dev-utils/package.json
+++ b/packages/dev-utils/package.json
@@ -41,8 +41,8 @@
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-hot-loader": "^4.12.21",
- "react-router": "^5.2.0",
- "react-router-dom": "^5.2.0"
+ "react-router": "^6.0.0-alpha.5",
+ "react-router-dom": "^6.0.0-alpha.5"
},
"devDependencies": {
"@types/jest": "^25.2.2",
diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json
index 136b6d6854..8f23e6b05e 100644
--- a/packages/test-utils/package.json
+++ b/packages/test-utils/package.json
@@ -39,8 +39,8 @@
"@types/react": "^16.9",
"react": "^16.12.0",
"react-dom": "^16.12.0",
- "react-router": "^5.2.0",
- "react-router-dom": "^5.2.0"
+ "react-router": "^6.0.0-alpha.5",
+ "react-router-dom": "^6.0.0-alpha.5"
},
"devDependencies": {
"@types/jest": "^25.2.2",
diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json
index 5445fffb32..44b9c63435 100644
--- a/plugins/catalog/package.json
+++ b/plugins/catalog/package.json
@@ -27,8 +27,8 @@
"@material-ui/lab": "4.0.0-alpha.45",
"react": "^16.13.1",
"react-dom": "^16.13.1",
- "react-router": "^5.2.0",
- "react-router-dom": "^5.2.0",
+ "react-router": "^6.0.0-alpha.5",
+ "react-router-dom": "^6.0.0-alpha.5",
"react-use": "^14.2.0"
},
"devDependencies": {
diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json
index bbcac8e9eb..3158acadfb 100644
--- a/plugins/circleci/package.json
+++ b/plugins/circleci/package.json
@@ -37,8 +37,8 @@
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-lazylog": "^4.5.2",
- "react-router": "^5.1.2",
- "react-router-dom": "^5.1.2",
+ "react-router": "^6.0.0-alpha.5",
+ "react-router-dom": "^6.0.0-alpha.5",
"react-use": "^14.2.0"
},
"devDependencies": {
diff --git a/plugins/circleci/src/components/App.tsx b/plugins/circleci/src/components/App.tsx
index 1649c01b70..5907146340 100644
--- a/plugins/circleci/src/components/App.tsx
+++ b/plugins/circleci/src/components/App.tsx
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import React from 'react';
-import { Switch, Route, MemoryRouter } from 'react-router';
+import { Route, MemoryRouter, Routes } from 'react-router';
import { BuildsPage, Builds } from '../pages/BuildsPage';
import { DetailedViewPage, BuildWithSteps } from '../pages/BuildWithStepsPage';
import { AppStateProvider } from '../state';
@@ -24,14 +24,13 @@ export const App = () => {
return (
<>
-
-
+
+ } />
}
/>
-
+
>
@@ -45,14 +44,10 @@ export const CircleCIWidget = () => (
<>
-
-
-
-
+
+ } />
+ } />
+
>
diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json
index a3fee6e217..3062971dec 100644
--- a/plugins/graphiql/package.json
+++ b/plugins/graphiql/package.json
@@ -53,7 +53,7 @@
"@types/node": "^12.0.0",
"@types/testing-library__jest-dom": "^5.0.4",
"jest-fetch-mock": "^3.0.3",
- "react-router-dom": "^5.2.0"
+ "react-router-dom": "6.0.0-alpha.5"
},
"files": [
"dist/**/*.{js,d.ts}"
diff --git a/plugins/home-page/package.json b/plugins/home-page/package.json
index fa1236861c..cfe196a9d3 100644
--- a/plugins/home-page/package.json
+++ b/plugins/home-page/package.json
@@ -36,7 +36,7 @@
"@types/node": "^12.0.0",
"@types/testing-library__jest-dom": "^5.0.4",
"jest-fetch-mock": "^3.0.3",
- "react-router-dom": "^5.2.0"
+ "react-router-dom": "6.0.0-alpha.5"
},
"files": [
"dist/**/*.{js,d.ts}"
diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json
index d8e2b53ace..aba8d964be 100644
--- a/plugins/lighthouse/package.json
+++ b/plugins/lighthouse/package.json
@@ -25,7 +25,7 @@
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-markdown": "^4.3.1",
- "react-router-dom": "^5.2.0",
+ "react-router-dom": "6.0.0-alpha.5",
"react-use": "^14.2.0"
},
"devDependencies": {
diff --git a/plugins/lighthouse/src/components/AuditList/index.test.tsx b/plugins/lighthouse/src/components/AuditList/index.test.tsx
index bcd486e876..612bed4635 100644
--- a/plugins/lighthouse/src/components/AuditList/index.test.tsx
+++ b/plugins/lighthouse/src/components/AuditList/index.test.tsx
@@ -22,7 +22,7 @@ jest.mock('react-router-dom', () => {
};
return {
...actual,
- useHistory: jest.fn(() => mocks),
+ useNavigate: jest.fn(() => mocks),
};
});
@@ -41,7 +41,7 @@ import AuditList from '.';
import * as data from '../../__fixtures__/website-list-response.json';
-const { useHistory } = jest.requireMock('react-router-dom');
+const { useNavigate } = jest.requireMock('react-router-dom');
const websiteListResponse = data as WebsiteListResponse;
describe('AuditList', () => {
@@ -145,7 +145,9 @@ describe('AuditList', () => {
);
const element = await rendered.findByLabelText(/Go to page 1/);
fireEvent.click(element);
- expect(useHistory().replace).toHaveBeenCalledWith(`/lighthouse?page=1`);
+ expect(useNavigate().replace).toHaveBeenCalledWith(
+ `/lighthouse?page=1`,
+ );
});
});
});
diff --git a/plugins/lighthouse/src/components/AuditList/index.tsx b/plugins/lighthouse/src/components/AuditList/index.tsx
index 4dbbb05295..28fbc06ce1 100644
--- a/plugins/lighthouse/src/components/AuditList/index.tsx
+++ b/plugins/lighthouse/src/components/AuditList/index.tsx
@@ -16,7 +16,7 @@
import React, { useState, useMemo, FC, ReactNode } from 'react';
import { useLocalStorage, useAsync } from 'react-use';
-import { useHistory } from 'react-router-dom';
+import { useNavigate } from 'react-router-dom';
import { Grid, Button } from '@material-ui/core';
import Alert from '@material-ui/lab/Alert';
import Pagination from '@material-ui/lab/Pagination';
@@ -65,7 +65,7 @@ const AuditList: FC<{}> = () => {
return 0;
}, [value?.total, value?.limit]);
- const history = useHistory();
+ const history = useNavigate();
let content: ReactNode = null;
if (value) {
diff --git a/plugins/lighthouse/src/components/CreateAudit/index.test.tsx b/plugins/lighthouse/src/components/CreateAudit/index.test.tsx
index 08e8005530..39c109788f 100644
--- a/plugins/lighthouse/src/components/CreateAudit/index.test.tsx
+++ b/plugins/lighthouse/src/components/CreateAudit/index.test.tsx
@@ -22,7 +22,7 @@ jest.mock('react-router-dom', () => {
};
return {
...actual,
- useHistory: jest.fn(() => mocks),
+ useNavigate: jest.fn(() => mocks),
};
});
@@ -41,7 +41,7 @@ import { lighthouseApiRef, LighthouseRestApi, Audit } from '../../api';
import CreateAudit from '.';
import * as data from '../../__fixtures__/create-audit-response.json';
-const { useHistory }: { useHistory: jest.Mock } = jest.requireMock(
+const { useNavigate }: { useNavigate: jest.Mock } = jest.requireMock(
'react-router-dom',
);
const createAuditResponse = data as Audit;
@@ -115,7 +115,7 @@ describe('CreateAudit', () => {
describe('when the audit is successfully created', () => {
it('triggers a location change to the table', async () => {
- useHistory().push.mockClear();
+ useNavigate().push.mockClear();
mockFetch.mockResponseOnce(JSON.stringify(createAuditResponse));
const rendered = render(
@@ -140,7 +140,7 @@ describe('CreateAudit', () => {
await wait(() => expect(rendered.getByLabelText(/URL/)).toBeEnabled());
- expect(useHistory().push).toHaveBeenCalledWith('/lighthouse');
+ expect(useNavigate().push).toHaveBeenCalledWith('/lighthouse');
});
});
diff --git a/plugins/lighthouse/src/components/CreateAudit/index.tsx b/plugins/lighthouse/src/components/CreateAudit/index.tsx
index 55ae99d1db..4c7570221c 100644
--- a/plugins/lighthouse/src/components/CreateAudit/index.tsx
+++ b/plugins/lighthouse/src/components/CreateAudit/index.tsx
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import React, { useState, useCallback, FC } from 'react';
-import { useHistory } from 'react-router-dom';
+import { useNavigate } from 'react-router-dom';
import {
makeStyles,
Grid,
@@ -40,7 +40,7 @@ import { lighthouseApiRef } from '../../api';
import { useQuery } from '../../utils';
import LighthouseSupportButton from '../SupportButton';
-const useStyles = makeStyles((theme) => ({
+const useStyles = makeStyles(theme => ({
input: {
minWidth: 300,
},
@@ -58,7 +58,7 @@ const CreateAudit: FC<{}> = () => {
const lighthouseApi = useApi(lighthouseApiRef);
const classes = useStyles();
const query = useQuery();
- const history = useHistory();
+ const history = useNavigate();
const [submitting, setSubmitting] = useState(false);
const [url, setUrl] = useState(query.get('url') || '');
const [emulatedFormFactor, setEmulatedFormFactor] = useState('mobile');
@@ -113,7 +113,7 @@ const CreateAudit: FC<{}> = () => {
} />
+ Route 2} />
>,
- { routeEntries: ['/route2'] },
+ { routeEntries: ['/'] },
),
);
- expect(rendered.getByText('Route 2')).toBeInTheDocument();
+ expect(rendered.getByText('Route 2')).toBeInTheDocument();
// Wait for async actions to trigger the act() warnings that we assert below
await Promise.resolve();
});
diff --git a/packages/test-utils/src/testUtils/appWrappers.tsx b/packages/test-utils/src/testUtils/appWrappers.tsx
index ab627f8712..c474678fd1 100644
--- a/packages/test-utils/src/testUtils/appWrappers.tsx
+++ b/packages/test-utils/src/testUtils/appWrappers.tsx
@@ -92,7 +92,9 @@ export function wrapInTestApp(
return (
- } />
+ {/* The path of * here is needed to be set as a catch all, so it will render the wrapper element
+ * and work with nested routes if they exist too */}
+ } />
);
}
diff --git a/plugins/gitops-profiles/src/components/ClusterPage/ClusterPage.tsx b/plugins/gitops-profiles/src/components/ClusterPage/ClusterPage.tsx
index 29559e4fec..d454278255 100644
--- a/plugins/gitops-profiles/src/components/ClusterPage/ClusterPage.tsx
+++ b/plugins/gitops-profiles/src/components/ClusterPage/ClusterPage.tsx
@@ -33,8 +33,7 @@ import { gitOpsApiRef, Status } from '../../api';
import { transformRunStatus } from '../ProfileCatalog';
const ClusterPage: FC<{}> = () => {
- const params = useParams<{ owner: string; repo: string }>();
-
+ const params = useParams() as { owner: string; repo: string };
const [loginInfo] = useLocalStorage<{
token: string;
username: string;
diff --git a/yarn.lock b/yarn.lock
index 2402b971ef..7b7490f5f7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9966,6 +9966,18 @@ history@5.0.0-beta.9:
dependencies:
"@babel/runtime" "^7.7.6"
+history@^4.9.0:
+ version "4.10.1"
+ resolved "https://registry.npmjs.org/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3"
+ integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
+ loose-envify "^1.2.0"
+ resolve-pathname "^3.0.0"
+ tiny-invariant "^1.0.2"
+ tiny-warning "^1.0.0"
+ value-equal "^1.0.1"
+
hmac-drbg@^1.0.0:
version "1.0.1"
resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
@@ -9975,7 +9987,7 @@ hmac-drbg@^1.0.0:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
-hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2:
+hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2:
version "3.3.2"
resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
@@ -11118,6 +11130,11 @@ is-yarn-global@^0.3.0:
resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"
integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
@@ -12430,7 +12447,7 @@ loglevel@^1.6.8:
resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171"
integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==
-loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.0, loose-envify@^1.4.0:
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -12880,6 +12897,14 @@ min-indent@^1.0.0:
resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz#cfc45c37e9ec0d8f0a0ec3dd4ef7f7c3abe39256"
integrity sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=
+mini-create-react-context@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz#df60501c83151db69e28eac0ef08b4002efab040"
+ integrity sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ tiny-warning "^1.0.3"
+
mini-css-extract-plugin@^0.7.0:
version "0.7.0"
resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.7.0.tgz#5ba8290fbb4179a43dd27cca444ba150bee743a0"
@@ -14244,6 +14269,13 @@ path-to-regexp@0.1.7:
resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+path-to-regexp@^1.7.0:
+ version "1.8.0"
+ resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a"
+ integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==
+ dependencies:
+ isarray "0.0.1"
+
path-type@^1.0.0:
version "1.1.0"
resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
@@ -15466,7 +15498,7 @@ react-inspector@^4.0.0:
is-dom "^1.0.9"
prop-types "^15.6.1"
-react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0:
+react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0:
version "16.13.1"
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@@ -15545,6 +15577,35 @@ react-router-dom@6.0.0-alpha.5, react-router-dom@^6.0.0-alpha.5:
history "5.0.0-beta.9"
prop-types "^15.7.2"
+react-router-dom@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662"
+ integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
+ history "^4.9.0"
+ loose-envify "^1.3.1"
+ prop-types "^15.6.2"
+ react-router "5.2.0"
+ tiny-invariant "^1.0.2"
+ tiny-warning "^1.0.0"
+
+react-router@5.2.0:
+ version "5.2.0"
+ resolved "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293"
+ integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
+ history "^4.9.0"
+ hoist-non-react-statics "^3.1.0"
+ loose-envify "^1.3.1"
+ mini-create-react-context "^0.4.0"
+ path-to-regexp "^1.7.0"
+ prop-types "^15.6.2"
+ react-is "^16.6.0"
+ tiny-invariant "^1.0.2"
+ tiny-warning "^1.0.0"
+
react-router@6.0.0-alpha.5, react-router@^6.0.0-alpha.5:
version "6.0.0-alpha.5"
resolved "https://registry.npmjs.org/react-router/-/react-router-6.0.0-alpha.5.tgz#c98805e50dc0e64787aa8aa4fa6753b435f2496b"
@@ -16168,6 +16229,11 @@ resolve-from@^4.0.0:
resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+resolve-pathname@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
+ integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==
+
resolve-url@^0.2.1:
version "0.2.1"
resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
@@ -17934,12 +18000,12 @@ tiny-emitter@^2.0.0:
resolved "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
-tiny-invariant@^1.0.4, tiny-invariant@^1.0.6:
+tiny-invariant@^1.0.2, tiny-invariant@^1.0.4, tiny-invariant@^1.0.6:
version "1.1.0"
resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875"
integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==
-tiny-warning@^1.0.2:
+tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
@@ -18731,6 +18797,11 @@ validate-npm-package-name@^3.0.0:
dependencies:
builtins "^1.0.3"
+value-equal@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c"
+ integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==
+
vary@^1, vary@~1.1.2:
version "1.1.2"
resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
From da493b1fc9f412b453dda0e330571be87ac79d3b Mon Sep 17 00:00:00 2001
From: blam
Date: Thu, 11 Jun 2020 19:12:58 +0200
Subject: [PATCH 08/16] chore(react-router-v6): revert paralell for tests, as
my computer stared over 9000 node processes making my machine grind to a
machine babbage would have disapointed with
---
package.json | 2 +-
packages/core-api/src/app/App.tsx | 4 +---
.../core/src/components/Button/Button.test.jsx | 15 +++++++--------
packages/core/src/components/Link/Link.test.jsx | 7 ++++---
.../lighthouse/src/components/AuditView/index.tsx | 2 +-
5 files changed, 14 insertions(+), 16 deletions(-)
diff --git a/package.json b/package.json
index 5c45c4e17e..437ce36c4b 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
"tsc": "tsc",
"clean": "backstage-cli clean && lerna run clean",
"diff": "lerna run diff --",
- "test": "lerna run test --since origin/master --parallel -- --coverage",
+ "test": "lerna run test --since origin/master -- --coverage",
"test:all": "lerna run test -- --coverage",
"lint": "lerna run lint --since origin/master --",
"lint:all": "lerna run lint --",
diff --git a/packages/core-api/src/app/App.tsx b/packages/core-api/src/app/App.tsx
index c408303205..3f77d826ae 100644
--- a/packages/core-api/src/app/App.tsx
+++ b/packages/core-api/src/app/App.tsx
@@ -191,9 +191,7 @@ export class PrivateAppImpl implements BackstageApp {
-
- {children}
-
+ {children}
diff --git a/packages/core/src/components/Button/Button.test.jsx b/packages/core/src/components/Button/Button.test.jsx
index 2563d367c2..bf057e4261 100644
--- a/packages/core/src/components/Button/Button.test.jsx
+++ b/packages/core/src/components/Button/Button.test.jsx
@@ -15,26 +15,25 @@
*/
import React from 'react';
-import { render, fireEvent } from '@testing-library/react';
+import { render, fireEvent, act } from '@testing-library/react';
import { wrapInTestApp } from '@backstage/test-utils';
import { Button } from './Button';
-import { MemoryRouter, Route } from 'react-router';
-import { act } from 'react-dom/test-utils';
+import { Route } from 'react-router';
describe('', () => {
it('navigates using react-router', async () => {
const testString = 'This is test string';
const buttonLabel = 'Navigate!';
- const { getByText } = render(
+ const { getByText, getByRole } = render(
wrapInTestApp(
-
+ <>
+ {testString}} />
- {testString}{' '}
- ,
+ >,
),
);
expect(() => getByText(testString)).toThrow();
- await act(async () => fireEvent.click(getByText(buttonLabel)));
+ await act(async () => fireEvent.click(getByRole('button')));
expect(getByText(testString)).toBeInTheDocument();
});
});
diff --git a/packages/core/src/components/Link/Link.test.jsx b/packages/core/src/components/Link/Link.test.jsx
index fcbc92a67a..c35cdfdbe6 100644
--- a/packages/core/src/components/Link/Link.test.jsx
+++ b/packages/core/src/components/Link/Link.test.jsx
@@ -18,7 +18,7 @@ import React from 'react';
import { render, fireEvent } from '@testing-library/react';
import { wrapInTestApp } from '@backstage/test-utils';
import { Link } from './Link';
-import { MemoryRouter, Route } from 'react-router';
+import { Route } from 'react-router';
import { act } from 'react-dom/test-utils';
describe('', () => {
@@ -27,14 +27,15 @@ describe('', () => {
const linkText = 'Navigate!';
const { getByText } = render(
wrapInTestApp(
-
+ <>
{linkText}
{testString}
- ,
+ >,
),
);
expect(() => getByText(testString)).toThrow();
await act(async () => fireEvent.click(getByText(linkText)));
+
expect(getByText(testString)).toBeInTheDocument();
});
});
diff --git a/plugins/lighthouse/src/components/AuditView/index.tsx b/plugins/lighthouse/src/components/AuditView/index.tsx
index af7636cf59..06ab812cf4 100644
--- a/plugins/lighthouse/src/components/AuditView/index.tsx
+++ b/plugins/lighthouse/src/components/AuditView/index.tsx
@@ -18,7 +18,6 @@ import { Link, useParams } from 'react-router-dom';
import { useAsync } from 'react-use';
import {
makeStyles,
- Button,
Grid,
List,
ListItem,
@@ -33,6 +32,7 @@ import {
Header,
Page,
Content,
+ Button,
ContentHeader,
HeaderLabel,
Progress,
From 47766635b67c52be748d68aa1631780fa5388142 Mon Sep 17 00:00:00 2001
From: blam
Date: Thu, 11 Jun 2020 20:20:58 +0200
Subject: [PATCH 09/16] chore(react-router-v6): Fixing navigation in the
lighthouse plugin
---
.../src/components/AuditList/index.test.tsx | 12 ++++--------
.../lighthouse/src/components/AuditView/index.tsx | 2 +-
.../src/components/CreateAudit/index.test.tsx | 11 ++++-------
3 files changed, 9 insertions(+), 16 deletions(-)
diff --git a/plugins/lighthouse/src/components/AuditList/index.test.tsx b/plugins/lighthouse/src/components/AuditList/index.test.tsx
index 612bed4635..076bb5819a 100644
--- a/plugins/lighthouse/src/components/AuditList/index.test.tsx
+++ b/plugins/lighthouse/src/components/AuditList/index.test.tsx
@@ -16,13 +16,10 @@
jest.mock('react-router-dom', () => {
const actual = jest.requireActual('react-router-dom');
- const mocks = {
- replace: jest.fn(),
- push: jest.fn(),
- };
+ const mockNavigation = jest.fn();
return {
...actual,
- useNavigate: jest.fn(() => mocks),
+ useNavigate: jest.fn(() => mockNavigation),
};
});
@@ -145,9 +142,8 @@ describe('AuditList', () => {
);
const element = await rendered.findByLabelText(/Go to page 1/);
fireEvent.click(element);
- expect(useNavigate().replace).toHaveBeenCalledWith(
- `/lighthouse?page=1`,
- );
+
+ expect(useNavigate()).toHaveBeenCalledWith(`/lighthouse?page=1`);
});
});
});
diff --git a/plugins/lighthouse/src/components/AuditView/index.tsx b/plugins/lighthouse/src/components/AuditView/index.tsx
index 06ab812cf4..d323b1a005 100644
--- a/plugins/lighthouse/src/components/AuditView/index.tsx
+++ b/plugins/lighthouse/src/components/AuditView/index.tsx
@@ -21,6 +21,7 @@ import {
Grid,
List,
ListItem,
+ Button,
ListItemIcon,
ListItemText,
} from '@material-ui/core';
@@ -32,7 +33,6 @@ import {
Header,
Page,
Content,
- Button,
ContentHeader,
HeaderLabel,
Progress,
diff --git a/plugins/lighthouse/src/components/CreateAudit/index.test.tsx b/plugins/lighthouse/src/components/CreateAudit/index.test.tsx
index 39c109788f..ee0404fc22 100644
--- a/plugins/lighthouse/src/components/CreateAudit/index.test.tsx
+++ b/plugins/lighthouse/src/components/CreateAudit/index.test.tsx
@@ -16,13 +16,10 @@
jest.mock('react-router-dom', () => {
const actual = jest.requireActual('react-router-dom');
- const mocks = {
- replace: jest.fn(),
- push: jest.fn(),
- };
+ const mockNavigate = jest.fn();
return {
...actual,
- useNavigate: jest.fn(() => mocks),
+ useNavigate: jest.fn(() => mockNavigate),
};
});
@@ -115,7 +112,7 @@ describe('CreateAudit', () => {
describe('when the audit is successfully created', () => {
it('triggers a location change to the table', async () => {
- useNavigate().push.mockClear();
+ useNavigate.mockClear();
mockFetch.mockResponseOnce(JSON.stringify(createAuditResponse));
const rendered = render(
@@ -140,7 +137,7 @@ describe('CreateAudit', () => {
await wait(() => expect(rendered.getByLabelText(/URL/)).toBeEnabled());
- expect(useNavigate().push).toHaveBeenCalledWith('/lighthouse');
+ expect(useNavigate()).toHaveBeenCalledWith('/lighthouse');
});
});
From 273db0314a771df699b8e3d95ccd30ffc83ef8df Mon Sep 17 00:00:00 2001
From: blam
Date: Thu, 11 Jun 2020 20:35:48 +0200
Subject: [PATCH 10/16] chore(react-router-v6): Managed to get the Link +
Button components working as expected
---
packages/core/src/components/Button/Button.test.jsx | 9 +++++----
packages/core/src/components/Link/Link.test.jsx | 6 +++---
packages/core/src/components/Link/Link.tsx | 2 +-
3 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/packages/core/src/components/Button/Button.test.jsx b/packages/core/src/components/Button/Button.test.jsx
index bf057e4261..5750f84101 100644
--- a/packages/core/src/components/Button/Button.test.jsx
+++ b/packages/core/src/components/Button/Button.test.jsx
@@ -18,20 +18,21 @@ import React from 'react';
import { render, fireEvent, act } from '@testing-library/react';
import { wrapInTestApp } from '@backstage/test-utils';
import { Button } from './Button';
-import { Route } from 'react-router';
+import { Route, Routes } from 'react-router';
describe('', () => {
it('navigates using react-router', async () => {
const testString = 'This is test string';
const buttonLabel = 'Navigate!';
- const { getByText, getByRole } = render(
+ const { getByText, getByRole, ...all } = render(
wrapInTestApp(
- <>
+
{testString}} />
- >,
+ ,
),
);
+
expect(() => getByText(testString)).toThrow();
await act(async () => fireEvent.click(getByRole('button')));
expect(getByText(testString)).toBeInTheDocument();
diff --git a/packages/core/src/components/Link/Link.test.jsx b/packages/core/src/components/Link/Link.test.jsx
index c35cdfdbe6..bc279d2fd6 100644
--- a/packages/core/src/components/Link/Link.test.jsx
+++ b/packages/core/src/components/Link/Link.test.jsx
@@ -18,7 +18,7 @@ import React from 'react';
import { render, fireEvent } from '@testing-library/react';
import { wrapInTestApp } from '@backstage/test-utils';
import { Link } from './Link';
-import { Route } from 'react-router';
+import { Route, Routes } from 'react-router';
import { act } from 'react-dom/test-utils';
describe('', () => {
@@ -27,10 +27,10 @@ describe('', () => {
const linkText = 'Navigate!';
const { getByText } = render(
wrapInTestApp(
- <>
+
{linkText}
{testString}
- >,
+ ,
),
);
expect(() => getByText(testString)).toThrow();
diff --git a/packages/core/src/components/Link/Link.tsx b/packages/core/src/components/Link/Link.tsx
index 8d800aadcd..ebcc2819d9 100644
--- a/packages/core/src/components/Link/Link.tsx
+++ b/packages/core/src/components/Link/Link.tsx
@@ -26,5 +26,5 @@ type Props = ComponentProps &
* Makes the Link to utilise react-router
*/
export const Link = React.forwardRef((props, ref) => (
-
+
));
From 0cd9a8a7d4573e130b4f9a4f7fb3fce602323716 Mon Sep 17 00:00:00 2001
From: blam
Date: Thu, 11 Jun 2020 20:42:39 +0200
Subject: [PATCH 11/16] chore(react-router-v6): tidy up parts of the PR i
wasn't happy with
---
packages/core/src/components/Button/Button.test.jsx | 4 ++--
packages/test-utils/src/testUtils/appWrappers.test.tsx | 8 ++++----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/packages/core/src/components/Button/Button.test.jsx b/packages/core/src/components/Button/Button.test.jsx
index 5750f84101..115835be3f 100644
--- a/packages/core/src/components/Button/Button.test.jsx
+++ b/packages/core/src/components/Button/Button.test.jsx
@@ -24,7 +24,7 @@ describe('', () => {
it('navigates using react-router', async () => {
const testString = 'This is test string';
const buttonLabel = 'Navigate!';
- const { getByText, getByRole, ...all } = render(
+ const { getByText } = render(
wrapInTestApp(
{testString}} />
@@ -34,7 +34,7 @@ describe('', () => {
);
expect(() => getByText(testString)).toThrow();
- await act(async () => fireEvent.click(getByRole('button')));
+ await act(async () => fireEvent.click(getByText(buttonLabel)));
expect(getByText(testString)).toBeInTheDocument();
});
});
diff --git a/packages/test-utils/src/testUtils/appWrappers.test.tsx b/packages/test-utils/src/testUtils/appWrappers.test.tsx
index 75fcbe4e04..19c02c2158 100644
--- a/packages/test-utils/src/testUtils/appWrappers.test.tsx
+++ b/packages/test-utils/src/testUtils/appWrappers.test.tsx
@@ -17,7 +17,7 @@
import React, { FC, useEffect } from 'react';
import { render } from '@testing-library/react';
import { wrapInTestApp, renderInTestApp } from './appWrappers';
-import { Route } from 'react-router';
+import { Route, Routes } from 'react-router';
import { withLogCollector } from '@backstage/test-utils-core';
import {
useApi,
@@ -32,11 +32,11 @@ describe('wrapInTestApp', () => {
const { error } = await withLogCollector(['error'], async () => {
const rendered = render(
wrapInTestApp(
- <>
+
Route 1} />
Route 2} />
- >,
- { routeEntries: ['/'] },
+ ,
+ { routeEntries: ['/route2'] },
),
);
From acfe3103dc031a4f8f763d080b0bd83849129c46 Mon Sep 17 00:00:00 2001
From: blam
Date: Thu, 11 Jun 2020 21:03:04 +0200
Subject: [PATCH 12/16] chore(react-router-v6): fixing broken test with the new
router pattern
---
packages/core/src/components/Link/Link.test.jsx | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/packages/core/src/components/Link/Link.test.jsx b/packages/core/src/components/Link/Link.test.jsx
index bc279d2fd6..4bb78ef6d4 100644
--- a/packages/core/src/components/Link/Link.test.jsx
+++ b/packages/core/src/components/Link/Link.test.jsx
@@ -29,13 +29,12 @@ describe('', () => {
wrapInTestApp(
{linkText}
- {testString}
+ {testString}} />
,
),
);
expect(() => getByText(testString)).toThrow();
await act(async () => fireEvent.click(getByText(linkText)));
-
expect(getByText(testString)).toBeInTheDocument();
});
});
From 6f80d1b9bb02cd6cf2fad8c87db1579b85e6d3b0 Mon Sep 17 00:00:00 2001
From: blam
Date: Thu, 11 Jun 2020 21:31:02 +0200
Subject: [PATCH 13/16] chore(react-router-v6): Fixing what I think is the last
of the routing for the application
---
.../components/EntityPage/EntityPage.test.tsx | 42 ++++++++++---------
.../src/components/EntityPage/EntityPage.tsx | 30 +++++--------
2 files changed, 34 insertions(+), 38 deletions(-)
diff --git a/plugins/catalog/src/components/EntityPage/EntityPage.test.tsx b/plugins/catalog/src/components/EntityPage/EntityPage.test.tsx
index 22a47c192e..aeb9fc543b 100644
--- a/plugins/catalog/src/components/EntityPage/EntityPage.test.tsx
+++ b/plugins/catalog/src/components/EntityPage/EntityPage.test.tsx
@@ -14,32 +14,38 @@
* limitations under the License.
*/
+jest.mock('react-router-dom', () => {
+ const actual = jest.requireActual('react-router-dom');
+ const mockNavigate = jest.fn();
+ return {
+ ...actual,
+ useNavigate: jest.fn(() => mockNavigate),
+ useParams: jest.fn(),
+ };
+});
+
import { ApiProvider, ApiRegistry, errorApiRef } from '@backstage/core';
import { wrapInTestApp } from '@backstage/test-utils';
import { render, wait } from '@testing-library/react';
import * as React from 'react';
import { CatalogApi, catalogApiRef } from '../../api/types';
import { EntityPage } from './EntityPage';
-
-const getTestProps = (name: string) => {
- return {
- match: {
- params: {
- optionalNamespaceAndName: name,
- kind: 'Component',
- },
- },
- history: {
- push: jest.fn(),
- },
- };
-};
+const {
+ useParams,
+ useNavigate,
+}: { useParams: jest.Mock; useNavigate: () => jest.Mock } = jest.requireMock(
+ 'react-router-dom',
+);
const errorApi = { post: () => {} };
describe('EntityPage', () => {
it('should redirect to catalog page when name is not provided', async () => {
- const props = getTestProps('');
+ useParams.mockReturnValue({
+ kind: 'Component',
+ optionalNamespaceAndName: '',
+ });
+
render(
wrapInTestApp(
{
],
])}
>
-
+
,
),
);
- await wait(() =>
- expect(props.history.push).toHaveBeenCalledWith('/catalog'),
- );
+ await wait(() => expect(useNavigate()).toHaveBeenCalledWith('/catalog'));
});
});
diff --git a/plugins/catalog/src/components/EntityPage/EntityPage.tsx b/plugins/catalog/src/components/EntityPage/EntityPage.tsx
index 96132819e8..e74276697b 100644
--- a/plugins/catalog/src/components/EntityPage/EntityPage.tsx
+++ b/plugins/catalog/src/components/EntityPage/EntityPage.tsx
@@ -34,21 +34,9 @@ import { catalogApiRef } from '../..';
import { EntityContextMenu } from '../EntityContextMenu/EntityContextMenu';
import { EntityMetadataCard } from '../EntityMetadataCard/EntityMetadataCard';
import { UnregisterEntityDialog } from '../UnregisterEntityDialog/UnregisterEntityDialog';
+import { useParams, useNavigate } from 'react-router-dom';
const REDIRECT_DELAY = 1000;
-
-type Props = {
- match: {
- params: {
- optionalNamespaceAndName: string;
- kind: string;
- };
- };
- history: {
- push: (url: string) => void;
- };
-};
-
function headerProps(
kind: string,
namespace: string | undefined,
@@ -68,8 +56,12 @@ function headerProps(
};
}
-export const EntityPage: FC = ({ match, history }) => {
- const { optionalNamespaceAndName, kind } = match.params;
+export const EntityPage: FC<{}> = () => {
+ const { optionalNamespaceAndName, kind } = useParams() as {
+ optionalNamespaceAndName: string;
+ kind: string;
+ };
+ const navigate = useNavigate();
const [name, namespace] = optionalNamespaceAndName.split(':').reverse();
const errorApi = useApi(errorApiRef);
@@ -85,19 +77,19 @@ export const EntityPage: FC = ({ match, history }) => {
if (!error && !loading && !entity) {
errorApi.post(new Error('Entity not found!'));
setTimeout(() => {
- history.push('/');
+ navigate('/');
}, REDIRECT_DELAY);
}
- }, [errorApi, history, error, loading, entity]);
+ }, [errorApi, navigate, error, loading, entity]);
if (!name) {
- history.push('/catalog');
+ navigate('/catalog');
return null;
}
const cleanUpAfterRemoval = async () => {
setConfirmationDialogOpen(false);
- history.push('/');
+ navigate('/');
};
const showRemovalDialog = () => setConfirmationDialogOpen(true);
From 22e411df3b167ab2ec3cb7b0f5de469b9e708870 Mon Sep 17 00:00:00 2001
From: blam
Date: Thu, 11 Jun 2020 21:48:07 +0200
Subject: [PATCH 14/16] chore(react-router-v6): fixing the comment
---
packages/core/src/components/Button/Button.tsx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/core/src/components/Button/Button.tsx b/packages/core/src/components/Button/Button.tsx
index 39ecc3401e..ca45b3da7f 100644
--- a/packages/core/src/components/Button/Button.tsx
+++ b/packages/core/src/components/Button/Button.tsx
@@ -22,8 +22,8 @@ type Props = ComponentProps &
ComponentProps;
/**
- * Thin wrapper on top of material-ui's Link component
- * Makes the Link to utilise react-router
+ * Thin wrapper on top of material-ui's Button component
+ * Makes the Button to utilise react-router
*/
export const Button = React.forwardRef((props, ref) => (
From 2d543b9a3a9a98c72c87b897dacae0b54d6df355 Mon Sep 17 00:00:00 2001
From: blam
Date: Fri, 12 Jun 2020 02:24:53 +0200
Subject: [PATCH 15/16] chore(react-router-v6): reverting an old story
---
packages/core/src/components/Link/Link.stories.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/core/src/components/Link/Link.stories.tsx b/packages/core/src/components/Link/Link.stories.tsx
index ce09f5c9d0..2bd499fa33 100644
--- a/packages/core/src/components/Link/Link.stories.tsx
+++ b/packages/core/src/components/Link/Link.stories.tsx
@@ -73,7 +73,7 @@ export const PassProps = () => {
From 6a64ed933f17f7b392ff3ccc6e303976e50ea1bc Mon Sep 17 00:00:00 2001
From: blam
Date: Fri, 12 Jun 2020 02:44:10 +0200
Subject: [PATCH 16/16] chore(react-router-v6): quick fix for some type
problems
---
packages/core/src/components/Link/Link.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/core/src/components/Link/Link.tsx b/packages/core/src/components/Link/Link.tsx
index ebcc2819d9..8e7e3f179e 100644
--- a/packages/core/src/components/Link/Link.tsx
+++ b/packages/core/src/components/Link/Link.tsx
@@ -19,7 +19,7 @@ import { Link as MaterialLink } from '@material-ui/core';
import { Link as RouterLink } from 'react-router-dom';
type Props = ComponentProps &
- ComponentProps & { as?: React.FC };
+ ComponentProps & { component?: React.FC };
/**
* Thin wrapper on top of material-ui's Link component