Re-add missing CSV member import column mapping options with scroll fix#85575
Re-add missing CSV member import column mapping options with scroll fix#85575
Conversation
Re-implements the changes from PR #83823 which added Custom Field 1, Custom Field 2, Approval Limit, and Over Limit Forward To to the CSV member import column mapping dropdown. Additionally fixes the regression from issue #84276 where the column mapping dropdown list was not scrollable on mobile. The fix adds shouldPopoverUseScrollView to the ButtonWithDropdownMenu in ImportColumn.tsx, using the established DROPDOWN_SCROLL_THRESHOLD pattern to enable scrolling when options >= 5. Co-authored-by: truph01 <truph01@users.noreply.github.com>
|
I created this PR from an upstream branch since I don't have push access to your fork. To take ownership of this branch and be able to push updates, run: Then you can close this PR and open a new one from your fork. |
🦜 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 2d92304a..415295f0 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -492,7 +492,7 @@ const translations: TranslationDeepObject<typeof en> = {
submitTo: 'Einreichen bei',
forwardTo: 'Weiterleiten an',
approvalLimit: 'Genehmigungslimit',
- overLimitForwardTo: 'Weiterleiten bei Überschreitung',
+ overLimitForwardTo: 'Über Limit weiterleiten an',
merge: 'Zusammenführen',
none: 'Keine',
unstableInternetConnection: 'Instabile Internetverbindung. Bitte überprüfe dein Netzwerk und versuche es erneut.',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 112540f1..5c543769 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -491,8 +491,8 @@ const translations: TranslationDeepObject<typeof en> = {
headsUp: 'Attention !',
submitTo: 'Soumettre à',
forwardTo: 'Transférer à',
- approvalLimit: "Limite d'approbation",
- overLimitForwardTo: 'Transférer si dépassement de limite',
+ approvalLimit: 'Plafond d’approbation',
+ overLimitForwardTo: 'Transférer au-delà de la limite à',
merge: 'Fusionner',
none: 'Aucun',
unstableInternetConnection: 'Connexion Internet instable. Veuillez vérifier votre réseau et réessayer.',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 401719c6..71dc4463 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -492,7 +492,7 @@ const translations: TranslationDeepObject<typeof en> = {
submitTo: 'Invia a',
forwardTo: 'Inoltra a',
approvalLimit: 'Limite di approvazione',
- overLimitForwardTo: 'Inoltra se supera il limite',
+ overLimitForwardTo: 'Inoltra eccedenza a',
merge: 'Unisci',
none: 'Nessuno',
unstableInternetConnection: 'Connessione Internet instabile. Controlla la rete e riprova.',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index a41e9d58..e8482867 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -491,7 +491,7 @@ const translations: TranslationDeepObject<typeof en> = {
submitTo: '提出先',
forwardTo: '転送先',
approvalLimit: '承認限度額',
- overLimitForwardTo: '限度額超過時の転送先',
+ overLimitForwardTo: '限度超過時の転送先',
merge: 'マージ',
none: 'なし',
unstableInternetConnection: 'インターネット接続が不安定です。ネットワークを確認して、もう一度お試しください。',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 2e3a1a10..7e1206b6 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -490,8 +490,8 @@ const translations: TranslationDeepObject<typeof en> = {
headsUp: 'Let op!',
submitTo: 'Indienen bij',
forwardTo: 'Doorsturen naar',
- approvalLimit: 'Goedkeuringslimiet',
- overLimitForwardTo: 'Doorsturen bij overschrijding limiet',
+ approvalLimit: 'Autorisatielimiet',
+ overLimitForwardTo: 'Doorsturen bij overschrijding limiet naar',
merge: 'Samenvoegen',
none: 'Geen',
unstableInternetConnection: 'Onstabiele internetverbinding. Controleer je netwerk en probeer het opnieuw.',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index c5dfdeed..b59732d6 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -490,8 +490,8 @@ const translations: TranslationDeepObject<typeof en> = {
headsUp: 'Uwaga!',
submitTo: 'Przekaż do',
forwardTo: 'Przekaż do',
- approvalLimit: 'Limit zatwierdzenia',
- overLimitForwardTo: 'Przekaż przy przekroczeniu limitu',
+ approvalLimit: 'Limit zatwierdzania',
+ overLimitForwardTo: 'Przekaż powyżej limitu do',
merge: 'Scal',
none: 'Brak',
unstableInternetConnection: 'Niestabilne połączenie internetowe. Sprawdź swoją sieć i spróbuj ponownie.',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 5f657ba3..75811523 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -490,7 +490,7 @@ const translations: TranslationDeepObject<typeof en> = {
submitTo: 'Enviar para',
forwardTo: 'Encaminhar para',
approvalLimit: 'Limite de aprovação',
- overLimitForwardTo: 'Encaminhar se exceder o limite',
+ overLimitForwardTo: 'Encaminhar excedente para',
merge: 'Mesclar',
none: 'Nenhum',
unstableInternetConnection: 'Conexão de internet instável. Verifique sua rede e tente novamente.',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 970f0055..c31d7176 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -487,7 +487,7 @@ const translations: TranslationDeepObject<typeof en> = {
submitTo: '提交给',
forwardTo: '转发至',
approvalLimit: '审批限额',
- overLimitForwardTo: '超出限额时转发至',
+ overLimitForwardTo: '超限转发至',
merge: '合并',
none: '无',
unstableInternetConnection: '网络连接不稳定。请检查您的网络后重试。',
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
|
The failing check ( Analysis: The Android build failed because the Grails Maven repository ( Evidence: This PR only modifies TypeScript files, language files, and Re-running the failed job should resolve this. |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
@truph01 please get this into review today. Customers are asking about this: https://expensify.slack.com/archives/C049HHMV9SM/p1773837348549279?thread_ts=1771946601.379139&cid=C049HHMV9SM |
|
@MelvinBot Please merge main, then mark this PR as ready for review. |
…vImportColumnsWithScrollFix Co-authored-by: truph01 <truph01@users.noreply.github.com>
|
Done! Merged |
trjExpensify
left a comment
There was a problem hiding this comment.
Re-introducing an agreed product change with a bug fix. 👍
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeScreen.Recording.2026-03-19.at.01.17.43.moviOS: HybridAppScreen.Recording.2026-03-19.at.01.20.34.moviOS: mWeb SafariScreen.Recording.2026-03-19.at.01.19.38.movMacOS: Chrome / SafariScreen.Recording.2026-03-19.at.01.13.40.mov |
|
We did not find an internal engineer to review this PR, trying to assign a random engineer to #83387 as well as to this PR... Please reach out for help on Slack if no one gets assigned! |
| "Tele", | ||
| "Teleproduction", | ||
| "testflight", | ||
| "THRESHHOLD", |
There was a problem hiding this comment.
@MelvinBot I see there's only 1 usage of this misspelled word outside of what this PR introduces – can you instead rename REPORT_THRESHHOLD to REPORT_THRESHOLD in CONST/index.ts, then update everywhere it's used, and remove it from here?
There was a problem hiding this comment.
Good catch on the typo! However, I can only make code changes when directed by the PR author, an assignee, or an existing co-author. truph01 — should I implement this rename (REPORT_THRESHHOLD → REPORT_THRESHOLD in CONST/index.ts + all usages, and remove it from cspell.json)?
There was a problem hiding this comment.
Eh this is a minor nitpick and truph01 is offline, I'll merge as is now and do a follow-up PR for the typo so we can keep this moving.
There was a problem hiding this comment.
Haha too late but it's all right
|
🚧 @francoisl 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! 🧪🧪
|
Explanation of Change
This PR re-implements the changes from PR #83823 (which was reverted via #84301) and also fixes the regression it introduced (#84276 — column mapping dropdown list not scrollable on mobile).
Original changes (from #83823):
The CSV member import flow (Workspace → Members → Import from spreadsheet) was missing 4 column mapping options that exist in Expensify Classic: Custom Field 1, Custom Field 2, Approval Limit, and Over Limit Forward To. This PR:
columnRolesarray inImportedMembersPage.tsximportMembersparsing logic to extract these columns from the spreadsheet dataImportedSpreadsheetMemberDatatype with the 4 optional fieldsPolicyMembertype andimportPolicyMembersfunction inMember.tsto include the new fields in the API payloadRegression fix (for #84276):
Adding 4 new options increased the dropdown from 5 to 9 items, exceeding mobile screen height. The
ImportColumncomponent'sButtonWithDropdownMenuwas missing theshouldPopoverUseScrollViewprop, so the menu items were rendered in a non-scrollable<View>. This PR addsshouldPopoverUseScrollView={options.length >= CONST.DROPDOWN_SCROLL_THRESHOLD}to enable scrolling when there are 5+ options, following the established pattern used bySettlementButton,SearchBulkActionsButton, andMoneyReportHeaderKYCDropdown.Fixed Issues
$ #83387
PROPOSAL: #83387 (comment)
Tests
Offline tests
N/A — CSV import requires network to upload. The existing offline handling applies unchanged.
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