Add Export current view - #93060
Conversation
🦜 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 e95e462a5b4..01a36aba1c1 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -9476,6 +9476,7 @@ Hier ist ein *Testbeleg*, um dir zu zeigen, wie es funktioniert:`,
expenseLevelExport: 'Alle Daten – Ausgabenebene',
exportInProgress: 'Export wird ausgeführt',
conciergeWillSend: 'Concierge wird dir die Datei in Kürze senden.',
+ currentView: 'Aktuelle Ansicht exportieren',
},
exportDownload: {
preparingTitle: 'Preparing download...',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index cabeef3d992..9a6a5bbbe67 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -9635,6 +9635,7 @@ ${amount} para ${merchant} - ${date}`,
expenseLevelExport: 'Todos los datos - a nivel de gasto',
exportInProgress: 'Exportación en curso',
conciergeWillSend: 'Concierge te enviará el archivo en breve.',
+ currentView: 'Exportar vista actual',
},
exportDownload: {
preparingTitle: 'Preparando descarga...',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index fcdffae64dd..239f2652c2d 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -9508,6 +9508,7 @@ Voici un *reçu test* pour vous montrer comment ça fonctionne :`,
expenseLevelExport: 'Toutes les données - niveau dépense',
exportInProgress: 'Export en cours',
conciergeWillSend: 'Concierge vous enverra le fichier sous peu.',
+ currentView: 'Exporter la vue actuelle',
},
exportDownload: {
preparingTitle: 'Preparing download...',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index c45a5615b4b..854c1236f23 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -9464,6 +9464,7 @@ Ecco una *ricevuta di prova* per mostrarti come funziona:`,
expenseLevelExport: 'Tutti i dati - livello spesa',
exportInProgress: 'Esportazione in corso',
conciergeWillSend: 'Concierge ti invierà il file a breve.',
+ currentView: 'Esporta vista corrente',
},
exportDownload: {
preparingTitle: 'Preparing download...',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index d12c6a42ec5..8ab28f5313a 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -9342,6 +9342,7 @@ ${reportName}
expenseLevelExport: 'すべてのデータ - 経費レベル',
exportInProgress: 'エクスポート処理中',
conciergeWillSend: 'Conciergeがまもなくファイルを送信します。',
+ currentView: '現在のビューをエクスポート',
},
exportDownload: {
preparingTitle: 'Preparing download...',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index feafe70ce5f..d0759964c73 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -9431,6 +9431,7 @@ Hier is een *proefbon* om je te laten zien hoe het werkt:`,
expenseLevelExport: 'Alle gegevens - uitgaveniveau',
exportInProgress: 'Export bezig',
conciergeWillSend: 'Concierge stuurt je het bestand zo meteen.',
+ currentView: 'Huidige weergave exporteren',
},
exportDownload: {
preparingTitle: 'Preparing download...',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 977248589dd..df8a8d30010 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -9415,6 +9415,7 @@ Oto *paragon testowy*, żeby pokazać Ci, jak to działa:`,
expenseLevelExport: 'Wszystkie dane – poziom wydatku',
exportInProgress: 'Trwa eksport',
conciergeWillSend: 'Concierge wkrótce wyśle Ci plik.',
+ currentView: 'Eksportuj bieżący widok',
},
exportDownload: {
preparingTitle: 'Preparing download...',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index e498d8b8090..28646e5cde9 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -9423,6 +9423,7 @@ Aqui está um *comprovante de teste* para mostrar como funciona:`,
expenseLevelExport: 'Todos os dados - nível de despesa',
exportInProgress: 'Exportação em andamento',
conciergeWillSend: 'O Concierge enviará o arquivo para você em breve.',
+ currentView: 'Exportar visão atual',
},
exportDownload: {
preparingTitle: 'Preparing download...',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 49a40c86b0e..cfd99cecc68 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -9169,6 +9169,7 @@ ${reportName}
expenseLevelExport: '所有数据 - 报销级别',
exportInProgress: '导出进行中',
conciergeWillSend: 'Concierge 将很快把文件发送给你。',
+ currentView: '导出当前视图',
},
exportDownload: {
preparingTitle: 'Preparing download...',
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
- Drop the narrowing `as SearchQueryJSON['columns']` assertion in getCSVExportParameters; serializeQueryJSONForBackend is generic and infers the column type, so the cast is unnecessary and pushed the file one over the eslint-seatbelt no-unsafe-type-assertion baseline. - Mock getValidGroupBy/getColumnsToShow/getSearchColumnTranslationKey in useSearchBulkActionsDeleteTest so getExportOptions no longer throws. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
|
|
@marcochavezf Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 44951e2482
ℹ️ About Codex in GitHub
Your team has set up Codex to 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 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppHaving issues with android build Android: mWeb ChromeScreen.Recording.2026-06-13.at.3.19.37.PM.moviOS: HybridAppScreen.Recording.2026-06-13.at.1.44.58.PM.moviOS: mWeb SafariScreen.Recording.2026-06-13.at.1.55.51.PM.movMacOS: Chrome / SafariScreen.Recording.2026-06-13.at.10.01.51.AM.movScreen.Recording.2026-06-13.at.6.57.18.AM.movScreen.Recording.2026-06-13.at.6.38.18.AM.mov |
thesahindia
left a comment
There was a problem hiding this comment.
Looks good. I couldn't reproduce the previous issues.
|
🚧 @marcochavezf has triggered a test Expensify/App build. You can view the workflow run here. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/marcochavezf in version: 9.4.9-0 🚀
Bundle Size Analysis (Sentry): |
Help site reviewI reviewed the changes in this PR. They introduce a new Export current view option in the bulk Export menu on the Spend page (Search), which downloads a CSV matching the columns currently displayed (configured via Display > Edit columns) instead of a fixed template. The option appears on the ungrouped Expenses and Reports views and is hidden when a Group by filter is applied. Help site changes are required, and they were already drafted when the first attempt (Expensify/App#90714) merged. Rather than open a duplicate, I've updated that existing draft to reference this PR (#90714 was reverted and re-landed here as this PR) and lifted the product HOLD now that the change has shipped: 📝 Draft help site PR: Expensify/App#92191 It updates three articles: The PR is a draft, has the @rlinoz, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR |
|
🚀 Deployed to production by https://github.com/puneetlath in version: 9.4.9-0 🚀
|
|
🤖 I was unable to capture a live screenshot: browser verification runs in a CI environment where sign-in to dev NewDot is blocked (Cloudflare bot detection returns I did confirm the feature is present at the code level on the merged commit ( "Export current view" is wired into the Reports Export menu. The Export dropdown is built in
Why no screenshot / what was attemptedThe To get an actual on-web screenshot, this needs to be run against a pre-seeded/verified test account whose session is injected into the browser, or from an environment not blocked by Cloudflare on the account-creation endpoint. Summary: ✅ The "Export current view" option is present in code for the Reports Export menu on the merged commit. |
Explanation of Change
First attempt #90714 was reverted due to some backend issues, this is the second try.
Fixed Issues
$ #92314
$ https://github.com/Expensify/Expensify/issues/633210
PROPOSAL:
Tests
Offline tests
QA Steps
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