From 5d5fdbe541a41f2d961d3b4aebf0ca2cbc6c054e Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Sat, 26 Mar 2022 20:29:34 +0000 Subject: [PATCH] Updated Columns in Catalog Table Updated columns in the catalog table view to vary columns based on entity kind. Specifically excluding columns that aren't supported by that entity kind. Signed-off-by: Alex Crome --- .changeset/poor-knives-boil.md | 6 +++ .../components/CatalogTable/CatalogTable.tsx | 52 +++++++++++++++---- 2 files changed, 49 insertions(+), 9 deletions(-) create mode 100644 .changeset/poor-knives-boil.md diff --git a/.changeset/poor-knives-boil.md b/.changeset/poor-knives-boil.md new file mode 100644 index 0000000000..08d3534eb6 --- /dev/null +++ b/.changeset/poor-knives-boil.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog': minor +'@backstage/plugin-catalog-react': minor +--- + +Columns in CatalogTable now change depending on the entity kind, ensuring only relevant columns are displayed. diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx index 9d59d57647..addd2af7ec 100644 --- a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx +++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx @@ -64,18 +64,52 @@ export const CatalogTable = (props: CatalogTableProps) => { const { isStarredEntity, toggleStarredEntity } = useStarredEntities(); const { loading, error, entities, filters } = useEntityList(); - const defaultColumns: TableColumn[] = useMemo( - () => [ + const defaultColumns: TableColumn[] = useMemo(() => { + return [ columnFactories.createNameColumn({ defaultKind: filters.kind?.value }), - columnFactories.createSystemColumn(), - columnFactories.createOwnerColumn(), - columnFactories.createSpecTypeColumn(), - columnFactories.createSpecLifecycleColumn(), + ...createEntitySpecificColumns(), columnFactories.createMetadataDescriptionColumn(), columnFactories.createTagsColumn(), - ], - [filters.kind?.value], - ); + ]; + + function createEntitySpecificColumns(): TableColumn[] { + switch (filters.kind?.value) { + case 'api': + return [ + columnFactories.createSystemColumn(), + columnFactories.createOwnerColumn(), + columnFactories.createSpecTypeColumn(), + columnFactories.createSpecLifecycleColumn(), + ]; + case 'component': + return [ + columnFactories.createSystemColumn(), + columnFactories.createOwnerColumn(), + columnFactories.createSpecTypeColumn(), + columnFactories.createSpecLifecycleColumn(), + ]; + case 'domain': + return [columnFactories.createOwnerColumn()]; + case 'group': + return [columnFactories.createSpecTypeColumn()]; + case 'location': + return [columnFactories.createSpecTypeColumn()]; + case 'resource': + return [ + columnFactories.createSystemColumn(), + columnFactories.createOwnerColumn(), + columnFactories.createSpecTypeColumn(), + columnFactories.createSpecLifecycleColumn(), + ]; + case 'system': + return [columnFactories.createOwnerColumn()]; + case 'template': + return [columnFactories.createSpecTypeColumn()]; + default: + return []; + } + } + }, [filters.kind?.value]); const showTypeColumn = filters.type === undefined; // TODO(timbonicus): remove the title from the CatalogTable once using EntitySearchBar