Skip to content

Commit 18f3ba0

Browse files
authored
Merge pull request Expensify#77969 from software-mansion-labs/feat/domain-reset
[Release 1] [Domain Control] Reset domain
2 parents b962f18 + 44422d3 commit 18f3ba0

36 files changed

Lines changed: 501 additions & 51 deletions

src/ONYXKEYS.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -949,6 +949,8 @@ const ONYXKEYS = {
949949
TEXT_PICKER_MODAL_FORM_DRAFT: 'textPickerModalFormDraft',
950950
REPORTS_DEFAULT_TITLE_MODAL_FORM: 'ReportsDefaultTitleModalForm',
951951
REPORTS_DEFAULT_TITLE_MODAL_FORM_DRAFT: 'ReportsDefaultTitleModalFormDraft',
952+
RESET_DOMAIN_FORM: 'resetDomainForm',
953+
RESET_DOMAIN_FORM_DRAFT: 'resetDomainFormDraft',
952954
RULES_AUTO_APPROVE_REPORTS_UNDER_MODAL_FORM: 'rulesAutoApproveReportsUnderModalForm',
953955
RULES_AUTO_APPROVE_REPORTS_UNDER_MODAL_FORM_DRAFT: 'rulesAutoApproveReportsUnderModalFormDraft',
954956
RULES_RANDOM_REPORT_AUDIT_MODAL_FORM: 'rulesRandomReportAuditModalForm',
@@ -1043,6 +1045,7 @@ type OnyxFormValuesMapping = {
10431045
[ONYXKEYS.FORMS.REPORT_VIRTUAL_CARD_FRAUD]: FormTypes.ReportVirtualCardFraudForm;
10441046
[ONYXKEYS.FORMS.REPORT_PHYSICAL_CARD_FORM]: FormTypes.ReportPhysicalCardForm;
10451047
[ONYXKEYS.FORMS.REPORT_FIELDS_EDIT_FORM]: FormTypes.ReportFieldsEditForm;
1048+
[ONYXKEYS.FORMS.RESET_DOMAIN_FORM]: FormTypes.ResetDomainForm;
10461049
[ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM]: FormTypes.ReimbursementAccountForm;
10471050
[ONYXKEYS.FORMS.ENTER_SINGER_INFO_FORM]: FormTypes.EnterSignerInfoForm;
10481051
[ONYXKEYS.FORMS.PERSONAL_BANK_ACCOUNT_FORM]: FormTypes.PersonalBankAccountForm;

src/ROUTES.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3652,6 +3652,10 @@ const ROUTES = {
36523652
route: 'domain/:domainAccountID/members/:accountID',
36533653
getRoute: (domainAccountID: number, accountID: number) => `domain/${domainAccountID}/members/${accountID}` as const,
36543654
},
3655+
DOMAIN_RESET_DOMAIN: {
3656+
route: 'domain/:domainAccountID/admins/:accountID/reset-domain',
3657+
getRoute: (domainAccountID: number, accountID: number) => `domain/${domainAccountID}/admins/${accountID}/reset-domain` as const,
3658+
},
36553659
} as const;
36563660

36573661
/**

src/SCREENS.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -878,6 +878,7 @@ const SCREENS = {
878878
ADD_ADMIN: 'Domain_Add_Admin',
879879
MEMBERS: 'Domain_Members',
880880
MEMBER_DETAILS: 'Member_Details',
881+
RESET_DOMAIN: 'Domain_Reset',
881882
},
882883
} as const;
883884

src/components/Domain/DomainMenuItem.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ import useLocalize from '@hooks/useLocalize';
88
import useThemeStyles from '@hooks/useThemeStyles';
99
import Navigation from '@libs/Navigation/Navigation';
1010
import CONST from '@src/CONST';
11+
import {clearDomainErrors} from '@src/libs/actions/Domain';
1112
import ROUTES from '@src/ROUTES';
13+
import type {Errors} from '@src/types/onyx/OnyxCommon';
1214
import DomainsListRow from './DomainsListRow';
1315

1416
type DomainMenuItemProps = {
@@ -37,6 +39,9 @@ type DomainItem = {
3739

3840
/** Whether the row's domain is validated (aka verified) */
3941
isValidated: boolean;
42+
43+
/** Current errors for domain */
44+
errors?: Errors;
4045
} & Pick<OfflineWithFeedbackProps, 'pendingAction'>;
4146

