Add Accounting option to Expensify Card details + Update design - #96923
Conversation
…params and add DYNAMIC_EXPENSIFY_CARD_DETAILS entry
|
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 |
|
@lakchote Please run translate workflow #96923 (comment) |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6a33ba83a1
ℹ️ 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".
Done |
🦜 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 2b4c88ee9c3..7f775988246 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -529,6 +529,7 @@ const translations: TranslationDeepObject<typeof en> = {
unableToDisplayChart: 'Diagram kann nicht angezeigt werden',
webGLNotSupported: 'Ihr Browser unterstützt WebGL nicht. Bitte aktivieren Sie es oder wechseln Sie den Browser.',
apiKey: 'API-Schlüssel',
+ exportsTo: 'Exportiert nach',
},
socials: {
podcast: 'Folgen Sie uns auf Podcast',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 293750179f1..e2797936021 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -482,6 +482,7 @@ const translations: TranslationDeepObject<typeof en> = {
tagGLCode: 'Etiquetar código GL',
off: 'Desactivado',
noResultsFoundSubtitle: 'Sin resultados. Intenta ajustar tus filtros o la búsqueda.',
+ exportsTo: 'Exporta a',
},
socials: {
podcast: 'Síguenos en Podcast',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 86ad445d9ff..b1dc4fdc070 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -529,6 +529,7 @@ const translations: TranslationDeepObject<typeof en> = {
unableToDisplayChart: 'Impossible d’afficher le graphique',
webGLNotSupported: 'Votre navigateur ne prend pas en charge WebGL. Veuillez l’activer ou changer de navigateur.',
apiKey: 'Clé API',
+ exportsTo: 'Exports vers',
},
socials: {
podcast: 'Suivez-nous sur Podcast',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 1647e4c0e87..a7405122d41 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -529,6 +529,7 @@ const translations: TranslationDeepObject<typeof en> = {
unableToDisplayChart: 'Impossibile visualizzare il grafico',
webGLNotSupported: 'Il tuo browser non supporta WebGL. Abilitalo oppure passa a un altro browser.',
apiKey: 'Chiave API',
+ exportsTo: 'Esporta in',
},
socials: {
podcast: 'Seguici su Podcast',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 7a8dc0136b0..fe4f744eba8 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -528,6 +528,7 @@ const translations: TranslationDeepObject<typeof en> = {
unableToDisplayChart: 'グラフを表示できません',
webGLNotSupported: 'お使いのブラウザは WebGL に対応していません。有効にするか、別のブラウザに切り替えてください。',
apiKey: 'API キー',
+ exportsTo: 'エクスポート先',
},
socials: {
podcast: 'ポッドキャストでフォロー',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 43980fc8472..9ae033e07cc 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -528,6 +528,7 @@ const translations: TranslationDeepObject<typeof en> = {
unableToDisplayChart: 'Grafiek kan niet worden weergegeven',
webGLNotSupported: 'Je browser ondersteunt WebGL niet. Schakel het in of gebruik een andere browser.',
apiKey: 'API-sleutel',
+ exportsTo: 'Exporteert naar',
},
socials: {
podcast: 'Volg ons op Podcast',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 9b4bcdc9d1d..5816f9397b1 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -528,6 +528,7 @@ const translations: TranslationDeepObject<typeof en> = {
unableToDisplayChart: 'Nie można wyświetlić wykresu',
webGLNotSupported: 'Twoja przeglądarka nie obsługuje WebGL. Włącz ją albo zmień przeglądarkę.',
apiKey: 'Klucz API',
+ exportsTo: 'Eksporty do',
},
socials: {
podcast: 'Śledź nas na Podcast',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 4f1ee271622..e97fd30c4a5 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -527,6 +527,7 @@ const translations: TranslationDeepObject<typeof en> = {
unableToDisplayChart: 'Não foi possível exibir o gráfico',
webGLNotSupported: 'Seu navegador não é compatível com WebGL. Ative-o ou mude de navegador.',
apiKey: 'Chave de API',
+ exportsTo: 'Exportações para',
},
socials: {
podcast: 'Siga-nos no Podcast',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index eed8b03bf3c..e32ea0b2c0d 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -524,6 +524,7 @@ const translations: TranslationDeepObject<typeof en> = {
unableToDisplayChart: '无法显示图表',
webGLNotSupported: '您的浏览器不支持 WebGL。请启用该功能或更换浏览器。',
apiKey: 'API 密钥',
+ exportsTo: '导出到',
},
socials: {
podcast: '在播客上关注我们',
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
| // The cardID param is optional because some entry screens e.g. `SCREENS.WORKSPACE.DYNAMIC_COMPANY_CARD_DETAILS` | ||
| // already has the cardID in their path and we don't want to double pass the cardID. | ||
| getRoute: (cardID?: string) => `edit/export${cardID ? `/${encodeURIComponent(cardID)}` : ''}` as const, | ||
| path: 'edit/export/:feed/:cardID', |
There was a problem hiding this comment.
@s77rt Why do we need to introduce :feed param here?
There was a problem hiding this comment.
@MelvinBot Could you explain the purpose of new :feed param?
|
The Why it's new here: previously the route was |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppScreen.Recording.2026-07-26.at.18.43.18.movAndroid: mWeb ChromeiOS: HybridAppScreen.Recording.2026-07-26.at.18.42.21.moviOS: mWeb SafariMacOS: Chrome / SafariScreen.Recording.2026-07-26.at.18.14.02.mov |
I'd say yes @heyjennahay @JmillsExpensify you confirm? |
|
Yes, we should update all the existing connections as well, though we might want to do that in a separate PR since we need to tackle all integrations, including QuickBooks Desktop too. |
|
^ cc @s77rt we should do that as a follow-up |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 lakchote 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/lakchote in version: 9.4.45-0 🚀
|
Help site review — no changes requiredI reviewed this PR against the help site files under What this PR changes (user-facing):
Why no docs change is required:
If Rillet (or per-Expensify-Card export accounts) later graduates to a publicly documented integration, that would be the point to add a dedicated help article — but nothing is required for this UI change. @s77rt — since no docs changes are required, I didn't create a help site PR (so there's nothing to mark |
Let's handle this on its own issue |
|
Deploy Blocker #97178 was identified to be related to this PR. |
|
That does not look related |
|
🚀 Deployed to production by https://github.com/marcaaron in version: 9.4.45-14 🚀
Bundle Size Analysis (Sentry): |




Explanation of Change
Fixed Issues
$ #95951
PROPOSAL:
Tests
Screen.Recording.2026-07-24.at.6.15.41.AM.mov
Offline tests
Same as Tests
QA Steps
Same as Tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, 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.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