From 95881167dcf1ab29b4f1dd803cb07d7949bd2800 Mon Sep 17 00:00:00 2001 From: djamaile Date: Tue, 7 Dec 2021 23:50:09 +0100 Subject: [PATCH] chore: some clean up Signed-off-by: djamaile --- .changeset/modern-buses-protect.md | 4 ++- .../UserListPicker/UserListPicker.tsx | 25 ++++++++++--------- .../src/hooks/useEntityListProvider.test.tsx | 19 ++++++++++++-- 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/.changeset/modern-buses-protect.md b/.changeset/modern-buses-protect.md index d943d6c06a..2aed52eca0 100644 --- a/.changeset/modern-buses-protect.md +++ b/.changeset/modern-buses-protect.md @@ -2,4 +2,6 @@ '@backstage/plugin-catalog-react': patch --- -when a user doesn't own any entity, the user won't get the option to select on owned +When a user has zero owned entities when viewing an entity kind in the catalog +page, it will be automatically redirected to see all the entities. Furthermore, +for the kind User and Group there are no longer the owned selector. diff --git a/plugins/catalog-react/src/components/UserListPicker/UserListPicker.tsx b/plugins/catalog-react/src/components/UserListPicker/UserListPicker.tsx index 867c5230d4..9aafdf1437 100644 --- a/plugins/catalog-react/src/components/UserListPicker/UserListPicker.tsx +++ b/plugins/catalog-react/src/components/UserListPicker/UserListPicker.tsx @@ -122,15 +122,17 @@ export const UserListPicker = ({ const classes = useStyles(); const configApi = useApi(configApiRef); const orgName = configApi.getOptionalString('organization.name') ?? 'Company'; - const userAndGroupFilterIds = ['starred', 'all']; const { filters, updateFilters, backendEntities, queryParameters } = useEntityListProvider(); + // Remove group items that aren't in availableFilters and exclude // any now-empty groups. + const userAndGroupFilterIds = ['starred', 'all']; const filterGroups = getFilterGroups(orgName) .map(filterGroup => ({ ...filterGroup, items: filterGroup.items.filter(({ id }) => + // TODO: avoid hardcoding kinds here ['group', 'user'].some(kind => kind === queryParameters.kind) ? userAndGroupFilterIds.includes(id) : !availableFilters || availableFilters.includes(id), @@ -155,21 +157,13 @@ export const UserListPicker = ({ // filter that's controlled by this picker. const [entitiesWithoutUserFilter, setEntitiesWithoutUserFilter] = useState(backendEntities); - useEffect(() => { - const filterFn = reduceEntityFilters( - compact(Object.values({ ...filters, user: undefined })), - ); - setEntitiesWithoutUserFilter(backendEntities.filter(filterFn)); - }, [filters, backendEntities]); - const totalOwnedUserEntities = entitiesWithoutUserFilter.filter(entity => ownedFilter.filterEntity(entity), ).length; - const [selectedUserFilter, setSelectedUserFilter] = useState( - totalOwnedUserEntities < 1 - ? 'all' - : [queryParameters.user].flat()[0] ?? initialFilter, + totalOwnedUserEntities > 0 + ? [queryParameters.user].flat()[0] ?? initialFilter + : 'all', ); useEffect(() => { @@ -184,6 +178,13 @@ export const UserListPicker = ({ }); }, [selectedUserFilter, isOwnedEntity, isStarredEntity, updateFilters]); + useEffect(() => { + const filterFn = reduceEntityFilters( + compact(Object.values({ ...filters, user: undefined })), + ); + setEntitiesWithoutUserFilter(backendEntities.filter(filterFn)); + }, [filters, backendEntities]); + function getFilterCount(id: UserListFilterKind) { switch (id) { case 'owned': diff --git a/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx b/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx index b96f63304a..fd5cf3b9dd 100644 --- a/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx +++ b/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx @@ -137,12 +137,27 @@ describe('', () => { const { result, waitFor } = renderHook(() => useEntityListProvider(), { wrapper, initialProps: { - userFilter: 'owned', + userFilter: 'all', }, }); await waitFor(() => !!result.current.entities.length); expect(result.current.backendEntities.length).toBe(2); - expect(result.current.entities.length).toBe(1); + + act(() => + result.current.updateFilters({ + user: new UserListFilter( + 'owned', + entity => entity.metadata.name === 'component-1', + () => true, + ), + }), + ); + + await waitFor(() => { + expect(result.current.backendEntities.length).toBe(2); + expect(result.current.entities.length).toBe(1); + expect(mockCatalogApi.getEntities).toHaveBeenCalledTimes(1); + }); }); it('resolves query param filter values', async () => {