4247
function DomainMenuItem({item, index}: DomainMenuItemProps) {
@@ -68,12 +73,14 @@ function DomainMenuItem({item, index}: DomainMenuItemProps) {
6873
<OfflineWithFeedback
6974
key={`domain_${item.title}_${index}`}
7075
pendingAction={item.pendingAction}
71-
style={styles.mb2}
76+
style={[styles.mb2, styles.mh5]}
77+
contentContainerStyle={item.errors ? styles.mb2 : undefined}
78+
errors={item?.errors}
79+
onClose={() => clearDomainErrors(item.accountID)}
7280
>
7381
<PressableWithoutFeedback
7482
role={CONST.ROLE.BUTTON}
7583
accessibilityLabel="row"
76-
style={styles.mh5}
7784
onPress={action}
7885
>
7986
{({hovered}) => (

src/languages/de.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7989,7 +7989,15 @@ Hier ist ein *Testbeleg*, um dir zu zeigen, wie es funktioniert:`,
79897989
addAdminError: 'Dieser Benutzer kann nicht als Admin hinzugefügt werden. Bitte versuche es erneut.',
79907990
revokeAdminAccess: 'Administratorzugriff widerrufen',
79917991
cantRevokeAdminAccess: 'Adminzugriff kann dem technischen Ansprechpartner nicht entzogen werden',
7992-
error: {removeAdmin: 'Dieser Benutzer kann nicht als Admin entfernt werden. Bitte versuchen Sie es erneut.'},
7992+
error: {
7993+
removeAdmin: 'Dieser Benutzer kann nicht als Administrator entfernt werden. Bitte versuche es erneut.',
7994+
removeDomain: 'Diese Domain kann nicht entfernt werden. Bitte versuche es erneut.',
7995+
removeDomainNameInvalid: 'Bitte gib deinen Domainnamen ein, um ihn zurückzusetzen.',
7996+
},
7997+
resetDomain: 'Domain zurücksetzen',
7998+
resetDomainExplanation: ({domainName}: {domainName?: string}) => `Bitte geben Sie <strong>${domainName}</strong> ein, um das Zurücksetzen der Domain zu bestätigen.`,
7999+
enterDomainName: 'Geben Sie hier Ihren Domänennamen ein',
8000+
resetDomainInfo: `Diese Aktion ist <strong>dauerhaft</strong> und die folgenden Daten werden gelöscht: <br/> <ul><li>Firmenkarten-Verbindungen und alle nicht eingereichten Ausgaben von diesen Karten</li> <li>SAML- und Gruppeneinstellungen</li> </ul> Alle Konten, Workspaces, Berichte, Ausgaben und anderen Daten bleiben erhalten. <br/><br/>Hinweis: Sie können diese Domain aus Ihrer Domainliste entfernen, indem Sie die zugehörige E-Mail aus Ihren <a href="#">Kontaktmethoden</a> löschen.`,
79938001
},
79948002
members: {title: 'Mitglieder', findMember: 'Mitglied suchen'},
79958003
},

src/languages/en.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7914,7 +7914,13 @@ const translations = {
79147914
cantRevokeAdminAccess: "Can't revoke admin access from the technical contact",
79157915
error: {
79167916
removeAdmin: 'Unable to remove this user as an Admin. Please try again.',
7917+
removeDomain: 'Unable to remove this domain. Please try again.',
7918+
removeDomainNameInvalid: 'Please enter your domain name to reset it.',
79177919
},
7920+
resetDomain: 'Reset domain',
7921+
resetDomainExplanation: ({domainName}: {domainName?: string}) => `Please type <strong>${domainName}</strong> to confirm the domain reset.`,
7922+
enterDomainName: 'Enter your domain name here',
7923+
resetDomainInfo: `This action is <strong>permanent</strong> and the following data will be deleted: <br/> <ul><li>Company card connections and any unreported expenses from those cards</li> <li>SAML and group settings</li> </ul> All accounts, workspaces, reports, expenses, and other data will remain. <br/><br/>Note: You can clear this domain from your domains list by removing the associated email from your <a href="#">contact methods</a>.`,
79187924
},
79197925
members: {
79207926
title: 'Members',

src/languages/es.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8069,7 +8069,15 @@ ${amount} para ${merchant} - ${date}`,
80698069
addAdminError: 'No se pudo añadir a este miembro como administrador. Por favor, inténtalo de nuevo.',
80708070
revokeAdminAccess: 'Revocar acceso de administrador',
80718071
cantRevokeAdminAccess: 'No se puede revocar el acceso de administrador del contacto técnico',
8072-
error: {removeAdmin: 'No se pudo eliminar a este usuario como administrador. Por favor, inténtalo de nuevo.'},
8072+
error: {
8073+
removeAdmin: 'No se pudo eliminar a este usuario como administrador. Por favor, inténtalo de nuevo.',
8074+
removeDomain: 'No se pudo eliminar este dominio. Inténtalo de nuevo.',
8075+
removeDomainNameInvalid: 'Introduce el nombre de tu dominio para restablecerlo.',
8076+
},
8077+
resetDomain: 'Restablecer dominio',
8078+
resetDomainExplanation: ({domainName}: {domainName?: string}) => `Escribe <strong>${domainName}</strong> para confirmar el restablecimiento del dominio.`,
8079+
enterDomainName: 'Introduce aquí tu nombre de dominio',
8080+
resetDomainInfo: `Esta acción es <strong>permanente</strong> y se eliminarán los siguientes datos: <br/> <ul><li>Conexiones de tarjeta corporativa y cualquier gasto no reportado de esas tarjetas</li> <li>Configuración de SAML y grupos</li> </ul> Todas las cuentas, espacios de trabajo, informes, gastos y otros datos se conservarán. <br/><br/>Nota: Puedes eliminar este dominio de tu lista de dominios eliminando el correo electrónico asociado de tus <a href="#">métodos de contacto</a>.`,
80738081
},
80748082
members: {
80758083
title: 'Miembros',

src/languages/fr.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7994,7 +7994,15 @@ Voici un *reçu test* pour vous montrer comment cela fonctionne :`,
79947994
addAdminError: 'Impossible d’ajouter ce membre en tant qu’administrateur. Veuillez réessayer.',
79957995
revokeAdminAccess: 'Révoquer l’accès administrateur',
79967996
cantRevokeAdminAccess: 'Impossible de révoquer l’accès administrateur au contact technique',
7997-
error: {removeAdmin: 'Impossible de supprimer cet utilisateur en tant qu’administrateur. Veuillez réessayer.'},
7997+
error: {
7998+
removeAdmin: 'Impossible de supprimer cet utilisateur en tant qu’administrateur. Veuillez réessayer.',
7999+
removeDomain: 'Impossible de supprimer ce domaine. Veuillez réessayer.',
8000+
removeDomainNameInvalid: 'Veuillez saisir votre nom de domaine pour le réinitialiser.',
8001+
},
8002+
resetDomain: 'Réinitialiser le domaine',
8003+
resetDomainExplanation: ({domainName}: {domainName?: string}) => `Veuillez saisir <strong>${domainName}</strong> pour confirmer la réinitialisation du domaine.`,
8004+
enterDomainName: 'Saisissez votre nom de domaine ici',
8005+
resetDomainInfo: `Cette action est <strong>définitive</strong> et les données suivantes seront supprimées : <br/> <ul><li>Connexions aux cartes d'entreprise et toutes les dépenses non déclarées de ces cartes</li> <li>Paramètres SAML et de groupe</li> </ul> Tous les comptes, espaces de travail, rapports, dépenses et autres données seront conservés. <br/><br/>Remarque : Vous pouvez supprimer ce domaine de votre liste de domaines en retirant l'adresse e-mail associée de vos <a href="#">méthodes de contact</a>.`,
79988006
},
79998007
members: {title: 'Membres', findMember: 'Rechercher un membre'},
80008008
},

src/languages/it.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7971,7 +7971,15 @@ Ecco una *ricevuta di prova* per mostrarti come funziona:`,
79717971
addAdminError: 'Impossibile aggiungere questo membro come amministratore. Riprova.',
79727972
revokeAdminAccess: 'Revoca accesso amministratore',
79737973
cantRevokeAdminAccess: 'Impossibile revocare i privilegi di amministratore dal referente tecnico',
7974-
error: {removeAdmin: 'Impossibile rimuovere questo utente come amministratore. Riprova.'},
7974+
error: {
7975+
removeAdmin: 'Impossibile rimuovere questo utente come amministratore. Riprova.',
7976+
removeDomain: 'Impossibile rimuovere questo dominio. Riprova.',
7977+
removeDomainNameInvalid: 'Inserisci il tuo nome di dominio per reimpostarlo.',
7978+
},
7979+
resetDomain: 'Reimposta dominio',
7980+
resetDomainExplanation: ({domainName}: {domainName?: string}) => `Per favore digita <strong>${domainName}</strong> per confermare il ripristino del dominio.`,
7981+
enterDomainName: 'Inserisci qui il tuo nome di dominio',
7982+
resetDomainInfo: `Questa azione è <strong>permanente</strong> e i seguenti dati verranno eliminati: <br/> <ul><li>Connessioni alle carte aziendali e tutte le spese non riportate da tali carte</li> <li>Impostazioni SAML e di gruppo</li> </ul> Tutti gli account, gli spazi di lavoro, i report, le spese e gli altri dati rimarranno. <br/><br/>Nota: puoi rimuovere questo dominio dall'elenco dei tuoi domini eliminando l'email associata dalle tue <a href="#">modalità di contatto</a>.`,
79757983
},
79767984
members: {title: 'Membri', findMember: 'Trova membro'},
79777985
},

src/languages/ja.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7910,7 +7910,15 @@ Expensify の使い方をお見せするための*テストレシート*がこ
79107910
addAdminError: 'このメンバーを管理者として追加できません。もう一度お試しください。',
79117911
revokeAdminAccess: '管理者アクセスを取り消す',
79127912
cantRevokeAdminAccess: '技術連絡先から管理者アクセス権を取り消すことはできません',
7913-
error: {removeAdmin: 'このユーザーを管理者として削除できません。もう一度お試しください。'},
7913+
error: {
7914+
removeAdmin: 'このユーザーを管理者として削除できません。もう一度お試しください。',
7915+
removeDomain: 'このドメインを削除できません。もう一度お試しください。',
7916+
removeDomainNameInvalid: 'リセットするドメイン名を入力してください。',
7917+
},
7918+
resetDomain: 'ドメインをリセット',
7919+
resetDomainExplanation: ({domainName}: {domainName?: string}) => `ドメインのリセットを確認するため、<strong>${domainName}</strong> と入力してください。`,
7920+
enterDomainName: 'ここにドメイン名を入力してください',
7921+
resetDomainInfo: `この操作は<strong>永久的</strong>であり、次のデータが削除されます:<br/> <ul><li>会社カードの接続およびそれらのカードからの未報告の経費</li> <li>SAML とグループ設定</li> </ul> すべてのアカウント、ワークスペース、レポート、経費、およびその他のデータは保持されます。<br/><br/>注:関連付けられているメールアドレスを<a href="#">連絡先方法</a>から削除することで、このドメインをドメイン一覧から消去できます。`,
79147922
},
79157923
members: {title: 'メンバー', findMember: 'メンバーを検索'},
79167924
},

0 commit comments

Comments
 (0)