diff --git a/.changeset/nasty-pets-glow.md b/.changeset/nasty-pets-glow.md new file mode 100644 index 0000000000..e630736261 --- /dev/null +++ b/.changeset/nasty-pets-glow.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-org': patch +--- + +Added `relations.memberof` filter to the catalog api call in `MemberListCard` to avoid fetching all the User entity kinds from catalog-backend. diff --git a/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.test.tsx b/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.test.tsx index 5ef4079bf4..99be8571e0 100644 --- a/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.test.tsx +++ b/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.test.tsx @@ -75,33 +75,6 @@ describe('MemberTab Test', () => { memberOf: ['team-d'], }, }, - { - apiVersion: 'backstage.io/v1alpha1', - kind: 'User', - metadata: { - name: 'sara.macgovern', - namespace: 'default', - uid: 'a5gerth57', - }, - relations: [ - { - type: 'memberOf', - target: { - kind: 'group', - name: 'team-d', - namespace: 'foo-bar', - }, - }, - ], - spec: { - profile: { - displayName: 'Sara MacGovern', - email: 'sara-macgovern@example.com', - picture: 'https://example.com/staff/sara.jpeg', - }, - memberOf: ['foo-bar/team-d'], - }, - }, ] as Entity[], }), }; diff --git a/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.tsx b/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.tsx index 8aca65f1d4..9a107f2d8f 100644 --- a/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.tsx +++ b/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.tsx @@ -16,8 +16,8 @@ import { ENTITY_DEFAULT_NAMESPACE, GroupEntity, - RELATION_MEMBER_OF, UserEntity, + stringifyEntityRef, } from '@backstage/catalog-model'; import { catalogApiRef, @@ -139,20 +139,19 @@ export const MembersListCard = (_props: { value: members, } = useAsync(async () => { const membersList = await catalogApi.getEntities({ - filter: { kind: 'User' }, + filter: { + kind: 'User', + 'relations.memberof': [ + stringifyEntityRef({ + kind: 'group', + namespace: groupNamespace.toLocaleLowerCase('en-US'), + name: groupName.toLocaleLowerCase('en-US'), + }), + ], + }, }); - const groupMembersList = (membersList.items as UserEntity[]).filter( - member => - member?.relations?.some( - r => - r.type === RELATION_MEMBER_OF && - r.target.name.toLocaleLowerCase('en-US') === - groupName.toLocaleLowerCase('en-US') && - r.target.namespace.toLocaleLowerCase('en-US') === - groupNamespace.toLocaleLowerCase('en-US'), - ), - ); - return groupMembersList; + + return membersList.items as UserEntity[]; }, [catalogApi, groupEntity]); if (loading) {