diff --git a/packages/modules/type-availability-policies/frontend/src/components/ContactAdminModal.test.ts b/packages/modules/type-availability-policies/frontend/src/components/ContactAdminModal.test.ts index fa9495b4dab..4788abe6e2a 100644 --- a/packages/modules/type-availability-policies/frontend/src/components/ContactAdminModal.test.ts +++ b/packages/modules/type-availability-policies/frontend/src/components/ContactAdminModal.test.ts @@ -140,6 +140,31 @@ describe('ContactAdminModal', () => { ); }); + it('lists the instance owners and admins when the project has no admin of its own', async () => { + setup([owner]); + mockPolicyProject({ + type: 'team', + relations: [projectEditor], + implicitMembers: [ + { + id: 'global-admin-1', + firstName: 'Margaret', + lastName: 'Hamilton', + email: 'margaret@example.com', + globalRole: { slug: 'global:admin', displayName: 'Admin' }, + }, + ], + }); + const { findByTestId } = renderComponent({ + props: { open: true, nodeTypeName: 'Slack', audience: 'project' }, + }); + + const list = await findByTestId('contact-admin-list'); + + expect(list).toHaveTextContent('Margaret Hamilton'); + expect(list).not.toHaveTextContent('Alan Turing'); + }); + it('falls back to a project hint when the project has no admin to list', async () => { setup([owner]); mockPolicyProject({ type: 'team', relations: [projectEditor] }); diff --git a/packages/modules/type-availability-policies/frontend/src/components/ContactAdminModal.vue b/packages/modules/type-availability-policies/frontend/src/components/ContactAdminModal.vue index e5b873ca059..b563aed8239 100644 --- a/packages/modules/type-availability-policies/frontend/src/components/ContactAdminModal.vue +++ b/packages/modules/type-availability-policies/frontend/src/components/ContactAdminModal.vue @@ -62,11 +62,13 @@ const instanceAdmins = computed(() => .filter(hasEmail), ); -const projectAdmins = computed(() => - (policiesStore.policyProject?.relations ?? []) +const projectAdmins = computed(() => { + const project = policiesStore.policyProject; + const explicitAdmins = (project?.relations ?? []) .filter((relation) => relation.role === PROJECT_ADMIN_ROLE_SLUG) - .filter(hasEmail), -); + .filter(hasEmail); + return explicitAdmins.length ? explicitAdmins : (project?.implicitMembers ?? []).filter(hasEmail); +}); const admins = computed(() => audience === 'project' ? projectAdmins.value : instanceAdmins.value,