[Submit] Submit button with manager email prompt#87998
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 |
|
Note Confirm to check if we also need to show popup with submit action on Search - submitMoneyRequestOnSearch |
|
What's holding this up? |
|
Ideally we should hold it for oboarding PR since there is no way to create submit WS for now. I can resume the progress today. |
You can create one from the oldDot pricing page |
|
I see. That's helpful 👍 currently I need to checkout onboarding existing PR to onboard on create one then switching back 😅 |
|
@MelvinBot Assign yourself to this PR, merge main and revert the changes from Mobile-Expensify. |
|
Done! I've:
|
|
⏱️ Ran out of time before I could finish. This usually means the task was too complex or I got stuck exploring. Please try again with a more specific request or post in #melvinbot-ai. |
|
Will work on this issue this weekend, currently focusing on Gate Submit feature PR. |
|
@hungvu193 have you picked this back up? |
|
I'm on it now. |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
@MelvinBot Can you check if ESlint comes from this PR? |
|
Yes — the ESLint failure is from this PR. All four files flagged by the ESLint check are files this PR modifies, and each exceeds its
Fix: remove the newly-added |
|
@MelvinBot review |
|
@abzokhattab Over to you 🙇 Please ignore this case for now, it's being fixed on our BE |
|
@MelvinBot fix the Eslint |
|
No code change needed — the refactor on this branch already resolved the ESLint failure. The failing ESLint run (on commit
— in Since that run, the branch was refactored (latest commit
|
🦜 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 dcd551bb1da..febfea0f695 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -1710,8 +1710,8 @@ const translations: TranslationDeepObject<typeof en> = {
subtitle: 'Wählen Sie ein Arbeitsbereichsmitglied aus oder geben Sie die E-Mail-Adresse der Person ein, die diese Einreichung erhalten soll.',
emailLabel: 'E-Mail-Adresse',
workspaceMembers: 'Workspace-Mitglieder',
- sendExpense: 'Senden Sie Ihre Ausgabe an jede beliebige Person',
- sendExpenseSubtitle: 'Laden Sie jede beliebige Person zu Expensify ein, indem Sie ihre E-Mail-Adresse oder Telefonnummer verwenden.',
+ sendExpense: 'Senden Sie Ihre Ausgabe an jede Person',
+ sendExpenseSubtitle: 'Laden Sie jede Person zu Expensify ein, indem Sie ihre E-Mail-Adresse oder Telefonnummer verwenden.',
},
},
transactionMerge: {
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 0826a8caa25..5aeae2575c1 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -1668,7 +1668,7 @@ const translations: TranslationDeepObject<typeof en> = {
subtitle: 'Elige a un miembro del espacio de trabajo o introduce la dirección de correo electrónico de quien debería recibir este envío.',
emailLabel: 'Dirección de correo electrónico',
workspaceMembers: 'Miembros del espacio de trabajo',
- sendExpense: 'Envía tu gasto a cualquier persona',
+ sendExpense: 'Envía tu gasto a cualquiera',
sendExpenseSubtitle: 'Invita a cualquiera a Expensify usando su dirección de correo electrónico o número de teléfono.',
},
},
@@ -1760,7 +1760,6 @@ const translations: TranslationDeepObject<typeof en> = {
}
},
[CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_MARK_AS_DONE]: (actor, actorType, _eta, _etaType) => {
- // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Esperando a que <strong>tú</strong> lo marques como listo.`;
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index dd1e9ca169a..8817a764385 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -1,6 +1,7 @@
/**
* _____ __ __
* / ___/__ ___ ___ _______ _/ /____ ___/ /
+ * / (_ / -_) _ \/ -_) __/ _ \`/ __/ -_) _ /
* \___/\__/_//_/\__/_/ \_,_/\__/\__/\_,_/
*
* This file was automatically generated. Please consider these alternatives before manually editing it:
@@ -862,7 +863,7 @@ const translations: TranslationDeepObject<typeof en> = {
beginningOfChatHistory: (users: string) => `Cette discussion est avec ${users}.`,
beginningOfChatHistoryPolicyExpenseChat: (workspaceName: string, submitterDisplayName: string) =>
`C’est ici que <strong>${submitterDisplayName}</strong> soumettra des dépenses à <strong>${workspaceName}</strong>. Utilisez simplement le bouton +.`,
- beginningOfChatHistoryPolicyExpenseChatTrack: 'C\u2019est ici que vous suivrez vos dépenses',
+ beginningOfChatHistoryPolicyExpenseChatTrack: 'C’est ici que vous suivrez vos dépenses',
beginningOfChatHistorySelfDM: 'Ceci est votre espace personnel. Utilisez-le pour vos notes, tâches, brouillons et rappels.',
beginningOfChatHistorySystemDM: 'Bienvenue ! Procédons à la configuration.',
chatWithAccountManager: 'Discutez avec votre gestionnaire de compte ici',
@@ -1712,7 +1713,7 @@ const translations: TranslationDeepObject<typeof en> = {
bulkDuplicateLimit: `Vous pouvez dupliquer jusqu’à ${CONST.SEARCH.BULK_DUPLICATE_LIMIT} dépenses à la fois. Veuillez sélectionner moins de dépenses et réessayer.`,
deleted: 'Supprimé',
submitReportTo: {
- subtitle: 'Choisissez un membre de l’espace de travail ou saisissez une adresse e-mail de la personne qui doit recevoir cette soumission.',
+ subtitle: 'Choisissez un membre de l’espace de travail ou saisissez l’adresse e-mail de la personne qui doit recevoir cette soumission.',
emailLabel: 'Adresse e-mail',
workspaceMembers: 'Membres de l’espace de travail',
sendExpense: 'Envoyez votre dépense à n’importe qui',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 0e738b2fe8e..a67d044a5c6 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -1705,9 +1705,9 @@ const translations: TranslationDeepObject<typeof en> = {
bulkDuplicateLimit: `Puoi duplicare fino a ${CONST.SEARCH.BULK_DUPLICATE_LIMIT} spese alla volta. Seleziona meno spese e riprova.`,
deleted: 'Eliminato',
submitReportTo: {
- subtitle: 'Scegli un membro dello spazio di lavoro o inserisci l’indirizzo email di chi deve ricevere questa richiesta.',
+ subtitle: 'Scegli un membro dello spazio di lavoro o inserisci l’indirizzo email della persona che dovrebbe ricevere questa richiesta.',
emailLabel: 'Indirizzo email',
- workspaceMembers: 'Membri dell’area di lavoro',
+ workspaceMembers: 'Membri dello spazio di lavoro',
sendExpense: 'Invia la tua spesa a chiunque',
sendExpenseSubtitle: 'Invita chiunque su Expensify usando il suo indirizzo email o numero di telefono.',
},
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index d4bf64673fd..9e97db747fa 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -1688,7 +1688,7 @@ const translations: TranslationDeepObject<typeof en> = {
bulkDuplicateLimit: `一度に複製できる経費は最大で ${CONST.SEARCH.BULK_DUPLICATE_LIMIT} 件です。経費の数を減らして、もう一度お試しください。`,
deleted: '削除済み',
submitReportTo: {
- subtitle: 'この申請の受信者として、ワークスペースメンバーを選択するか、メールアドレスを入力してください。',
+ subtitle: 'この申請を受け取る対象として、ワークスペースメンバーを選択するか、メールアドレスを入力してください。',
emailLabel: 'メールアドレス',
workspaceMembers: 'ワークスペースメンバー',
sendExpense: '経費を誰にでも送信できます',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 191a57c0cd6..739f8848028 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -1700,9 +1700,9 @@ const translations: TranslationDeepObject<typeof en> = {
bulkDuplicateLimit: `Je kunt maximaal ${CONST.SEARCH.BULK_DUPLICATE_LIMIT} uitgaven tegelijk dupliceren. Selecteer minder uitgaven en probeer het opnieuw.`,
deleted: 'Verwijderd',
submitReportTo: {
- subtitle: 'Kies een werkruimtelid of voer het e-mailadres in van degene die deze inzending moet ontvangen.',
+ subtitle: 'Kies een werkruimte-lid of voer het e-mailadres in van degene die deze inzending moet ontvangen.',
emailLabel: 'E-mailadres',
- workspaceMembers: 'Werkruimteleden',
+ workspaceMembers: 'Werkruimtelede',
sendExpense: 'Stuur je uitgave naar iedereen',
sendExpenseSubtitle: 'Nodig iedereen uit voor Expensify met hun e-mailadres of telefoonnummer.',
},
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 1775d62dced..2c08f55a09e 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -1704,8 +1704,8 @@ const translations: TranslationDeepObject<typeof en> = {
subtitle: 'Wybierz członka przestrzeni roboczej lub wpisz adres e‑mail osoby, która powinna otrzymać to zgłoszenie.',
emailLabel: 'Adres e-mail',
workspaceMembers: 'Członkowie przestrzeni roboczej',
- sendExpense: 'Wyślij swój wydatek do dowolnej osoby',
- sendExpenseSubtitle: 'Zaproś dowolną osobę do Expensify, używając jej adresu e-mail lub numeru telefonu.',
+ sendExpense: 'Wyślij swój wydatek do kogokolwiek',
+ sendExpenseSubtitle: 'Zaproś dowolną osobę do Expensify, używając jej adresu e‑mail lub numeru telefonu.',
},
},
transactionMerge: {
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index bcd21960eb4..2705397cfa0 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -1698,11 +1698,11 @@ const translations: TranslationDeepObject<typeof en> = {
bulkDuplicateLimit: `Você pode duplicar até ${CONST.SEARCH.BULK_DUPLICATE_LIMIT} despesas por vez. Selecione menos despesas e tente novamente.`,
deleted: 'Excluído',
submitReportTo: {
- subtitle: 'Escolha um membro do espaço de trabalho ou digite o e-mail de quem deve receber este envio.',
+ subtitle: 'Escolha um membro do workspace ou insira o endereço de e-mail de quem deve receber este envio.',
emailLabel: 'Endereço de e-mail',
workspaceMembers: 'Membros do workspace',
sendExpense: 'Envie sua despesa para qualquer pessoa',
- sendExpenseSubtitle: 'Convide qualquer pessoa para o Expensify usando o endereço de e-mail ou número de telefone.',
+ sendExpenseSubtitle: 'Convide qualquer pessoa para o Expensify usando o endereço de e-mail ou o número de telefone.',
},
},
transactionMerge: {
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index d97a93d85ba..4dfd9e7997e 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -1649,11 +1649,11 @@ const translations: TranslationDeepObject<typeof en> = {
bulkDuplicateLimit: `您一次最多可以复制 ${CONST.SEARCH.BULK_DUPLICATE_LIMIT} 笔报销。请减少选择的报销数量后重试。`,
deleted: '已删除',
submitReportTo: {
- subtitle: '选择一个工作区成员,或输入应接收此提交的收件人邮箱地址。',
+ subtitle: '选择一个工作区成员,或输入应接收此提交的电子邮箱地址。',
emailLabel: '电子邮箱地址',
workspaceMembers: '工作区成员',
sendExpense: '将你的报销发送给任何人',
- sendExpenseSubtitle: '使用电子邮箱地址或电话号码邀请任何人加入 Expensify。',
+ sendExpenseSubtitle: '使用对方的邮箱地址或电话号码邀请任何人加入 Expensify。',
},
},
transactionMerge: {
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppScreen.Recording.2026-06-16.at.19.56.49.movScreen.Recording.2026-06-16.at.19.54.47.moviOS: mWeb SafariScreen.Recording.2026-06-16.at.20.03.38.movMacOS: Chrome / SafariScreen.Recording.2026-06-16.at.18.43.56.movScreen.Recording.2026-06-16.at.18.44.38.mov |
abzokhattab
left a comment
There was a problem hiding this comment.
Great work... LGTM 🚀🚀
|
Let's just fix the failing pipeline @hungvu193 |
|
I just have one small question to clarify: The current member is selected by default when opening the submit list ... is that expected? |
|
@MelvinBot Help me fix the eslint |
…accountID Co-authored-by: Hans Vu <hungvu193@users.noreply.github.com>
|
Fixed the failing ESLint check. The hasSelectedSubmitToMember,
- selectedSubmitToMember,
+ selectedSubmitToMember?.accountID,
managerEmail, |
|
⏱️ Ran out of time before I could finish. This usually means the task was too complex or I got stuck exploring. Please try again with a more specific request or post in #melvinbot-ai. |
|
@MelvinBot Resolve the conflicts please. |
|
🤖 I attempted to merge the latest 10 files conflict. They split into two groups: 🟢 Mechanical (safe — additive import/case/route unions):
🔴 Needs your judgment (overlapping logic — I won't guess):
To redo the merge locally: git checkout feat-87264
git fetch origin main
git merge origin/main
# resolve the 10 files, then:
git commit && git pushI left your branch untouched (no partial merge pushed). Once you've resolved the two 🔴 files I'm happy to take another pass at validating — just re-tag me. |
Explanation of Change
Add a new ReportSubmitTo Popover that will be shown when a member of submit workspace try to submit an expense.
Design doc section
Fixed Issues
$ #87264
PROPOSAL: N/A
Tests
Same as QA Steps
Offline tests
N/A
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
Prerequisite: You're a member of a submit workspace.
Test 1: Expense view
Test 2: Search view
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand 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
Screen.Recording.2026-05-27.at.17.19.12.mov
Android: mWeb Chrome
Screen.Recording.2026-05-27.at.17.22.55.mov
iOS: Native
Screen.Recording.2026-05-27.at.17.09.33.mov
iOS: mWeb Safari
Screen.Recording.2026-05-27.at.17.11.41.mov
MacOS: Chrome / Safari
Screen.Recording.2026-05-26.at.22.30.54.mov