From 9d27c97fab387256dcc38e9ae31fdd80609d611b Mon Sep 17 00:00:00 2001 From: Eskalifer1 Date: Fri, 20 Feb 2026 17:52:47 +0200 Subject: [PATCH 1/2] feat: show correct message for users with enableRestrictedPrimaryLogin security group --- src/languages/de.ts | 1 + src/languages/en.ts | 1 + src/languages/es.ts | 1 + src/languages/fr.ts | 1 + src/languages/it.ts | 1 + src/languages/ja.ts | 1 + src/languages/nl.ts | 1 + src/languages/pl.ts | 1 + src/languages/pt-BR.ts | 1 + src/languages/zh-hans.ts | 1 + .../Contacts/ContactMethodDetailsPage.tsx | 54 ++++++++++++------- 11 files changed, 46 insertions(+), 18 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 25b6922ce1278..3c4616a7c49ca 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -1759,6 +1759,7 @@ const translations: TranslationDeepObject = { }, newContactMethod: 'Neue Kontaktmethode', goBackContactMethods: 'Zurück zu den Kontaktmethoden', + yourDefaultContactMethodRestrictedSwitch: 'Dies ist Ihre derzeitige standardmäßige Kontaktmethode. Ihr Unternehmen hat das Entfernen oder Ändern eingeschränkt.', }, pronouns: { coCos: 'Co / Cos', diff --git a/src/languages/en.ts b/src/languages/en.ts index 97cd63ba82865..c840dfaeaa86c 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1779,6 +1779,7 @@ const translations = { enterMagicCode: (contactMethod: string) => `Please enter the magic code sent to ${contactMethod}. It should arrive within a minute or two.`, setAsDefault: 'Set as default', yourDefaultContactMethod: "This is your current default contact method. Before you can delete it, you'll need to choose another contact method and click “Set as default”.", + yourDefaultContactMethodRestrictedSwitch: 'This is your current default contact method. Your company has restricted removing or changing it.', removeContactMethod: 'Remove contact method', removeAreYouSure: "Are you sure you want to remove this contact method? This action can't be undone.", failedNewContact: 'Failed to add this contact method.', diff --git a/src/languages/es.ts b/src/languages/es.ts index 40cea4391309d..bfa17cc3cc6e2 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1604,6 +1604,7 @@ const translations: TranslationDeepObject = { setAsDefault: 'Establecer como predeterminado', yourDefaultContactMethod: 'Este es tu método de contacto predeterminado. Antes de poder eliminarlo, tendrás que elegir otro método de contacto y haz clic en "Establecer como predeterminado".', + yourDefaultContactMethodRestrictedSwitch: 'Este es tu método de contacto predeterminado actual. Tu empresa ha restringido su eliminación o modificación.', removeContactMethod: 'Eliminar método de contacto', removeAreYouSure: '¿Estás seguro de que quieres eliminar este método de contacto? Esta acción no se puede deshacer.', failedNewContact: 'Se ha producido un error al añadir este método de contacto.', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 9c3b2c219758b..b747cf08e0c31 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -1764,6 +1764,7 @@ const translations: TranslationDeepObject = { }, newContactMethod: 'Nouveau moyen de contact', goBackContactMethods: 'Revenir aux méthodes de contact', + yourDefaultContactMethodRestrictedSwitch: 'Ceci est votre méthode de contact par défaut actuelle. Votre entreprise a restreint sa suppression ou sa modification.', }, pronouns: { coCos: 'Copropriétaire / Cosigner', diff --git a/src/languages/it.ts b/src/languages/it.ts index a99155d907aad..b134eeadd7fba 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -1755,6 +1755,7 @@ const translations: TranslationDeepObject = { }, newContactMethod: 'Nuovo metodo di contatto', goBackContactMethods: 'Torna ai metodi di contatto', + yourDefaultContactMethodRestrictedSwitch: 'Questo è il tuo metodo di contatto predefinito attuale. La tua azienda ne ha limitato la rimozione o la modifica.', }, pronouns: { coCos: 'Co / Cos', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 0633925434427..616f5070ab66d 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -1747,6 +1747,7 @@ const translations: TranslationDeepObject = { }, newContactMethod: '新しい連絡方法', goBackContactMethods: '連絡方法に戻る', + yourDefaultContactMethodRestrictedSwitch: 'これは現在のデフォルトの連絡方法です。会社により、これを削除または変更することは制限されています。', }, pronouns: { coCos: '会社 / コスト', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 9edae3fb90f53..f5b482b3a53fb 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -1753,6 +1753,7 @@ const translations: TranslationDeepObject = { }, newContactMethod: 'Nieuwe contactmethode', goBackContactMethods: 'Ga terug naar contactmethoden', + yourDefaultContactMethodRestrictedSwitch: 'Dit is je huidige standaardcontactmethode. Je bedrijf heeft beperkt dat je deze kunt verwijderen of wijzigen.', }, pronouns: { coCos: 'Co / Cos', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index cdd920b81d438..763e6a2f367e2 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -1752,6 +1752,7 @@ const translations: TranslationDeepObject = { }, newContactMethod: 'Nowy sposób kontaktu', goBackContactMethods: 'Wróć do metod kontaktu', + yourDefaultContactMethodRestrictedSwitch: 'To jest Twoja domyślna metoda kontaktu. Twoja firma zablokowała możliwość usuwania lub zmiany tej metody.', }, pronouns: { coCos: 'Co / Coś', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 13c42f904c764..1eb3aab709397 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -1749,6 +1749,7 @@ const translations: TranslationDeepObject = { }, newContactMethod: 'Novo método de contato', goBackContactMethods: 'Voltar para métodos de contato', + yourDefaultContactMethodRestrictedSwitch: 'Este é seu método de contato padrão atual. Sua empresa restringiu a remoção ou alteração dele.', }, pronouns: { coCos: 'Co / Cos', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 2b5abe97d57fd..4e51c48ffdf6b 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -1723,6 +1723,7 @@ const translations: TranslationDeepObject = { }, newContactMethod: '新联系方式', goBackContactMethods: '返回联系方式', + yourDefaultContactMethodRestrictedSwitch: '这是你当前的默认联系方式。你的公司已限制移除或更改它。', }, pronouns: { coCos: '公司/成本', diff --git a/src/pages/settings/Profile/Contacts/ContactMethodDetailsPage.tsx b/src/pages/settings/Profile/Contacts/ContactMethodDetailsPage.tsx index c0f47562371a7..c46cc87c460ae 100644 --- a/src/pages/settings/Profile/Contacts/ContactMethodDetailsPage.tsx +++ b/src/pages/settings/Profile/Contacts/ContactMethodDetailsPage.tsx @@ -94,10 +94,35 @@ function ContactMethodDetailsPage({route}: ContactMethodDetailsPageProps) { }, [currentUserPersonalDetails, contactMethod, formatPhoneNumber, backTo]); /** - * Checks if the user is allowed to change their default contact method. This should only be allowed if: - * 1. The viewed contact method is not already their default contact method - * 2. The viewed contact method is validated - * 3. If the user is on a private domain, their security group must allow primary login switching + * Determines whether the user's primary login switching is restricted + * by their domain security group. + * + * If: + * - The user does not belong to a private domain security group → NOT restricted. + * - The security group exists and has `enableRestrictedPrimaryLogin` enabled → restricted. + */ + const isRestrictedDefaultContactMethodSwitch = useMemo(() => { + const domainName = Str.extractEmailDomain(session?.email ?? ''); + const primaryDomainSecurityGroupID = myDomainSecurityGroups?.[domainName]; + + // If there's no security group associated with the user for the primary domain, + // default to NOT restricting the user from switching their default contact method. + if (!primaryDomainSecurityGroupID) { + return false; + } + + /// Restrict the user from switching their default contact method if their security group + // restricts primary login switching. + return Boolean(securityGroups?.[`${ONYXKEYS.COLLECTION.SECURITY_GROUP}${primaryDomainSecurityGroupID}`]?.enableRestrictedPrimaryLogin); + }, [session?.email, myDomainSecurityGroups, securityGroups]); + + /** + * Checks if the user is allowed to change their default contact method. + * + * This is allowed only if: + * 1. The viewed contact method is NOT already their default contact method. + * 2. The viewed contact method is validated. + * 3. The user's domain security group does NOT restrict primary login switching. */ const canChangeDefaultContactMethod = useMemo(() => { // Cannot set this contact method as default if: @@ -107,19 +132,10 @@ function ContactMethodDetailsPage({route}: ContactMethodDetailsPageProps) { return false; } - const domainName = Str.extractEmailDomain(session?.email ?? ''); - const primaryDomainSecurityGroupID = myDomainSecurityGroups?.[domainName]; - - // If there's no security group associated with the user for the primary domain, - // default to allowing the user to change their default contact method. - if (!primaryDomainSecurityGroupID) { - return true; - } - - // Allow user to change their default contact method if they don't have a security group OR if their security group - // does NOT restrict primary login switching. - return !securityGroups?.[`${ONYXKEYS.COLLECTION.SECURITY_GROUP}${primaryDomainSecurityGroupID}`]?.enableRestrictedPrimaryLogin; - }, [isDefaultContactMethod, loginData?.validatedDate, session?.email, myDomainSecurityGroups, securityGroups]); + // If the domain restricts primary login switching, + // the user is not allowed to change their default contact method. + return !isRestrictedDefaultContactMethodSwitch; + }, [isDefaultContactMethod, loginData?.validatedDate, isRestrictedDefaultContactMethodSwitch]); /** * Toggle delete confirm modal visibility @@ -246,7 +262,9 @@ function ContactMethodDetailsPage({route}: ContactMethodDetailsPageProps) { errorRowStyles={[themeStyles.ml8, themeStyles.mr5]} onClose={() => clearContactMethodErrors(contactMethod, isFailedRemovedContactMethod ? 'deletedLogin' : 'defaultLogin')} > - {translate('contacts.yourDefaultContactMethod')} + + {translate(isRestrictedDefaultContactMethodSwitch ? 'contacts.yourDefaultContactMethodRestrictedSwitch' : 'contacts.yourDefaultContactMethod')} + ) : ( Date: Fri, 20 Feb 2026 17:54:39 +0200 Subject: [PATCH 2/2] fie eslint --- .../settings/Profile/Contacts/ContactMethodDetailsPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/settings/Profile/Contacts/ContactMethodDetailsPage.tsx b/src/pages/settings/Profile/Contacts/ContactMethodDetailsPage.tsx index c46cc87c460ae..3e387e0d7dbc8 100644 --- a/src/pages/settings/Profile/Contacts/ContactMethodDetailsPage.tsx +++ b/src/pages/settings/Profile/Contacts/ContactMethodDetailsPage.tsx @@ -113,7 +113,7 @@ function ContactMethodDetailsPage({route}: ContactMethodDetailsPageProps) { /// Restrict the user from switching their default contact method if their security group // restricts primary login switching. - return Boolean(securityGroups?.[`${ONYXKEYS.COLLECTION.SECURITY_GROUP}${primaryDomainSecurityGroupID}`]?.enableRestrictedPrimaryLogin); + return !!securityGroups?.[`${ONYXKEYS.COLLECTION.SECURITY_GROUP}${primaryDomainSecurityGroupID}`]?.enableRestrictedPrimaryLogin; }, [session?.email, myDomainSecurityGroups, securityGroups]); /**