Merge branch 'master' into mcalus3/enable-pending-locations-for-repo-importing

This commit is contained in:
Marek Calus
2020-10-22 09:30:03 +02:00
23 changed files with 487 additions and 26 deletions
@@ -15,6 +15,7 @@
*/
import { JsonObject } from '@backstage/config';
import { EntityName } from '../types';
/**
* The format envelope that's common to all versions/kinds of entity.
@@ -42,6 +43,11 @@ export type Entity = {
* The specification data describing the entity itself.
*/
spec?: JsonObject;
/**
* The relations that this entity has with other entities.
*/
relations?: EntityRelation[];
};
/**
@@ -120,3 +126,37 @@ export type EntityMeta = JsonObject & {
*/
tags?: string[];
};
/**
* A relation of a specific type to another entity in the catalog.
*/
export type EntityRelation = {
/**
* The type of the relation.
*/
type: string;
/**
* The target entity of this relation.
*/
target: EntityName;
};
/**
* Holds the relationship data for entities
*/
export type EntityRelationSpec = {
/**
* The source entity of this relation.
*/
source: EntityName;
/**
* The type of the relation.
*/
type: string;
/**
* The target entity of this relation.
*/
target: EntityName;
};
+6 -1
View File
@@ -18,7 +18,12 @@ export {
ENTITY_DEFAULT_NAMESPACE,
ENTITY_META_GENERATED_FIELDS,
} from './constants';
export type { Entity, EntityMeta } from './Entity';
export type {
Entity,
EntityMeta,
EntityRelation,
EntityRelationSpec,
} from './Entity';
export * from './policies';
export {
getEntityName,
@@ -24,7 +24,7 @@ export default {
export const Default = () => (
<Grid container spacing={4}>
<Grid item xs={3}>
<Grid item xs={12} md={3}>
<ItemCard
title="Item Card"
description="This is the description of an Item Card"
@@ -33,7 +33,7 @@ export const Default = () => (
onClick={() => {}}
/>
</Grid>
<Grid item xs={3}>
<Grid item xs={12} md={3}>
<ItemCard
title="Item Card"
description="This is the description of an Item Card"
@@ -47,18 +47,18 @@ export const Default = () => (
export const Tags = () => (
<Grid container spacing={4}>
<Grid item xs={3}>
<Grid item xs={12} md={3}>
<ItemCard
title="Item Card"
description="This is a Item Card"
tags={['one tag', 'two tag']}
description="This is the description of an Item Card with Tags"
tags={['one tag', 'one tag']}
label="Button"
/>
</Grid>
<Grid item xs={3}>
<Grid item xs={12} md={3}>
<ItemCard
title="Item Card"
description="This is a Item Card"
description="This is the description of an Item Card with Tags"
tags={['one tag', 'two tag']}
label="Button"
/>
@@ -0,0 +1,51 @@
/*
* Copyright 2020 Spotify AB
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { renderInTestApp } from '@backstage/test-utils';
import { ItemCard } from './ItemCard';
const minProps = {
description: 'This is the description of an Item Card',
label: 'Button',
title: 'Item Card',
type: 'Pretitle',
};
describe('<InfoCard />', () => {
it('renders default without exploding', async () => {
const { description, label, title, type } = minProps;
const { getByText } = await renderInTestApp(<ItemCard {...minProps} />);
expect(getByText(description)).toBeInTheDocument();
expect(getByText(title)).toBeInTheDocument();
expect(getByText(label)).toBeInTheDocument();
expect(getByText(type)).toBeInTheDocument();
});
it('renders with tags without exploding', async () => {
const { description, label, title } = minProps;
const tags = ['tag one', 'tag two'];
const { getByText } = await renderInTestApp(
<ItemCard {...minProps} tags={tags} />,
);
expect(getByText(description)).toBeInTheDocument();
expect(getByText(title)).toBeInTheDocument();
expect(getByText(label)).toBeInTheDocument();
tags.forEach(tag => {
expect(getByText(tag)).toBeInTheDocument();
});
});
});
@@ -61,8 +61,8 @@ export const ItemCard: FC<ItemCardProps> = ({
<Typography variant="h6">{title}</Typography>
</div>
<div className={classes.content}>
{tags?.map(tag => (
<Chip label={tag} key={tag} />
{tags?.map((tag, i) => (
<Chip label={tag} key={`tag-${i}`} />
))}
<Typography variant="body2" paragraph className={classes.description}>
{description}
@@ -118,14 +118,14 @@ const DataGrid = () => (
justify="space-between"
direction="row"
>
<Grid item xs={6}>
<Grid item xs={12} md={6}>
<GaugeCard
title="GKE Usage Score"
subheader="This should be above 75%"
progress={0.87}
/>
</Grid>
<Grid item xs={6}>
<Grid item xs={12} md={6}>
<GaugeCard
title="Deployment Score"
subheader="This should be above 40%"
@@ -174,7 +174,7 @@ const DataGrid = () => (
);
const ExampleHeader = () => (
<Header title="Example" subtitle="This an example plugin">
<Header title="Example" subtitle="This is an example plugin">
<HeaderLabel label="Owner" value="Owner" />
<HeaderLabel label="Lifecycle" value="Lifecycle" />
</Header>