From 4aa3116476c80bcf8eadbdad6e39b8703c46a666 Mon Sep 17 00:00:00 2001 From: Ivan Shmidt Date: Wed, 17 Jun 2020 21:21:32 +0200 Subject: [PATCH] feat(scaffolder): load data from catalog api --- plugins/scaffolder/package.json | 2 + .../src/components/ScaffolderPage/index.tsx | 79 +++++++++++-------- .../src/components/TemplateCard.tsx | 2 +- 3 files changed, 47 insertions(+), 36 deletions(-) diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 65322c31d6..3883dfb972 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -23,6 +23,8 @@ "dependencies": { "@backstage/core": "^0.1.1-alpha.12", "@backstage/theme": "^0.1.1-alpha.12", + "@backstage/catalog-model": "^0.1.1-alpha.12", + "@backstage/plugin-catalog": "^0.1.1-alpha.12", "@material-ui/core": "^4.9.1", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", diff --git a/plugins/scaffolder/src/components/ScaffolderPage/index.tsx b/plugins/scaffolder/src/components/ScaffolderPage/index.tsx index d675b59f52..1dbd993d93 100644 --- a/plugins/scaffolder/src/components/ScaffolderPage/index.tsx +++ b/plugins/scaffolder/src/components/ScaffolderPage/index.tsx @@ -23,33 +23,38 @@ import { SupportButton, Page, pageTheme, + useApi, } from '@backstage/core'; -import { Button, Grid, Link, Typography } from '@material-ui/core'; +import { catalogApiRef } from '@backstage/plugin-catalog'; +import { + Typography, + Link, + Button, + Grid, + LinearProgress, +} from '@material-ui/core'; import { Link as RouterLink } from 'react-router-dom'; import TemplateCard from '../TemplateCard'; +import { useAsync } from 'react-use'; +import { TemplateEntityV1alpha1 } from '@backstage/catalog-model'; -// TODO(blam): Connect to backend -const STATIC_DATA = [ - { - id: 'springboot-template', - type: 'service', - name: 'Spring Boot Service', - tags: ['Recommended', 'Java'], - description: - 'Standard Spring Boot (Java) microservice with recommended configuration.', - ownerId: 'spotify', - }, - { - id: 'react-ssr-template', - type: 'website', - name: 'SSR React Website', - tags: ['Recommended', 'React'], - description: - 'Next.js application skeleton for creating isomorphic web applications.', - ownerId: 'spotify', - }, -]; const ScaffolderPage: React.FC<{}> = () => { + const catalogApi = useApi(catalogApiRef); + + const { value, loading } = useAsync(async () => { + const entities = await catalogApi.getEntities({ kind: 'Template' }); + return (entities as TemplateEntityV1alpha1[]).map(template => ({ + id: template.metadata.uid, + type: template.spec.type, + name: template.metadata.name, + // TODO(shmidt-i): decide on tags + tags: ['not-implemented'], + description: template.metadata.description ?? '-', + // TODO(shmidt-i): decide on owner + ownerId: '-', + })); + }); + return (
= () => { . - - {STATIC_DATA.map(item => { - return ( - - ); - })} - + {loading ? ( + + ) : ( + + {value!.map(item => { + return ( + + ); + })} + + )} ); diff --git a/plugins/scaffolder/src/components/TemplateCard.tsx b/plugins/scaffolder/src/components/TemplateCard.tsx index 56d8907f7b..618eda64f1 100644 --- a/plugins/scaffolder/src/components/TemplateCard.tsx +++ b/plugins/scaffolder/src/components/TemplateCard.tsx @@ -67,7 +67,7 @@ const TemplateCard: FC = ({
{tags?.map(tag => ( - + ))} {description}