fix(org-plugin): filter group members respecting namespaces
Signed-off-by: Phil Kuang <pkuang@factset.com>
This commit is contained in:
@@ -72,6 +72,33 @@ 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[],
|
||||
}),
|
||||
};
|
||||
@@ -101,5 +128,7 @@ describe('MemberTab Test', () => {
|
||||
'href',
|
||||
'/catalog/foo-bar/user/tara.macgovern',
|
||||
);
|
||||
|
||||
expect(rendered.getByText('Members (1)')).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
import {
|
||||
Entity,
|
||||
ENTITY_DEFAULT_NAMESPACE,
|
||||
GroupEntity,
|
||||
RELATION_MEMBER_OF,
|
||||
UserEntity,
|
||||
@@ -59,13 +59,7 @@ const useStyles = makeStyles((theme: Theme) =>
|
||||
}),
|
||||
);
|
||||
|
||||
const MemberComponent = ({
|
||||
member,
|
||||
groupEntity,
|
||||
}: {
|
||||
member: UserEntity;
|
||||
groupEntity: Entity;
|
||||
}) => {
|
||||
const MemberComponent = ({ member }: { member: UserEntity }) => {
|
||||
const classes = useStyles();
|
||||
const {
|
||||
metadata: { name: metaName },
|
||||
@@ -117,13 +111,15 @@ export const MembersListCard = (_props: {
|
||||
}) => {
|
||||
const { entity: groupEntity } = useEntity<GroupEntity>();
|
||||
const {
|
||||
metadata: { name: groupName },
|
||||
metadata: { name: groupName, namespace: grpNamespace },
|
||||
spec: { profile },
|
||||
} = groupEntity;
|
||||
const catalogApi = useApi(catalogApiRef);
|
||||
|
||||
const displayName = profile?.displayName ?? groupName;
|
||||
|
||||
const groupNamespace = grpNamespace || ENTITY_DEFAULT_NAMESPACE;
|
||||
|
||||
const { loading, error, value: members } = useAsync(async () => {
|
||||
const membersList = await catalogApi.getEntities({
|
||||
filter: { kind: 'User' },
|
||||
@@ -134,7 +130,9 @@ export const MembersListCard = (_props: {
|
||||
r =>
|
||||
r.type === RELATION_MEMBER_OF &&
|
||||
r.target.name.toLocaleLowerCase('en-US') ===
|
||||
groupName.toLocaleLowerCase('en-US'),
|
||||
groupName.toLocaleLowerCase('en-US') &&
|
||||
r.target.namespace.toLocaleLowerCase('en-US') ===
|
||||
groupNamespace.toLocaleLowerCase('en-US'),
|
||||
),
|
||||
);
|
||||
return groupMembersList;
|
||||
@@ -155,11 +153,7 @@ export const MembersListCard = (_props: {
|
||||
<Grid container spacing={3}>
|
||||
{members && members.length > 0 ? (
|
||||
members.map(member => (
|
||||
<MemberComponent
|
||||
member={member}
|
||||
groupEntity={groupEntity}
|
||||
key={member.metadata.uid}
|
||||
/>
|
||||
<MemberComponent member={member} key={member.metadata.uid} />
|
||||
))
|
||||
) : (
|
||||
<Box p={2}>
|
||||
|
||||
Reference in New Issue
Block a user