Skip to content

Commit 2dbeeb5

Browse files
refactor(mosaic): use the shared enterprise check for adding passkeys, emails and phone numbers (#10473)
1 parent 615bc7c commit 2dbeeb5

6 files changed

Lines changed: 17 additions & 20 deletions

File tree

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
---
2+
---

‎packages/mosaic/src/features/user-profile/user-profile-contact.utils.ts‎

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { AttributeData, UserResource, VerificationResource } from '@clerk/shared/types';
1+
import type { AttributeData, VerificationResource } from '@clerk/shared/types';
22

33
import { isAttributeAvailable } from './user-profile.utils';
44
import type { UserProfileContact } from './user-profile-contact.types';
@@ -20,15 +20,6 @@ export function toContactAccess(
2020
return { show: available && (canCreate || count > 0), canCreate, canRemove: mutable };
2121
}
2222

23-
export function canAddIdentifications(user: UserResource, enterpriseSSOEnabled: boolean): boolean {
24-
return (
25-
!enterpriseSSOEnabled ||
26-
!user.enterpriseAccounts.some(
27-
account => account.active && account.enterpriseConnection?.disableAdditionalIdentifications,
28-
)
29-
);
30-
}
31-
3223
export function byId<T extends { id: string }>(items: T[], id: string, kind: string): T {
3324
const item = items.find(item => item.id === id);
3425
if (!item) {

‎packages/mosaic/src/features/user-profile/user-profile-email-section/user-profile-email-section.model.ts‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ import type { EmailAddressResource, UserResource } from '@clerk/shared/types';
33

44
import type { MosaicRouter } from '../../../hooks/use-mosaic-router';
55
import { useMosaicRouter } from '../../../hooks/use-mosaic-router';
6+
import { allowsIdentificationCreation } from '../../../utils/allows-identification-creation';
67
import { save } from '../../../utils/errors';
78
import { useReverificationFlow } from '../../reverification';
89
import type { UserProfileEmailVerification, UserProfileEmailVerifier } from '../user-profile-contact.types';
9-
import { byId, canAddIdentifications, toContactAccess, toContacts } from '../user-profile-contact.utils';
10+
import { byId, toContactAccess, toContacts } from '../user-profile-contact.utils';
1011
import { useUserProfileUserModel } from '../user-profile-user.model';
1112
import type { UserProfileAddEmailField } from './user-profile-add-email.controller';
1213
import type { UserProfileEmailSectionModel } from './user-profile-email-section.types';
@@ -104,7 +105,7 @@ export function useUserProfileEmailSectionModel(): UserProfileEmailSectionModel
104105
const access = toContactAccess(
105106
attributes.email_address,
106107
user.emailAddresses.length,
107-
canAddIdentifications(user, enterpriseSSO.enabled),
108+
allowsIdentificationCreation(user, enterpriseSSO),
108109
);
109110

110111
if (!access.show) {

‎packages/mosaic/src/features/user-profile/user-profile-passkeys-section/user-profile-passkeys-section.model.ts‎

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { FormSubmitError } from '../../../components/form';
66
import { getMosaicEnvironment, useMosaicEnvironment } from '../../../hooks/use-mosaic-environment';
77
import { useNow } from '../../../hooks/use-now';
88
import { fill, useLocale, useMessages } from '../../../localization';
9+
import { allowsIdentificationCreation } from '../../../utils/allows-identification-creation';
910
import { save, SaveError } from '../../../utils/errors';
1011
import type { ReverificationController } from '../../reverification';
1112
import { useReverificationFlow } from '../../reverification';
@@ -76,11 +77,7 @@ function getPasskeysProjection(
7677
return projectPasskeys({
7778
passkeys: user.passkeys,
7879
enabled: Boolean(environment.userSettings.attributes.passkey?.enabled),
79-
allowIdentificationCreation:
80-
!environment.userSettings.enterpriseSSO.enabled ||
81-
!user.enterpriseAccounts.some(
82-
account => account.active && account.enterpriseConnection?.disableAdditionalIdentifications,
83-
),
80+
allowIdentificationCreation: allowsIdentificationCreation(user, environment.userSettings.enterpriseSSO),
8481
isSatellite,
8582
});
8683
}

‎packages/mosaic/src/features/user-profile/user-profile-phone-section/user-profile-phone-section.model.ts‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ import { useClerk } from '@clerk/shared/react';
22
import type { PhoneNumberResource, UserResource } from '@clerk/shared/types';
33

44
import { toCountryIso } from '../../../components/phone-input';
5+
import { allowsIdentificationCreation } from '../../../utils/allows-identification-creation';
56
import { save } from '../../../utils/errors';
67
import { useReverificationFlow } from '../../reverification';
78
import type { UserProfilePhoneVerifier } from '../user-profile-contact.types';
8-
import { byId, canAddIdentifications, toContactAccess, toContacts } from '../user-profile-contact.utils';
9+
import { byId, toContactAccess, toContacts } from '../user-profile-contact.utils';
910
import { useUserProfileUserModel } from '../user-profile-user.model';
1011
import type { UserProfileAddPhoneField } from './user-profile-add-phone.controller';
1112
import type { UserProfilePhoneSectionModel } from './user-profile-phone-section.types';
@@ -40,7 +41,7 @@ export function useUserProfilePhoneSectionModel(): UserProfilePhoneSectionModel
4041
const access = toContactAccess(
4142
attributes.phone_number,
4243
user.phoneNumbers.length,
43-
canAddIdentifications(user, enterpriseSSO.enabled),
44+
allowsIdentificationCreation(user, enterpriseSSO),
4445
);
4546

4647
if (!access.show) {

‎packages/mosaic/src/utils/__tests__/allows-identification-creation.test.ts‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,12 @@ describe('allowsIdentificationCreation', () => {
1212
expect(allowsIdentificationCreation(blocked, enterpriseSSO)).toBe(false);
1313
});
1414

15-
it('allows creation when the enterprise connection is inactive or enterprise SSO is off', () => {
15+
it('allows creation when the enterprise connection permits it, is inactive, or enterprise SSO is off', () => {
16+
const permitted = {
17+
enterpriseAccounts: [{ active: true, enterpriseConnection: { disableAdditionalIdentifications: false } }],
18+
};
19+
expect(allowsIdentificationCreation(permitted, enterpriseSSO)).toBe(true);
20+
1621
const inactive = {
1722
enterpriseAccounts: [{ active: false, enterpriseConnection: { disableAdditionalIdentifications: true } }],
1823
};

0 commit comments

Comments
 (0)