From 08a3033942a6d3516305333b5d9166e377ac3330 Mon Sep 17 00:00:00 2001 From: Ivan Shmidt Date: Mon, 4 May 2020 22:42:48 +0200 Subject: [PATCH] feat: react-router links, some ui edits --- plugins/circleci/package.json | 1 + .../src/components/CITable/CITable.tsx | 54 +++++++++++++------ .../components/CircleCIFetch/CirleCIFetch.tsx | 6 ++- .../components/CircleCIPage/CircleCIPage.tsx | 52 +++++++++++------- .../components/SettingsPage/SettingsPage.tsx | 13 ++--- plugins/circleci/src/plugin.ts | 4 +- 6 files changed, 84 insertions(+), 46 deletions(-) diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 80603f4029..73b10d4fa5 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -30,6 +30,7 @@ "circleci-api": "^4.0.0", "react": "16.13.1", "react-dom": "16.13.1", + "react-router": "^5.1.2", "react-use": "^13.0.0" }, "files": [ diff --git a/plugins/circleci/src/components/CITable/CITable.tsx b/plugins/circleci/src/components/CITable/CITable.tsx index 0e867f8b2c..882f52fbe0 100644 --- a/plugins/circleci/src/components/CITable/CITable.tsx +++ b/plugins/circleci/src/components/CITable/CITable.tsx @@ -1,15 +1,22 @@ // Idea for this component to be somehow reusable representation of CI table view import React, { FC } from 'react'; import { makeStyles } from '@material-ui/core/styles'; -import Table from '@material-ui/core/Table'; -import TableBody from '@material-ui/core/TableBody'; -import TableCell from '@material-ui/core/TableCell'; -import TableContainer from '@material-ui/core/TableContainer'; -import TableHead from '@material-ui/core/TableHead'; -import TableRow from '@material-ui/core/TableRow'; -import Button from '@material-ui/core/Button'; import { - StatusRunning, + Button, + Table, + TableBody, + TableCell, + TableHead, + TableContainer, + TableRow, + Link, + CircularProgress, + List, + ListItem, + ListItemText, +} from '@material-ui/core'; +import { Replay as RetryIcon } from '@material-ui/icons'; +import { StatusFailed, StatusOK, StatusPending, @@ -30,6 +37,7 @@ const useStyles = makeStyles({ export type CITableBuildInfo = { id: string; buildName: string; + buildUrl?: string; source: { branchName: string; commit: { @@ -55,7 +63,7 @@ const getStatusComponent = (status: string) => { case 'scheduled': return ; case 'running': - return ; + return ; case 'failed': return ; case 'success': @@ -79,7 +87,7 @@ export const CITable: FC<{ ID Build Source - Status + Status Tests Actions @@ -88,14 +96,24 @@ export const CITable: FC<{ {builds.map(build => ( {build.id} - {build.buildName} -
-
{build.source.branchName}
-
{build.source.commit.hash}
-
+ + {build.buildName} + +
+ + + + + + + + + + + + {getStatusComponent(build.status)} - {getStatusComponent(build.status)} {build.tests && ( <> @@ -106,7 +124,9 @@ export const CITable: FC<{ )} - +
))} diff --git a/plugins/circleci/src/components/CircleCIFetch/CirleCIFetch.tsx b/plugins/circleci/src/components/CircleCIFetch/CirleCIFetch.tsx index 226b995a72..59c667182f 100644 --- a/plugins/circleci/src/components/CircleCIFetch/CirleCIFetch.tsx +++ b/plugins/circleci/src/components/CircleCIFetch/CirleCIFetch.tsx @@ -54,7 +54,10 @@ const transform = ( return buildsData.map(buildData => { const tableBuildInfo: CITableBuildInfo = { id: String(buildData.build_num), - buildName: buildData.subject ? String(buildData.subject) : '', + buildName: buildData.subject + ? buildData.subject + + (buildData.retry_of ? ` (retry of #${buildData.retry_of})` : '') + : '', onRetryClick: () => api.retry(String(buildData.build_num)), source: { branchName: String(buildData.branch), @@ -64,6 +67,7 @@ const transform = ( }, }, status: makeReadableStatus(buildData.status), + buildUrl: buildData.build_url, tests: { failed: 0, passed: 10, diff --git a/plugins/circleci/src/components/CircleCIPage/CircleCIPage.tsx b/plugins/circleci/src/components/CircleCIPage/CircleCIPage.tsx index a37d5e633d..32812b1ade 100644 --- a/plugins/circleci/src/components/CircleCIPage/CircleCIPage.tsx +++ b/plugins/circleci/src/components/CircleCIPage/CircleCIPage.tsx @@ -15,7 +15,10 @@ */ import React, { FC } from 'react'; +import { Route } from 'react-router'; +import { Link as RouterLink } from 'react-router-dom'; import { Grid, Button } from '@material-ui/core'; +import { Settings as SettingsIcon } from '@material-ui/icons'; import { InfoCard, Header, @@ -27,28 +30,39 @@ import { SupportButton, } from '@backstage/core'; import { CircleCIFetch } from '../CircleCIFetch'; - +import { SettingsPage } from '../SettingsPage'; export const CircleCIPage: FC<{}> = () => { return ( - -
- - -
- - - - A description of your plugin goes here. - - - - - - + <> + + +
+ + +
+ + + + + A description of your plugin goes here. + + + + + + + + -
-
-
+ + + ); }; diff --git a/plugins/circleci/src/components/SettingsPage/SettingsPage.tsx b/plugins/circleci/src/components/SettingsPage/SettingsPage.tsx index ea3c8fb3a6..4c377f090c 100644 --- a/plugins/circleci/src/components/SettingsPage/SettingsPage.tsx +++ b/plugins/circleci/src/components/SettingsPage/SettingsPage.tsx @@ -13,12 +13,12 @@ import { SupportButton, } from '@backstage/core'; import { ProjectInput } from 'components/ProjectInput/ProjectInput'; +import { Link as RouterLink } from 'react-router-dom'; export const SettingsPage = () => { - const [authed, setAuthed] = React.useState(false); - const [token, setToken] = React.useState(''); - const api = useApi(circleCIApiRef); + const [authed, setAuthed] = React.useState(api.authed); + const [token, setToken] = React.useState(''); React.useEffect(() => { api @@ -36,7 +36,9 @@ export const SettingsPage = () => { - + A description of your plugin goes here. @@ -77,8 +79,7 @@ export const SettingsPage = () => { )} - - api.setVCSOptions(info)}/> + api.setVCSOptions(info)} /> diff --git a/plugins/circleci/src/plugin.ts b/plugins/circleci/src/plugin.ts index 458a7f27bc..05d3710d40 100644 --- a/plugins/circleci/src/plugin.ts +++ b/plugins/circleci/src/plugin.ts @@ -15,12 +15,10 @@ */ import { createPlugin } from '@backstage/core'; import { CircleCIPage } from './components/CircleCIPage'; -import { SettingsPage } from './components/SettingsPage'; export const plugin = createPlugin({ id: 'circleci', register({ router }) { - router.registerRoute('/circleci', CircleCIPage); - router.registerRoute('/circleci/settings', SettingsPage); + router.registerRoute('/circleci', CircleCIPage, { exact: false }); }, });