Allow linking an existing card feed to a non-USD workspace - #98509
Conversation
Co-authored-by: Chuck Dries <chuckdries@users.noreply.github.com>
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
…elector Co-authored-by: Chuck Dries <chuckdries@users.noreply.github.com>
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
|
@Eskalifer1 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] |
|
🤖 No code fix needed — all real checks now pass. When the request came in, several checks were still running (the Android builds, perf tests) and the The only remaining failing check is Nothing to push here. Once you've filled out the |
|
🤖 Still nothing to push here — no code failure to fix. I re-checked all checks: every build, test, perf, and checklist check passes. The only remaining red check is This PR needs a human reviewer, not a code change. |
|
I will review it today! |
trjExpensify
left a comment
There was a problem hiding this comment.
conflict, @chuckdries. Looks great though.. thanks for the quick work. 👍
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4f8f9c3aa6
ℹ️ 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".
| if (!(policy?.outputCurrency === CONST.CURRENCY.USD || isUkEuCurrencySupported)) { | ||
| // The supported currency restriction only applies to enrolling a brand-new card program. | ||
| // If hasAccessibleFeeds is true, allow the flow to start in order to link an existing feed | ||
| if (!hasAccessibleFeeds && !(policy?.outputCurrency === CONST.CURRENCY.USD || isUkEuCurrencySupported)) { |
There was a problem hiding this comment.
Require a linkable feed before bypassing currency prompt
When the only accessible Expensify card feeds are pending deletion, hasAccessibleFeeds is still true even though the selector disables those feeds via isFeedPendingDelete. On an unsupported-currency workspace such as CAD/AUD, this skips the Update-to-USD prompt and opens the selector where no feed can be linked and the new-program CTA is hidden, leaving the admin unable to continue. Please base this bypass on at least one non-deleted/linkable feed, or keep the currency prompt when no usable feed exists.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Frankly this feels like an edge case I'm not particularly worried about. @MelvinBot can you check if the user sees a greyed out entry in the list in this case, or an empty panel, or something else? What happens?
There was a problem hiding this comment.
The user sees a greyed-out, non-clickable entry in the selector — not an empty panel. It's a dead end, but a visible one.
Walking the code for the exact scenario Codex described (brand-new CAD/AUD workspace, the only accessible feed is pending deletion on another workspace):
hasAccessibleFeedsis true, so the currency prompt is skipped andstartFlow()opens the "Select cards" pane.- The pending-delete feed isn't linked to this new workspace, so it lands in
otherFeedsand renders under the "From other workspaces" heading. toListItemsetsisDisabled: isFeedPendingDelete, so the row shows the feed name + card icon but is greyed out and can't be tapped.- Because
primaryFeedsis empty and the currency is unsupported,shouldShowIssueCardButtonis false, so the+"set up new feed" button is also hidden.
So the admin lands on a pane with a header, the "From other workspaces" label, and a single disabled row — nothing they can click. No blank/empty panel, no crash, no error toast; just a greyed row with no way forward.
One nuance: if that pending-delete feed happened to already be linked to this workspace (i.e. it's a primaryFeed), it renders greyed-out in the main list instead, and issueCardFundID would resolve to it, so an "Issue card" button would appear — but it points at the feed being deleted. In the fresh-workspace case Codex flagged, though, it's the "other workspaces" greyed-row path above.
Derived from reading the code on this branch (4f8f9c3) rather than a live repro — the pendingAction: DELETE feed state is transient and impractical to stage reliably. Happy to dig further if you want a runtime confirmation.
This comment was marked as duplicate.
This comment was marked as duplicate.
This comment was marked as duplicate.
This comment was marked as duplicate.
🦜 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 2e473fdd..577eecb6 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -7234,9 +7234,10 @@ Der Control-Tarif beginnt bei 9 $ pro aktivem Mitglied und Monat.`,
yourWorkspace: `Dein Arbeitsbereich ist auf eine nicht unterstützte Währung eingestellt. Sieh dir die <a href="${CONST.ENABLE_GLOBAL_REIMBURSEMENT_HELP_URL}">Liste der unterstützten Währungen</a> an.`,
chooseAnExisting: 'Wähle ein bestehendes Bankkonto zum Bezahlen von Ausgaben oder füge ein neues hinzu.',
changeBankAccount: 'Bankkonto ändern',
- updateCurrencyForExpensifyCard:
- 'Die Expensify Karte kann in USD, GBP und EUR ausgegeben werden. Aktualisiere diesen Arbeitsbereich auf eine unterstützte Währung oder verwende einen anderen Arbeitsbereich.',
- updateCurrencyForExpensifyCardTitle: 'Holen Sie sich die Expensify Karte',
+ updateCurrencyForExpensifyCard: 'Die Expensify Karte kann in USD ausgegeben werden. Bitte aktualisieren Sie diesen Workspace auf USD oder verwenden Sie einen anderen Workspace.',
+ updateCurrencyForExpensifyCardTitle: 'Expensify Karte bestellen',
+ euUkUpdateCurrencyForExpensifyCard:
+ 'Die Expensify Karte kann in USD, GBP und EUR ausgestellt werden. Bitte aktualisieren Sie diesen Workspace auf eine unterstützte Währung oder verwenden Sie einen anderen Workspace.',
},
changeOwner: {
changeOwnerPageTitle: 'Besitz übertragen',
diff --git a/src/languages/el.ts b/src/languages/el.ts
index e47a9def..46715d6c 100644
--- a/src/languages/el.ts
+++ b/src/languages/el.ts
@@ -7493,9 +7493,10 @@ _Για πιο αναλυτικές οδηγίες, [επισκεφθείτε τ
notAllowedToAddBankAccount:
'Ο χώρος εργασίας σας είναι ρυθμισμένος σε μη υποστηριζόμενο νόμισμα. Επικοινωνήστε με έναν διαχειριστή χώρου εργασίας που έχει δικαίωμα να το αλλάξει.',
changeBankAccount: 'Αλλαγή τραπεζικού λογαριασμού',
- updateCurrencyForExpensifyCard:
- 'Η κάρτα Expensify μπορεί να εκδοθεί σε USD, GBP και EUR. Ενημερώστε αυτόν τον χώρο εργασίας σε υποστηριζόμενο νόμισμα ή χρησιμοποιήστε έναν διαφορετικό χώρο εργασίας.',
- updateCurrencyForExpensifyCardTitle: 'Αποκτήστε την κάρτα Expensify',
+ updateCurrencyForExpensifyCard: 'Η Κάρτα Expensify είναι διαθέσιμη για έκδοση σε USD. Ενημερώστε αυτόν τον χώρο εργασίας σε USD ή χρησιμοποιήστε έναν διαφορετικό χώρο εργασίας.',
+ updateCurrencyForExpensifyCardTitle: 'Αποκτήστε την Κάρτα Expensify',
+ euUkUpdateCurrencyForExpensifyCard:
+ 'Η Κάρτα Expensify είναι διαθέσιμη για έκδοση σε USD, GBP και EUR. Ενημερώστε αυτόν τον χώρο εργασίας σε ένα υποστηριζόμενο νόμισμα ή χρησιμοποιήστε έναν διαφορετικό χώρο εργασίας.',
},
changeOwner: {
changeOwnerPageTitle: 'Μεταφορά ιδιοκτήτη',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index da43b598..53562e35 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -7199,8 +7199,11 @@ El plan Controlar empieza en 9 $ por miembro activo al mes.`,
yourWorkspace: `Tu espacio de trabajo está configurado en una moneda no soportada. Consulta la <a href="${CONST.ENABLE_GLOBAL_REIMBURSEMENT_HELP_URL}">lista de monedas soportadas</a>.`,
chooseAnExisting: 'Elige una cuenta bancaria existente para pagar gastos o añade una nueva.',
changeBankAccount: 'Cambiar cuenta bancaria',
- updateCurrencyForExpensifyCard: 'La Tarjeta Expensify se puede emitir en USD, GBP y EUR. Actualiza este espacio de trabajo a una moneda soportada o usa otro espacio de trabajo.',
+ updateCurrencyForExpensifyCard:
+ 'La Tarjeta Expensify está disponible para emitirse en USD. Por favor, actualiza este espacio de trabajo a USD o usa un espacio de trabajo diferente.',
updateCurrencyForExpensifyCardTitle: 'Consigue la Tarjeta Expensify',
+ euUkUpdateCurrencyForExpensifyCard:
+ 'La Tarjeta Expensify está disponible para emitirse en USD, GBP y EUR. Actualiza este espacio de trabajo a una moneda compatible o utiliza un espacio de trabajo diferente.',
},
changeOwner: {
changeOwnerPageTitle: 'Transferir la propiedad',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index c6485db0..23138fb6 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -7258,8 +7258,10 @@ Le forfait Control commence à 9 $ par Membre actif et par mois.`,
chooseAnExisting: 'Choisissez un compte bancaire existant pour payer les dépenses ou ajoutez-en un nouveau.',
changeBankAccount: 'Changer de compte bancaire',
updateCurrencyForExpensifyCard:
- 'La Carte Expensify peut être émise en USD, GBP et EUR. Mettez à jour cet espace de travail vers une devise prise en charge ou utilisez un autre espace de travail.',
- updateCurrencyForExpensifyCardTitle: 'Obtenez la Carte Expensify',
+ "La Carte Expensify est disponible à l'émission en USD. Veuillez mettre à jour cet espace de travail en USD ou utiliser un autre espace de travail.",
+ updateCurrencyForExpensifyCardTitle: 'Obtenir la Carte Expensify',
+ euUkUpdateCurrencyForExpensifyCard:
+ 'La Carte Expensify peut être émise en USD, GBP et EUR. Veuillez mettre à jour cet espace de travail vers une devise prise en charge ou utiliser un autre espace de travail.',
},
changeOwner: {
changeOwnerPageTitle: 'Transférer le responsable',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 80edbb1a..c8884688 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -7202,9 +7202,9 @@ Il piano Control parte da 9 $ al mese per ogni membro attivo.`,
yourWorkspace: `La tua area di lavoro è impostata su una valuta non supportata. Visualizza l’<a href="${CONST.ENABLE_GLOBAL_REIMBURSEMENT_HELP_URL}">elenco delle valute supportate</a>.`,
chooseAnExisting: 'Scegli un conto bancario esistente per pagare le spese oppure aggiungine uno nuovo.',
changeBankAccount: 'Cambia conto bancario',
- updateCurrencyForExpensifyCard:
- 'La Carta Expensify può essere emessa in USD, GBP ed EUR. Aggiorna questo spazio di lavoro a una valuta supportata oppure usa un altro spazio di lavoro.',
+ updateCurrencyForExpensifyCard: 'La Carta Expensify è disponibile per l’emissione in USD. Aggiorna questo workspace in USD oppure usa un altro workspace.',
updateCurrencyForExpensifyCardTitle: 'Ottieni la Carta Expensify',
+ euUkUpdateCurrencyForExpensifyCard: 'La Carta Expensify è disponibile in USD, GBP ed EUR. Aggiorna questo workspace a una valuta supportata oppure usa un altro workspace.',
},
changeOwner: {
changeOwnerPageTitle: 'Trasferisci proprietario',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 6db396c3..aec7a870 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -7116,8 +7116,9 @@ Control プランは、アクティブメンバー1人あたり月額 $9 から
yourWorkspace: `ご利用のワークスペースはサポートされていない通貨に設定されています。<a href="${CONST.ENABLE_GLOBAL_REIMBURSEMENT_HELP_URL}">サポートされている通貨の一覧</a>を表示します。`,
chooseAnExisting: '既存の銀行口座を選択して経費を支払うか、新しい口座を追加してください。',
changeBankAccount: '銀行口座を変更',
- updateCurrencyForExpensifyCard: 'Expensify カードは USD、GBP、EUR で発行できます。このワークスペースをサポートされている通貨に更新するか、別のワークスペースをご利用ください。',
- updateCurrencyForExpensifyCardTitle: 'Expensify カードを取得する',
+ updateCurrencyForExpensifyCard: 'Expensify カードは USD でのみ発行できます。このワークスペースを USD に更新するか、別のワークスペースをご利用ください。',
+ updateCurrencyForExpensifyCardTitle: 'Expensify カードを申し込む',
+ euUkUpdateCurrencyForExpensifyCard: 'Expensify カードは USD、GBP、EUR で発行できます。このワークスペースを対応している通貨に更新するか、別のワークスペースを使用してください。',
},
changeOwner: {
changeOwnerPageTitle: '所有者を変更',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 9982844a..f3e6b052 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -7186,9 +7186,10 @@ Het Control-abonnement begint bij $9 per actieve deelnemer per maand.`,
yourWorkspace: `Je werkruimte is ingesteld op een niet-ondersteunde valuta. Bekijk de <a href="${CONST.ENABLE_GLOBAL_REIMBURSEMENT_HELP_URL}">lijst met ondersteunde valuta's</a>.`,
chooseAnExisting: 'Kies een bestaande bankrekening om onkosten te betalen of voeg een nieuwe toe.',
changeBankAccount: 'Bankrekening wijzigen',
- updateCurrencyForExpensifyCard:
+ updateCurrencyForExpensifyCard: 'De Expensify Kaart kan alleen in USD worden uitgegeven. Werk deze workspace bij naar USD of gebruik een andere workspace.',
+ updateCurrencyForExpensifyCardTitle: 'Vraag de Expensify Kaart aan',
+ euUkUpdateCurrencyForExpensifyCard:
'De Expensify Kaart kan worden uitgegeven in USD, GBP en EUR. Werk deze werkruimte bij naar een ondersteunde valuta of gebruik een andere werkruimte.',
- updateCurrencyForExpensifyCardTitle: 'Ontvang de Expensify Kaart',
},
changeOwner: {
changeOwnerPageTitle: 'Eigenaar overdragen',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index e9c5d041..be534d5c 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -7167,8 +7167,9 @@ Plan Control zaczyna się od 9 USD za aktywnego członka miesięcznie.`,
yourWorkspace: `Twoje miejsce pracy jest ustawione na nieobsługiwaną walutę. Zobacz <a href="${CONST.ENABLE_GLOBAL_REIMBURSEMENT_HELP_URL}">listę obsługiwanych walut</a>.`,
chooseAnExisting: 'Wybierz istniejące konto bankowe do opłacania wydatków lub dodaj nowe.',
changeBankAccount: 'Zmień konto bankowe',
- updateCurrencyForExpensifyCard: 'Kartę Expensify można wydać w USD, GBP i EUR. Zmień walutę tej przestrzeni roboczej na obsługiwaną albo użyj innej przestrzeni roboczej.',
+ updateCurrencyForExpensifyCard: 'Karta Expensify jest dostępna do wydania w USD. Zmień tę przestrzeń roboczą na USD lub użyj innej przestrzeni roboczej.',
updateCurrencyForExpensifyCardTitle: 'Zdobądź Kartę Expensify',
+ euUkUpdateCurrencyForExpensifyCard: 'Karta Expensify jest dostępna do wydania w USD, GBP i EUR. Zmień walutę tego workspace’a na obsługiwaną albo użyj innego workspace’a.',
},
changeOwner: {
changeOwnerPageTitle: 'Przenieś właściciela',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index a58b8163..06b34ee6 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -7188,8 +7188,10 @@ O plano Control começa em US$ 9 por membro ativo por mês.`,
yourWorkspace: `Seu workspace está configurado para uma moeda não compatível. Veja a <a href="${CONST.ENABLE_GLOBAL_REIMBURSEMENT_HELP_URL}">lista de moedas compatíveis</a>.`,
chooseAnExisting: 'Escolha uma conta bancária existente para pagar despesas ou adicione uma nova.',
changeBankAccount: 'Alterar conta bancária',
- updateCurrencyForExpensifyCard: 'O Cartão Expensify pode ser emitido em USD, GBP e EUR. Atualize este workspace para uma moeda compatível ou use outro workspace.',
- updateCurrencyForExpensifyCardTitle: 'Obtenha o Cartão Expensify',
+ updateCurrencyForExpensifyCard: 'O Cartão Expensify está disponível para emissão em USD. Atualize este workspace para USD ou use um workspace diferente.',
+ updateCurrencyForExpensifyCardTitle: 'Obter o Cartão Expensify',
+ euUkUpdateCurrencyForExpensifyCard:
+ 'O Cartão Expensify está disponível para emissão em USD, GBP e EUR. Atualize este espaço de trabalho para uma moeda compatível ou use um espaço de trabalho diferente.',
},
changeOwner: {
changeOwnerPageTitle: 'Transferir proprietário',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 5bd3d9bf..2c6a2a50 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -6944,8 +6944,9 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM
yourWorkspace: `您的工作区当前使用不受支持的货币。请查看<a href="${CONST.ENABLE_GLOBAL_REIMBURSEMENT_HELP_URL}">支持的货币列表</a>。`,
chooseAnExisting: '选择现有银行账户来支付报销,或添加新账户。',
changeBankAccount: '更改银行账户',
- updateCurrencyForExpensifyCard: 'Expensify 卡可以以美元、英镑和欧元发行。请将此工作区更新为受支持的货币,或使用其他工作区。',
+ updateCurrencyForExpensifyCard: 'Expensify 卡目前仅支持以美元(USD)发行。请将此工作区的货币更新为美元(USD),或使用其他工作区。',
updateCurrencyForExpensifyCardTitle: '获取 Expensify 卡',
+ euUkUpdateCurrencyForExpensifyCard: 'Expensify 卡目前可发行的货币包括 USD、GBP 和 EUR。请将此工作区更新为受支持的货币或使用其他工作区。',
},
changeOwner: {
changeOwnerPageTitle: '转移所有者',
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
This comment was marked as duplicate.
This comment was marked as duplicate.
|
👋 All code/build/test checks are green. This last one clears once a reviewer approves — no author action or code change required. |
|
@codex review |
|
Codex Review: Didn't find any major issues. Keep it up! Reviewed commit: ℹ️ 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". |
Eskalifer1
left a comment
There was a problem hiding this comment.
I don't see any problems for now(except the one we will follow-up), so LGTM!
|
|
||
| // Suppress the new-program branch on workspaces with unsupported currencies, and for members who cannot | ||
| // reach the bank account setup page. These workspaces may only issue cards on existing feeds | ||
| const shouldShowIssueCardButton = hasIssueCardFundID || (canEnrollNewCardProgram && canStartBankAccountSetup); |
There was a problem hiding this comment.
NAB: !hasAccessibleFeeds && !canEditSettings is written out twice: once in shouldDisableCTA and once in onCtaPress. Since the first only controls opacity and the second does the actual blocking, they have to stay in sync by hand, and a future edit to one of them will silently desync the styling from the behavior.
There was a problem hiding this comment.
Oooh good call. I realized we can collapse the two showReadOnlyModal paths in onCtaPress to just one to simplify as well
This comment was marked as duplicate.
This comment was marked as duplicate.
|
@Eskalifer1 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] |
|
Hmmm, @Eskalifer1 already posted a checklist here... I'll ask around for an internal engineer to review |
Julesssss
left a comment
There was a problem hiding this comment.
No additional feedback from me here
|
🚧 chuckdries 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/chuckdries in version: 9.4.63-0 🚀
|
Help site review — changes required ✅This PR introduces a new customer-facing capability: an admin can now link an existing Expensify Card feed to a workspace on any currency (not just USD). The supported-currency requirement now only applies when enrolling a brand-new card program, and the currency prompt sends the user to the workspace currency page instead of force-switching to USD. The published guide Set Up and Manage the Expensify Card in the US already covered linking an existing feed across workspaces, but did not clarify that this works on a non-USD workspace — and its framing implies a supported currency is always required. That gap warranted an update. Draft help site PR: #99706 What it changes:
Notes on scope & UI terminology
@chuckdries, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR |
|
Deploy Blocker #99723 was identified to be related to this PR. |
|
🚀 Deployed to production by https://github.com/AndrewGable in version: 9.4.63-1 🚀
Bundle Size Analysis (Sentry): |
Explanation of Change
We only allow onboarding for Expensify card in workspaces that use one of our supported currencies: USD, GBP, EUR. But, if you already have an active E-card feed on a different workspace, you're supposed to be able to link that feed to a workspace of any currency. This PR allows that. It all already worked, but you used to have to set it up on OldDot.
This change skips the currency prompt when the workspace has accessible feeds (
hasAccessibleFeeds). In that case the CTA callsstartFlow()directly, which already routes to the feed selector so the admin can link an existing feed.The currency prompt now opens the currency page
The prompt used to switch the workspace to USD directly. It now sends the user to the workspace currency page, so they can pick any supported currency. If an open or partially set up bank account blocks that page, the modal becomes acknowledge-only.
Access to the new-program path
Enrolling a new card program needs workspace admin access, because the bank account setup page and the workspace currency page are both admin only. A member who can write Expensify Card without that access, such as a Card Admin on a Control workspace, can only link an existing feed. With no feed to link, the CTA is dimmed and opens the read-only modal.
Currency prompt copy
The prompt names only the currencies the user can actually choose. GBP and EUR need the
expensifyCardEuUkbeta, so a user without the beta sees USD only. The copy branches on the beta rather than onisUkEuCurrencySupported, because that flag is always false while the prompt is open. The prompt only opens when the workspace currency is not already a supported one.Fixed Issues
$ #98503
PROPOSAL: #98503 (comment)
Tests
Enrolling is disallowed on unsupported currencies
disallows.enrolling.fresh.on.unsupported.currency.mp4
Linking a USD feed is allowed from a non-USD workspace
+icon (which would normally let you set up a new feed)allows.linking.existing.USD.feed.mp4
USD workspaces are allowed to link an existing feed and set up a new one
+icon, and pressing it takes you to the bank account setup flowallows.setting.up.new.USD.feed.mp4
Offline tests
N/A
QA Steps
Same as tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)Avatar, 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
See tests