From 18813b80e2574246afe6cf3850c0f70021706d3e Mon Sep 17 00:00:00 2001 From: Jasper Boeijenga Date: Mon, 19 Aug 2024 16:56:21 +0200 Subject: [PATCH 1/4] Added EntityOwnerPicker to the TemplateListPage Signed-off-by: Jasper Boeijenga --- .../TemplateListPage.test.tsx | 22 +++++++++++++++++++ .../TemplateListPage/TemplateListPage.tsx | 2 ++ 2 files changed, 24 insertions(+) diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx index ee36d876cf..cf28b26eed 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx @@ -114,6 +114,28 @@ describe('TemplateListPage', () => { expect(getByText('Categories')).toBeInTheDocument(); }); + it('should render the EntityOwnerPicker', async () => { + const { getByText } = await renderInTestApp( + + + , + { mountedRoutes: { '/': rootRouteRef } }, + ); + + expect(getByText('Owner')).toBeInTheDocument(); + }); + // eslint-disable-next-line jest/no-disabled-tests it.skip('should render the EntityTag picker', async () => { const { getByText } = await renderInTestApp( diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx index b1508e43fc..989ffac2db 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx @@ -34,6 +34,7 @@ import { EntityTagPicker, CatalogFilterLayout, UserListPicker, + EntityOwnerPicker, } from '@backstage/plugin-catalog-react'; import { ScaffolderPageContextMenu, @@ -189,6 +190,7 @@ export const TemplateListPage = (props: TemplateListPageProps) => { /> + Date: Mon, 19 Aug 2024 16:58:20 +0200 Subject: [PATCH 2/4] Added changeset Signed-off-by: Jasper Boeijenga --- .changeset/twenty-queens-grow.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/twenty-queens-grow.md diff --git a/.changeset/twenty-queens-grow.md b/.changeset/twenty-queens-grow.md new file mode 100644 index 0000000000..1236488dbe --- /dev/null +++ b/.changeset/twenty-queens-grow.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': minor +--- + +Added EntityOwnerPicker component to the TemplateListPage to allow filtering on owner From ede5a5cec2954296fc913bcff8bb0243ceb8bcb8 Mon Sep 17 00:00:00 2001 From: Jasper Boeijenga Date: Tue, 20 Aug 2024 09:29:51 +0200 Subject: [PATCH 3/4] Fix case where facet lookup returns undefined Signed-off-by: Jasper Boeijenga --- .../EntityOwnerPicker/useFacetsEntities.test.ts | 15 +++++++++++++++ .../EntityOwnerPicker/useFacetsEntities.ts | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/useFacetsEntities.test.ts b/plugins/catalog-react/src/components/EntityOwnerPicker/useFacetsEntities.test.ts index 742efaab9f..1d9eaa8af7 100644 --- a/plugins/catalog-react/src/components/EntityOwnerPicker/useFacetsEntities.test.ts +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/useFacetsEntities.test.ts @@ -70,6 +70,21 @@ describe('useFacetsEntities', () => { expect(result.current[0]).toEqual({ value: { items: [] }, loading: true }); }); + it(`should return empty response when facet is not present`, async () => { + mockedGetEntityFacets.mockResolvedValueOnce({ + facets: { 'metadata.tags': [{ value: 'tag', count: 1 }] }, + }); + mockedGetEntitiesByRefs.mockResolvedValueOnce({ items: [] }); + const { result } = renderHook(() => useFacetsEntities({ enabled: true })); + result.current[1]({ text: '' }); + await waitFor(() => { + expect(result.current[0]).toEqual({ + value: { items: [] }, + loading: false, + }); + }); + }); + it(`should return the owners`, async () => { const entityRefs = ['component:default/e1', 'component:default/e2']; mockedGetEntityFacets.mockResolvedValue(facetsFromEntityRefs(entityRefs)); diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/useFacetsEntities.ts b/plugins/catalog-react/src/components/EntityOwnerPicker/useFacetsEntities.ts index 10a5c5a8c2..9bb27eab98 100644 --- a/plugins/catalog-react/src/components/EntityOwnerPicker/useFacetsEntities.ts +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/useFacetsEntities.ts @@ -52,7 +52,7 @@ export function useFacetsEntities({ enabled }: { enabled: boolean }) { const facetsResponse = await catalogApi.getEntityFacets({ facets: [facet], }); - const entityRefs = facetsResponse.facets[facet].map(e => e.value); + const entityRefs = facetsResponse.facets[facet]?.map(e => e.value) ?? []; return catalogApi .getEntitiesByRefs({ entityRefs }) From 114380c2b5cfd481d6d475f36973714da3f37628 Mon Sep 17 00:00:00 2001 From: Jasper Boeijenga Date: Tue, 20 Aug 2024 10:00:13 +0200 Subject: [PATCH 4/4] Added mock on unit tests Signed-off-by: Jasper Boeijenga --- .../src/next/TemplateListPage/TemplateListPage.test.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx index cf28b26eed..2ad0752cc8 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx @@ -45,6 +45,9 @@ describe('TemplateListPage', () => { getEntityFacets: async () => ({ facets: { 'spec.type': [{ value: 'service', count: 1 }] }, }), + getEntitiesByRefs: async () => ({ + items: [], + }), }; it('should render the search bar for templates', async () => {