Show pending BYOC transactions in NewDot#91231
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 |
This comment was marked as outdated.
This comment was marked as outdated.
There was a problem hiding this comment.
💡 Codex Review
App/src/pages/ReportDetailsPage.tsx
Line 1046 in 83a24c8
Update the showDeleteModal callback dependencies to include iouTransaction (or a derived pending flag). The callback now branches on isPending(iouTransaction), but iouTransaction is not in the dependency array, so if Onyx updates the transaction status while this page stays mounted (for example, pending → posted after sync), the modal can show stale copy (deleteConfirmationPendingBYOC vs normal delete text) until another dependency changes.
ℹ️ 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 9d2181f9..2fb383fa 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -1669,6 +1669,7 @@ const translations: TranslationDeepObject<typeof en> = {
},
bulkDuplicateLimit: `Sie können bis zu ${CONST.SEARCH.BULK_DUPLICATE_LIMIT} Ausgaben gleichzeitig duplizieren. Bitte wählen Sie weniger Ausgaben aus und versuchen Sie es erneut.`,
deleted: 'Gelöscht',
+ deleteConfirmationPendingBYOC: 'Möchten Sie diese Ausgabe wirklich löschen? Sie ist ausstehend und wir importieren sie möglicherweise erneut, sobald sie verbucht wird.',
},
transactionMerge: {
listPage: {
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 27db271a..7ffce518 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -1625,6 +1625,7 @@ const translations: TranslationDeepObject<typeof en> = {
prompt: 'Habilita el seguimiento de impuestos en el espacio de trabajo para editar los detalles del gasto o eliminar el impuesto de este gasto.',
confirmText: 'Eliminar impuesto',
},
+ deleteConfirmationPendingBYOC: '¿Seguro que quieres eliminar este gasto? Está pendiente y es posible que lo volvamos a importar si se contabiliza.',
},
transactionMerge: {
listPage: {
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 76c7ab07..515a336a 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -1673,6 +1673,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é',
+ deleteConfirmationPendingBYOC: 'Voulez-vous vraiment supprimer cette dépense ? Elle est en attente et nous pourrions l’importer à nouveau si elle est comptabilisée.',
},
transactionMerge: {
listPage: {
diff --git a/src/languages/it.ts b/src/languages/it.ts
index f4e72a6a..a8d2dc05 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -1667,6 +1667,7 @@ 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',
+ deleteConfirmationPendingBYOC: 'Sei sicuro di voler eliminare questa spesa? È in sospeso e potremmo importarla di nuovo se viene contabilizzata.',
},
transactionMerge: {
listPage: {
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index b2e0e4c5..218ccc44 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -1647,6 +1647,7 @@ const translations: TranslationDeepObject<typeof en> = {
},
bulkDuplicateLimit: `一度に複製できる経費は最大で ${CONST.SEARCH.BULK_DUPLICATE_LIMIT} 件です。経費の数を減らして、もう一度お試しください。`,
deleted: '削除済み',
+ deleteConfirmationPendingBYOC: 'この経費を削除してもよろしいですか?現在保留中のため、処理が完了すると再度取り込まれる可能性があります。',
},
transactionMerge: {
listPage: {
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 8821e9ab..52d7d716 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -1662,6 +1662,7 @@ 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',
+ deleteConfirmationPendingBYOC: 'Weet je zeker dat je deze uitgave wilt verwijderen? Hij is in behandeling en we kunnen hem opnieuw importeren als hij wordt geboekt.',
},
transactionMerge: {
listPage: {
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index cefba7c6..36173d73 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -1663,6 +1663,7 @@ const translations: TranslationDeepObject<typeof en> = {
},
bulkDuplicateLimit: `Możesz jednocześnie zduplikować maksymalnie ${CONST.SEARCH.BULK_DUPLICATE_LIMIT} wydatków. Wybierz mniej wydatków i spróbuj ponownie.`,
deleted: 'Usunięto',
+ deleteConfirmationPendingBYOC: 'Na pewno chcesz usunąć ten wydatek? Jest w toku i możemy go ponownie zaimportować, jeśli zostanie zaksięgowany.',
},
transactionMerge: {
listPage: {
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 55b2c640..09aa23d6 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -1660,6 +1660,7 @@ 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',
+ deleteConfirmationPendingBYOC: 'Tem certeza de que quer excluir esta despesa? Ela está pendente e podemos importá-la novamente se for lançada.',
},
transactionMerge: {
listPage: {
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 6a2a77ba..0e9e8ebb 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -1613,6 +1613,7 @@ const translations: TranslationDeepObject<typeof en> = {
taxDisabledAlert: {title: '税费已禁用', prompt: '请在工作区中启用税费跟踪,以便编辑此报销的详细信息或从该报销中删除税费。', confirmText: '删除税费'},
bulkDuplicateLimit: `您一次最多可以复制 ${CONST.SEARCH.BULK_DUPLICATE_LIMIT} 笔报销。请减少选择的报销数量后重试。`,
deleted: '已删除',
+ deleteConfirmationPendingBYOC: '您确定要删除这笔报销吗?它目前处于待处理状态,如果入账后,我们可能会再次导入。',
},
transactionMerge: {
listPage: {
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
This comment was marked as outdated.
This comment was marked as outdated.
|
Codex Review: Didn't find any major issues. Already looking forward to the next diff. ℹ️ About Codex in GitHubCodex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
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". |
@daledah Could you please add Tests and QA steps for all the above cases? |
This comment was marked as outdated.
This comment was marked as outdated.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 621e27789d
ℹ️ 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".
This comment was marked as outdated.
This comment was marked as outdated.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2815c1f9d8
ℹ️ 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".
|
@codex review |
|
Codex Review: Didn't find any major issues. Nice work! ℹ️ About Codex in GitHubCodex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
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". |
|
🚧 joekaufmanexpensify has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
This seems to be fixed now! Can't reproduce anymore on the new adhoc 🎉 2026-07-06_17-13-32.mp4 |
joekaufmanexpensify
left a comment
There was a problem hiding this comment.
Working well from my perspective 👍
|
🚧 amyevans 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! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/amyevans in version: 9.4.32-0 🚀
|
|
@daledah @sobitneupane @joekaufmanexpensify Can this one please be tested internally because of the Precondition: |
|
Yeah, I can do internal QA today. |
|
checked off! |
|
Oh good find, definitely agree that's a little odd. What do you think about this instead:
|
|
Whoops, I meant to suggest something in my message above, too. Largely agree with what you posted, but I think maybe we can tighten up the first sentence even further. What do you think about what we originally had in the design doc, which is this:
|
|
Ah yes, I should've checked the doc 🤦♀️. @daledah could you open up a follow up PR with that tweak please? |
|
🚀 Deployed to production by https://github.com/grgia in version: 9.4.32-3 🚀
Bundle Size Analysis (Sentry): |
|
@amyevans @sobitneupane we have the follow up PR here |

Explanation of Change
Show pending BYOC card transactions in NewDot UI
Fixed Issues
$ #91098
PROPOSAL:
Tests
Precondition: Log in with an account that has pending BYOC transactions.
Case 1 - Pending indicator in TypeCell
CreditCardHourglassiconCase 2 - Report preview shows "Pending"
Case 3 - Delete confirmation modal copy for pending BYOC transactions
Case 4 - Pending next steps message in expense detail view
Case 5 - Approve button hidden
Case 6 - Delete confirmation copy for mixed pending/non-pending selection
Case 7 - Submission blocking for all-pending transactions (BYOC)
8 - Delete confirmation copy for mixed pending/non-pending selection
Offline tests
Same as tests
QA Steps
Same as tests
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
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari
web.mov