[Domain control] [Release 2] Remove Members "beta" - add Domain members button#80090
Conversation
|
Hey, I noticed you changed If you want to automatically generate translations for other locales, an Expensify employee will have to:
Alternatively, if you are an external contributor, you can run the translation script locally with your own OpenAI API key. To learn more, try running: npx ts-node ./scripts/generateTranslations.ts --helpTypically, you'd want to translate only what you changed by running |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
# Conflicts: # src/libs/Navigation/AppNavigator/Navigators/DomainSplitNavigator.tsx # src/pages/domain/DomainInitialPage.tsx
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 623f996aea
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
🦜 Polyglot Parrot! 🦜Squawk! Looks like you added some shiny new English strings. Allow me to parrot them back to you in other tongues: View the translation diffdiff --git a/src/languages/de.ts b/src/languages/de.ts
index 4348d6af..1bd54b3e 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -6995,7 +6995,7 @@ Fordere Spesendetails wie Belege und Beschreibungen an, lege Limits und Standard
[CONST.SEARCH.GROUP_BY.CARD]: 'Karte',
[CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'Auszahlungs-ID',
[CONST.SEARCH.GROUP_BY.CATEGORY]: 'Kategorie',
- [CONST.SEARCH.GROUP_BY.TAG]: 'Stichwort',
+ [CONST.SEARCH.GROUP_BY.TAG]: 'Tag',
[CONST.SEARCH.GROUP_BY.MONTH]: 'Monat',
},
feed: 'Feed',
@@ -8152,6 +8152,7 @@ Hier ist ein *Testbeleg*, um dir zu zeigen, wie es funktioniert:`,
errors: {addMember: 'Dieses Mitglied kann nicht hinzugefügt werden. Bitte versuche es erneut.'},
},
domainAdmins: 'Domain-Admins',
+ domainMembers: 'Domänenmitglieder',
},
gps: {
disclaimer: 'Benutze GPS, um eine Ausgabe von deiner Reise zu erstellen. Tippe unten auf „Start“, um mit der Aufzeichnung zu beginnen.',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 4b1b8264..9808d3c7 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -8158,6 +8158,7 @@ Voici un *reçu test* pour vous montrer comment cela fonctionne :`,
errors: {addMember: 'Impossible d’ajouter ce membre. Veuillez réessayer.'},
},
domainAdmins: 'Administrateurs de domaine',
+ domainMembers: 'Membres du domaine',
},
gps: {
disclaimer: 'Utilisez le GPS pour créer une dépense à partir de votre trajet. Touchez Démarrer ci-dessous pour commencer le suivi.',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 8ef5103b..a5b2228b 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -8139,6 +8139,7 @@ Ecco una *ricevuta di prova* per mostrarti come funziona:`,
errors: {addMember: 'Impossibile aggiungere questo membro. Riprova.'},
},
domainAdmins: 'Amministratori di dominio',
+ domainMembers: 'Membri del dominio',
},
gps: {
disclaimer: 'Usa il GPS per creare una spesa dal tuo viaggio. Tocca Avvia qui sotto per iniziare il tracciamento.',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 29398886..bb3faf4e 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -6921,7 +6921,7 @@ ${reportName}
reimbursable: '精算対象',
purchaseCurrency: '購入通貨',
groupBy: {
- [CONST.SEARCH.GROUP_BY.FROM]: '送信者',
+ [CONST.SEARCH.GROUP_BY.FROM]: '差出人',
[CONST.SEARCH.GROUP_BY.CARD]: 'カード',
[CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: '出金ID',
[CONST.SEARCH.GROUP_BY.CATEGORY]: 'カテゴリ',
@@ -8072,6 +8072,7 @@ Expensify の使い方をお見せするための*テストレシート*がこ
errors: {addMember: 'このメンバーを追加できませんでした。もう一度お試しください。'},
},
domainAdmins: 'ドメイン管理者',
+ domainMembers: 'ドメインメンバー',
},
gps: {
disclaimer: '移動中の経路から、GPS を使って経費を作成しましょう。下の「開始」をタップして追跡を始めてください。',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index a29f8bac..171ae2c2 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -8121,6 +8121,7 @@ Hier is een *testbon* om je te laten zien hoe het werkt:`,
errors: {addMember: 'Kan dit lid niet toevoegen. Probeer het opnieuw.'},
},
domainAdmins: 'Domeinbeheerders',
+ domainMembers: 'Domeinleden',
},
gps: {
disclaimer: 'Gebruik GPS om een uitgave van je reis te maken. Tik hieronder op Start om het volgen te beginnen.',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 67b0050f..c7b78213 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -6957,7 +6957,7 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i
[CONST.SEARCH.GROUP_BY.CARD]: 'Karta',
[CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'ID wypłaty',
[CONST.SEARCH.GROUP_BY.CATEGORY]: 'Kategoria',
- [CONST.SEARCH.GROUP_BY.TAG]: 'Etykieta',
+ [CONST.SEARCH.GROUP_BY.TAG]: 'Tag',
[CONST.SEARCH.GROUP_BY.MONTH]: 'Miesiąc',
},
feed: 'Kanał',
@@ -8106,6 +8106,7 @@ Oto *paragon testowy*, który pokazuje, jak to działa:`,
errors: {addMember: 'Nie można dodać tego członka. Spróbuj ponownie.'},
},
domainAdmins: 'Administratorzy domeny',
+ domainMembers: 'Członkowie domeny',
},
gps: {
disclaimer: 'Użyj GPS, aby utworzyć wydatek z Twojej podróży. Stuknij „Start” poniżej, aby rozpocząć śledzenie.',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 6251c0b9..21a623f4 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -6956,7 +6956,7 @@ Exija detalhes de despesas como recibos e descrições, defina limites e padrõe
groupBy: {
[CONST.SEARCH.GROUP_BY.FROM]: 'De',
[CONST.SEARCH.GROUP_BY.CARD]: 'Cartão',
- [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'ID da retirada',
+ [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'ID de saque',
[CONST.SEARCH.GROUP_BY.CATEGORY]: 'Categoria',
[CONST.SEARCH.GROUP_BY.TAG]: 'Etiqueta',
[CONST.SEARCH.GROUP_BY.MONTH]: 'Mês',
@@ -8110,6 +8110,7 @@ Aqui está um *recibo de teste* para mostrar como funciona:`,
errors: {addMember: 'Não foi possível adicionar este membro. Tente novamente.'},
},
domainAdmins: 'Administradores de domínio',
+ domainMembers: 'Membros do domínio',
},
gps: {
disclaimer: 'Use o GPS para criar uma despesa a partir da sua viagem. Toque em Iniciar abaixo para começar o rastreamento.',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 4bfcf7b5..54c6c3ed 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -6802,7 +6802,7 @@ ${reportName}
purchaseCurrency: '购买货币',
groupBy: {
[CONST.SEARCH.GROUP_BY.FROM]: '来自',
- [CONST.SEARCH.GROUP_BY.CARD]: '卡片',
+ [CONST.SEARCH.GROUP_BY.CARD]: '卡',
[CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: '提现 ID',
[CONST.SEARCH.GROUP_BY.CATEGORY]: '类别',
[CONST.SEARCH.GROUP_BY.TAG]: '标签',
@@ -7907,6 +7907,7 @@ ${reportName}
},
members: {title: '成员', findMember: '查找成员', addMember: '添加成员', email: '电子邮箱地址', errors: {addMember: '无法添加此成员。请重试。'}},
domainAdmins: '域管理员',
+ domainMembers: '域成员',
},
gps: {
disclaimer: '使用 GPS 根据您的行程创建报销。点击下方的“开始”以开始跟踪。',
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
|
@dubielzyk-expensify we are still waiting for the close account and add member flow to be added but this will be the Release 2 PR that enables it for the users so the one for you to help review 🙌 |
|
🚧 @mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
|
No strong feelings from me. Definitely not against it, but also don't feel like it's super critical. If you think it would save people some time/confusion/headache though, I'm down. |
|
Neat idea for sure, I also don't feel too strongly though. If it's easy to implement, seems like it would be a nice UX improvement. |
|
Cool. Let's hear from @war-in and if not, the we'll leave it as is 👍 |
|
It can be fairly easily implemented - done in the latest commit Screen.Recording.2026-01-30.at.10.29.52.mov |
| <TextInput | ||
| ref={ref} | ||
| onChangeText={(value: string) => { | ||
| onInputChange?.(value.replaceAll('@', '')); |
There was a problem hiding this comment.
I think we can add an explanation of why we replace @
There was a problem hiding this comment.
And do we really need a separate Input component?
I suppose we can use onInputChange param with this logic for InputWrapper with InputComponent={TextInput}
There was a problem hiding this comment.
we could do that but we would have to keep the email state in DomainAddMemberPage which we don't do currently
// Inside DomainAddMemberPage
const [email, setEmail] = useState('');
const handleEmailChange = (value: string) => {
setEmail(value.replaceAll('@', ''));
};
// ...
<InputWrapper
InputComponent={TextInput}
inputID={INPUT_IDS.EMAIL}
value={email}
onChangeText={handleEmailChange}
// ... rest of props
/>I think the separate input component fits well but let's ask @situchan for thoughts?
There was a problem hiding this comment.
Actually, do we need to use the same logic on DomainAddAdminPage screen?
If yes, then separate TextInput looks good!
There was a problem hiding this comment.
I am fine with current change
There was a problem hiding this comment.
Actually, do we need to use the same logic on DomainAddAdminPage screen?
Unfortunately, no :/
This screen has only one text input and doesn't use selection list like the add admin page does
There was a problem hiding this comment.
Okay then
let's leave it as is!
There was a problem hiding this comment.
after this message I started experimenting with masked input but I think this might be an overkill for our usecase
Members "beta" - add Domain members buttonMembers "beta" - add Domain members button
Members "beta" - add Domain members buttonMembers "beta" - add Domain members button
# Conflicts: # src/languages/de.ts # src/languages/fr.ts # src/languages/it.ts # src/languages/ja.ts # src/languages/nl.ts # src/languages/pl.ts # src/languages/pt-BR.ts # src/languages/zh-hans.ts
Members "beta" - add Domain members buttonMembers "beta" - add Domain members button
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppios.moviOS: mWeb Safarimsafari.movMacOS: Chrome / Safariweb.mov |
|
This is limitation in RN so not blocker native.mov |
|
🚧 @mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚀 Deployed to staging by https://github.com/mountiny in version: 9.3.16-0 🚀
|
|
Hi @war-in Do we need QA for this? Thanks |
|
@mountiny do you have tests for |
|
🚀 Deployed to production by https://github.com/lakchote in version: 9.3.16-9 🚀
|

Explanation of Change
Fixed Issues
$ #79901
PROPOSAL:
Tests
Offline tests
QA Steps
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari