Skip to content

Widen domain-group card preferred workspace to company card feeds - #100127

Merged
NicolasBonet merged 18 commits into
Expensify:mainfrom
David-2002065:fix/99110-domain-group-card-preferred-workspace
Sep 16, 2026
Merged

NicolasBonet merged 18 commits into
Expensify:mainfrom
David-2002065:fix/99110-domain-group-card-preferred-workspace

Conversation

@David-2002065

@David-2002065 David-2002065 commented Sep 2, 2026 •

Copy link
Copy Markdown
Contributor

Explanation of Change

The domain-group "Card preferred workspace" toggle was gated on isDomainUsingExpensifyCard, which is only truthy when the domain has an Expensify Card feed (presence of private_expensifyCardSettings_{domainAccountID}). A domain whose only card data is a third-party company card feed therefore couldn't enable the setting — even though the override already applies to those feeds once it's on. The label, description, and disabled-state error copy were also worded as Expensify-Card-only.

This PR (frontend only, NewDot only):

  • Adds a shared useIsDomainUsingCard(domainAccountID) hook that returns true when the domain has an Expensify Card feed OR a company card feed. The company-feed check reads the domain-scoped sharedNVP_private_domain_member_{domainAccountID} key and reuses getOriginalCompanyFeeds (called without feedKeysWithCards, so a connected feed with no assigned cards yet still qualifies, and pending/deleting feeds and the Expensify Card bank placeholder are excluded). Both reads use boolean selectors to avoid re-renders on unrelated feed writes.
  • Wires the hook into both gate sites — ExpensifyCardPreferredWorkspaceToggle (existing group) and DomainGroupCreatePage (create group) — so they can't drift. The existing && !isActive escape hatch is kept, so a group that already has the setting on is never locked out.
  • Updates the label, description and disabled-state copy (en/es) to mention company cards, per the OP's suggested copy.

No change to overridePreferredPolicyWithCardPolicy or the override write; this only widens when the toggle can be enabled. Behavior for domains that already have the setting on is unchanged.

Fixed Issues

$ #99110
PROPOSAL: #99110 (comment)

Tests

Prerequisite: sign in as a domain admin.

  1. Open a domain that has only a third-party company card feed (no Expensify Card feed) and at least one admin workspace.
  2. Go to Account > Domains > (domain) > Groups, open an existing group (or tap New group), and enable Preferred Workspace.
  3. Verify the Card preferred workspace toggle is now enabled (no longer "Locked") and can be turned on.
  4. Turn it on and confirm no "oops" error modal appears.
  5. Open a domain that has no card feed at all: verify the toggle stays disabled, and tapping it shows the message "…please first enable a preferred workspace and set up an Expensify card or company card feed on your domain."
  6. Open a domain that has an Expensify Card feed: verify behavior is unchanged (toggle enabled once a preferred workspace is set).
  7. Verify the label reads "Card preferred workspace" and the description mentions company card transactions.
  • Verify that no errors appear in the JS console

Offline tests

Same as Tests — the toggle is gated on Onyx data that is already cached, so eligibility and copy render identically offline.

QA Steps

Same as Tests.

  • Verify that no errors appear in the JS console

PR Author Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for the expected offline behavior in the Offline steps section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
    • I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • Android: Native
    • Android: mWeb Chrome
    • iOS: Native
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I followed proper code patterns (see Reviewing the code)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))
  • If new assets were added or existing ones were modified, I verified that:
    • The assets are optimized and compressed (for SVG files, run npm run compress-svg)
    • The assets load correctly across all supported platforms.
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • I added unit tests for any new feature or bug fix in this PR to help automatically prevent regressions in this user flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native
Screen.Recording.2026-09-02.at.15.03.03.mov
Android: mWeb Chrome
Screen.Recording.2026-09-02.at.14.51.09.mov
iOS: Native
Screen.Recording.2026-09-02.at.15.09.08.mov
iOS: mWeb Safari
Screen.Recording.2026-09-02.at.14.51.09.mov
MacOS: Chrome / Safari
Screen.Recording.2026-09-02.at.12.03.59.mov

Add a shared useIsDomainUsingCard hook so both gate sites (existing-group
toggle and create-group flow) unlock the setting when the domain has an
Expensify Card feed OR a company card feed, instead of Expensify Card only.
Update the label, description and disabled-state copy accordingly.
@melvin-bot

melvin-bot Bot commented Sep 2, 2026

Copy link
Copy Markdown

Hey, I noticed you changed src/languages/en.ts in a PR from a fork. For security reasons, translations are not generated automatically for PRs from forks.

If you want to automatically generate translations for other locales, an Expensify employee will have to:

  1. Look at the code and make sure there are no malicious changes.
  2. Run the Generate static translations GitHub workflow. If you have write access and the K2 extension, you can simply click: [this button]

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 bun ./scripts/generateTranslations.ts --help

Typically, you'd want to translate only what you changed by running npx bun ./scripts/generateTranslations.ts --compare-ref main

@David-2002065

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1933d05310

ℹ️ 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".

Comment thread src/hooks/useIsDomainUsingCard.ts Resolved
@David-2002065
David-2002065 marked this pull request as ready for review September 2, 2026 14:02
@David-2002065
David-2002065 requested review from a team as code owners September 2, 2026 14:02
@melvin-bot
melvin-bot Bot requested review from joekaufmanexpensify and marufsharifi and removed request for a team September 2, 2026 14:02
@melvin-bot

melvin-bot Bot commented Sep 2, 2026

Copy link
Copy Markdown

@marufsharifi 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]

@melvin-bot
melvin-bot Bot removed the request for review from a team September 2, 2026 14:02
Comment thread src/hooks/useIsDomainUsingCard.ts Resolved
@joekaufmanexpensify

Copy link
Copy Markdown
Contributor

@trjExpensify would you be able to test the first three steps using your TRJ Private Domain question? IIRC, it's verified and doesn't have an Expensify card feed. All the private domains I have access to have Expensify card feeds.

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

🚧 joekaufmanexpensify has triggered a test Expensify/App build. You can view the workflow run here.

@github-actions

This comment has been minimized.

@trjExpensify

Copy link
Copy Markdown
Contributor

@joekaufmanexpensify it's not a verified domain, sorry. @twisterdotcom might have on expensipie.com? 🤔

@marufsharifi

Copy link
Copy Markdown

@dilshodmackbook-sketch, have you checked this: #100127 (comment)

@marufsharifi

Copy link
Copy Markdown

@MelvinBot Review

@MelvinBot

Copy link
Copy Markdown
Contributor

Review

The hook itself is clean, correctly domain-scoped, and reuses the right helper. One thing should be confirmed before this merges: nothing in the domain flow fetches the domain's company card feeds, so the toggle may still stay locked for exactly the admins this fixes.

1. 🚩 The company card NVP may never be loaded on the Groups page

useIsDomainUsingCard.ts:28 reads sharedNVP_private_domain_member_{domainAccountID}, but the only client-side writers of settings.companyCards are openPolicyCompanyCardsPage / openPolicyCompanyCardsFeed, and every call site is workspace-scoped and needs a policyID:

The only call the domain flow makes is openDomainPage, a bare API.read(OPEN_DOMAIN_PAGE, {domainAccountID}) with no declared Onyx data. Sibling domain pages read .settings off this key successfully (DomainAdminsPage.tsx:63), so the NVP does arrive — but whether the response includes settings.companyCards is a backend question I can't answer from this repo.

oqildev and x-dev90 both raised this on the issue and it was never answered. Please get an internal engineer to confirm OpenDomainPage returns settings.companyCards for the domain. If it doesn't, this PR won't fix the bug and the command needs to be widened. This may also be why steps 1–3 haven't been testable yet.

2. No loading state — false "Locked" and a wrong error modal on cold load

The hook returns a bare boolean and drops the useOnyx metadata. Before Onyx resolves, both reads are undefined, so it returns false. On a cold direct visit to the Groups page the toggle renders as Locked and tapping it shows "…please first enable a preferred workspace and set up an Expensify card or company card feed on your domain" — on a domain that does have a feed.

Suggest returning {isDomainUsingCard, isLoading} (from the second tuple element's status) and having both call sites hold the toggle in a disabled-but-no-modal state while loading. The old code had the same shape, but this PR's whole point is unlocking the toggle, so the flash is now the difference between "works" and "looks broken".

3. Drop the manual es.ts edit

src/languages/es.ts carries the This file was automatically generated header, so the hand-written Spanish will be replaced when the translations workflow runs. All nine other locales (de, el, fr, it, ja, nl, pl, pt-BR, zh-hans) still have the old Expensify-Card-only copy for these three keys.

Since this is a fork PR, an Expensify employee has to run Generate static translations before merge. Cleanest is to revert es.ts and let that workflow cover all ten.

4. Copy nit

Expensify Card is capitalized 82 times in en.ts; the new disabled message lowercases it. Suggest:

To enable this setting, please first enable a preferred workspace and set up an Expensify Card or a company card feed on your domain.

Other notes

Codex's stale-direct-feed comment (P2) — I'd leave it as is. dilshodmackbook-sketch's rebuttal is right: doesCardFeedExist also calls getOriginalCompanyFeeds(feedData) with no feedKeysWithCards, so "a connected feed with zero assigned cards counts" matches how the rest of the app defines feed existence. The inline comment at useIsDomainUsingCard.ts:15 already records the tradeoff.

Your coverage point stands. The seven hook tests are good, but the isDisabled expressions at ExpensifyCardPreferredWorkspaceToggle.tsx:47 and DomainGroupCreatePage.tsx:219 are exactly where the original drift lived and have no test. A hook test for "both feed types present" is also missing.

Things I checked that are fine: the domain-scoped key choice matches the established pattern on the other domain pages; both selectors are module-scoped and return booleans, so unrelated feed writes won't re-render; the !isActive escape hatch is preserved so an already-on group can't get locked out; getOriginalCompanyFeeds does filter pendingAction: DELETE, pending, and the Expensify Card bank placeholder without feedKeysWithCards (CardUtils.ts:795-806), which the tests assert; import grouping matches the surrounding files.

CI: the only substantive failure is test (job 3) → NextStepUtilsTest › buildNextStep › scheduled submit enabled › monthly on the 2nd. That is a date-dependent test and this PR touches no NextStep code, so it is unrelated. The other two red checks are the checklist and independent-approval gates.

I did not run the flow end to end — it needs a verified domain with a third-party company card feed and no Expensify Card feed, which is the fixture trjExpensify and joekaufmanexpensify are still sourcing above.


view run

@marufsharifi

Copy link
Copy Markdown

@dilshodmackbook-sketch, could you please check the above comments. thanks.

@codecov

codecov Bot commented Sep 3, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ Changes either increased or maintained existing code coverage, great job!

Files with missing lines Coverage Δ
src/hooks/useIsDomainUsingCard.ts 100.00% <100.00%> (ø)
src/pages/domain/Groups/DomainGroupCreatePage.tsx 96.77% <90.90%> (+96.77%) ⬆️
...n/Groups/ExpensifyCardPreferredWorkspaceToggle.tsx 89.28% <50.00%> (+89.28%) ⬆️
... and 39 files with indirect coverage changes

@David-2002065

Copy link
Copy Markdown
Contributor Author

@marufsharifi addressed the comment above, ready for another review. thanks.

@joekaufmanexpensify

Copy link
Copy Markdown
Contributor

thanks!

@marufsharifi

Copy link
Copy Markdown

@dilshodmackbook-sketch

Bug

  1. create a group
  2. add card feed
  3. enable Card preferred workspace
  4. delete the card feed
  5. the Card preferred workspace stay enable which is expected.

Expected behavior: We should be able to disable it manually but not be able to re-enable since card feed is already deleted and required.

Actual behavior: We are not able to disable it manually.

RF-1.mp4

Adds regression tests for the existing-group toggle: when the override is
already on and the domain has no card feed, the switch stays unlocked so an
admin can still turn it off manually, and pressing it writes
overridePreferredPolicyWithCardPolicy=false through the normal update action
(no dependency on a card feed being present). It then re-locks so it can't be
turned back on until a feed exists.
@David-2002065

David-2002065 commented Sep 11, 2026 •

Copy link
Copy Markdown
Contributor Author

@marufsharifi the failing step here isn't removing the card feed, it's the domain reset right before it. Reset (OldDot > Domain admins > Reset Domain) permanently deletes the group settings too, not just the feed, so the security group no longer exists on the server when the toggle is tapped. That's the "Auth UpdateDomainSecurityGroup returned an error": there's no group left to write to.

Remove only the card feed and keep the group, and it works as intended. The toggle stays tappable while it's on, you can turn it off manually, and it re-locks once off so it can't be turned back on without a feed:

fix_99110_disable_after_feed_removed.mp4

Also added tests for this case (override on + no feed) so it stays covered.

@OSBotify

Copy link
Copy Markdown
Contributor

🦜 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 diff
diff --git a/src/languages/de.ts b/src/languages/de.ts
index 722cc4cb..094fd5df 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -11083,9 +11083,9 @@ Hier ist ein *Testbeleg*, um dir zu zeigen, wie es funktioniert:`,
             permissions: 'Gruppenberechtigungen',
             createNewGroupButton: 'Neue Gruppe',
             createGroupSubmitButton: 'Gruppe erstellen',
-            expensifyCardPreferredWorkspace: 'Bevorzugter Workspace für Expensify Card',
+            expensifyCardPreferredWorkspace: 'Bevorzugter Arbeitsbereich für Karte',
             expensifyCardPreferredWorkspaceDescription:
-                'Alle Expensify Card-Transaktionen werden im bevorzugten Expensify Card-Arbeitsbereich anstelle des bevorzugten Arbeitsbereichs erstellt. Durch Aktivieren dieser Funktion wird die Einstellung des bevorzugten Arbeitsbereichs nur für Expensify Card-Transaktionen überschrieben.',
+                'Alle Transaktionen der Expensify Karte und der Firmenkarte werden im bevorzugten Karten-Arbeitsbereich statt im bevorzugten Arbeitsbereich erstellt. Wenn Sie diese Funktion aktivieren, wird die Einstellung des bevorzugten Arbeitsbereichs nur für Kartentransaktionen überschrieben.',
             strictlyEnforceWorkspaceRules: 'Workspace-Regeln strikt durchsetzen',
             strictlyEnforceWorkspaceRulesDescription: 'Alle Workspace-Regeln müssen erfüllt sein, bevor ein Bericht eingereicht wird. Manuelle Ausnahmen sind nicht zulässig.',
             restrictExpenseWorkspaceCreation: 'Erstellen/Entfernen von Ausgaben-Workspaces einschränken',
@@ -11104,7 +11104,7 @@ Hier ist ein *Testbeleg*, um dir zu zeigen, wie es funktioniert:`,
             restrictDefaultLoginSelectionDescription:
                 'Verhindert, dass Mitglieder ihre Login-E-Mail-Adresse außerhalb der Unternehmensdomäne ändern, um Richtlinienbeschränkungen zu umgehen.',
             expensifyCardPreferredWorkspaceDisabledMessage:
-                'Um diese Einstellung zu aktivieren, aktiviere zuerst einen bevorzugten Workspace und richte Expensify Cards in deiner Domain ein.',
+                'Um diese Einstellung zu aktivieren, aktivieren Sie bitte zuerst einen bevorzugten Arbeitsbereich und richten Sie eine Expensify Karte oder einen Firmenkarten-Feed in Ihrer Domain ein.',
             findGroup: 'Gruppe suchen',
         },
     },
diff --git a/src/languages/el.ts b/src/languages/el.ts
index 9dbe5350..48bb06d4 100644
--- a/src/languages/el.ts
+++ b/src/languages/el.ts
@@ -11293,9 +11293,9 @@ ${reportName}`,
             permissions: 'Δικαιώματα ομάδας',
             createNewGroupButton: 'Νέα ομάδα',
             createGroupSubmitButton: 'Δημιουργία ομάδας',
-            expensifyCardPreferredWorkspace: 'Προτιμώμενος χώρος εργασίας για την Κάρτα Expensify',
+            expensifyCardPreferredWorkspace: 'Προτιμώμενος χώρος εργασίας κάρτας',
             expensifyCardPreferredWorkspaceDescription:
-                'Όλες οι συναλλαγές με Κάρτα Expensify θα δημιουργούνται στο προτιμώμενο χώρο εργασίας Κάρτας Expensify αντί για τον προτιμώμενο χώρο εργασίας. Η ενεργοποίηση αυτής της δυνατότητας θα παρακάμψει τη ρύθμιση προτιμώμενου χώρου εργασίας μόνο για τις συναλλαγές με Κάρτα Expensify.',
+                'Όλες οι συναλλαγές με Κάρτα Expensify και εταιρική κάρτα θα δημιουργούνται στον προτιμώμενο χώρο εργασίας για κάρτες αντί για τον προτιμώμενο χώρο εργασίας. Η ενεργοποίηση αυτής της δυνατότητας θα παρακάμψει τη ρύθμιση προτιμώμενου χώρου εργασίας μόνο για συναλλαγές με κάρτα.',
             strictlyEnforceWorkspaceRules: 'Επιβάλετε αυστηρά τους κανόνες του χώρου εργασίας',
             strictlyEnforceWorkspaceRulesDescription: 'Πρέπει να πληρούνται όλοι οι κανόνες του χώρου εργασίας πριν από την υποβολή μιας αναφοράς. Δεν επιτρέπονται χειροκίνητες εξαιρέσεις.',
             restrictExpenseWorkspaceCreation: 'Περιορισμός δημιουργίας/διαγραφής χώρου εργασίας εξόδων',
@@ -11314,7 +11314,7 @@ ${reportName}`,
             restrictDefaultLoginSelectionDescription:
                 'Αποτρέψτε τα μέλη από το να αλλάζουν το email σύνδεσής τους σε διεύθυνση εκτός του εταιρικού τους domain, ώστε να αποφύγετε περιορισμούς πολιτικών.',
             expensifyCardPreferredWorkspaceDisabledMessage:
-                'Για να ενεργοποιήσετε αυτήν τη ρύθμιση, ενεργοποιήστε πρώτα ένα προτιμώμενο χώρο εργασίας και ρυθμίστε τις Κάρτες Expensify στον τομέα σας.',
+                'Για να ενεργοποιήσετε αυτήν τη ρύθμιση, ενεργοποιήστε πρώτα ένα προτιμώμενο χώρο εργασίας και ρυθμίστε μια Κάρτα Expensify ή μια ροή εταιρικής κάρτας στον τομέα σας.',
             findGroup: 'Εύρεση ομάδας',
         },
     },
diff --git a/src/languages/es.ts b/src/languages/es.ts
index a59b0750..b8fc9e46 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -11303,9 +11303,9 @@ ${reportName}`,
             permissions: 'Permisos de grupo',
             createNewGroupButton: 'Nuevo grupo',
             createGroupSubmitButton: 'Crear grupo',
-            expensifyCardPreferredWorkspace: 'Espacio de trabajo preferido para Expensify Card',
+            expensifyCardPreferredWorkspace: 'Espacio de trabajo preferido para la tarjeta',
             expensifyCardPreferredWorkspaceDescription:
-                'Todas las transacciones de Expensify Card se crearán en el espacio de trabajo preferido de Expensify Card en lugar del espacio de trabajo preferido. Al habilitar esta función, la configuración de espacio de trabajo preferido se aplicará solo a las transacciones de Expensify Card.',
+                'Todas las transacciones de la Tarjeta Expensify y de las tarjetas de empresa se crearán en el espacio de trabajo preferido para tarjetas en lugar del espacio de trabajo preferido. Al habilitar esta función, se reemplazará la configuración de espacio de trabajo preferido solo para las transacciones con tarjeta.',
             strictlyEnforceWorkspaceRules: 'Hacer cumplir estrictamente las reglas del espacio de trabajo',
             strictlyEnforceWorkspaceRulesDescription: 'Todas las reglas del espacio de trabajo deben cumplirse antes de enviar un informe. No se permiten excepciones manuales.',
             restrictExpenseWorkspaceCreation: 'Restringir la creación/eliminación de espacios de trabajo de gastos',
@@ -11324,7 +11324,7 @@ ${reportName}`,
             restrictDefaultLoginSelection: 'Restringir el inicio de sesión predeterminado',
             restrictDefaultLoginSelectionDescription: 'Evita que los miembros cambien su correo de inicio de sesión fuera del dominio de la empresa para eludir restricciones de políticas.',
             expensifyCardPreferredWorkspaceDisabledMessage:
-                'Para habilitar esta configuración, primero habilita un espacio de trabajo preferido y configura las Tarjetas Expensify en tu dominio.',
+                'Para habilitar esta opción, primero habilita un espacio de trabajo preferido y configura una Tarjeta Expensify o una alimentación de tarjeta de empresa en tu dominio.',
             findGroup: 'Encontrar grupo',
         },
     },
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index e1361f18..b14774ad 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -11112,9 +11112,9 @@ Voici un *reçu test* pour vous montrer comment ça fonctionne :`,
             permissions: 'Autorisations du groupe',
             createNewGroupButton: 'Nouveau groupe',
             createGroupSubmitButton: 'Créer le groupe',
-            expensifyCardPreferredWorkspace: 'Espace de travail préféré pour la carte Expensify',
+            expensifyCardPreferredWorkspace: 'Espace de travail préféré pour la carte',
             expensifyCardPreferredWorkspaceDescription:
-                "Toutes les transactions Expensify Card seront créées dans l'espace de travail préféré Expensify Card au lieu de l'espace de travail préféré.",
+                'Toutes les transactions par Carte Expensify et carte d’entreprise seront créées dans l’Espace de travail préféré pour les cartes au lieu de l’Espace de travail préféré. L’activation de cette fonctionnalité remplacera le paramètre d’Espace de travail préféré pour les transactions par carte uniquement.',
             strictlyEnforceWorkspaceRules: 'Appliquer strictement les règles de l’espace de travail',
             strictlyEnforceWorkspaceRulesDescription:
                 'Toutes les règles de l’espace de travail doivent être respectées avant de soumettre un rapport. Aucune exception manuelle n’est autorisée.',
@@ -11135,7 +11135,7 @@ Voici un *reçu test* pour vous montrer comment ça fonctionne :`,
             restrictDefaultLoginSelectionDescription:
                 'Empêche les membres de modifier leur e-mail de connexion en dehors du domaine de leur entreprise afin d’éviter les restrictions de politique.',
             expensifyCardPreferredWorkspaceDisabledMessage:
-                'Pour activer ce paramètre, veuillez d’abord activer un espace de travail préféré et configurer les cartes Expensify sur votre domaine.',
+                'Pour activer ce paramètre, commencez par activer un espace de travail préféré et configurer une Carte Expensify ou un flux de cartes de société sur votre domaine.',
             findGroup: 'Trouver un groupe',
         },
     },
diff --git a/src/languages/it.ts b/src/languages/it.ts
index cf590c1b..1d0c5855 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -11040,9 +11040,9 @@ Ecco una *ricevuta di prova* per mostrarti come funziona:`,
             permissions: 'Autorizzazioni del gruppo',
             createNewGroupButton: 'Nuovo gruppo',
             createGroupSubmitButton: 'Crea gruppo',
-            expensifyCardPreferredWorkspace: 'Workspace preferito per Expensify Card',
+            expensifyCardPreferredWorkspace: 'Spazio di lavoro preferito per la carta',
             expensifyCardPreferredWorkspaceDescription:
-                "Tutte le transazioni Expensify Card verranno create nell'area di lavoro preferita Expensify Card anziché nell'area di lavoro preferita.",
+                'Tutte le transazioni effettuate con Carta Expensify e con carte aziendali verranno create nello spazio di lavoro Preferito per le carte invece che nello spazio di lavoro Preferito. Abilitando questa funzionalità, l’impostazione dello spazio di lavoro Preferito verrà ignorata solo per le transazioni con carta.',
             strictlyEnforceWorkspaceRules: 'Applica rigorosamente le regole dello spazio di lavoro',
             strictlyEnforceWorkspaceRulesDescription: 'Tutte le regole dello spazio di lavoro devono essere soddisfatte prima di inviare un rapporto. Non sono consentite eccezioni manuali.',
             restrictExpenseWorkspaceCreation: 'Limita la creazione/rimozione dell’area di lavoro spese',
@@ -11061,7 +11061,7 @@ Ecco una *ricevuta di prova* per mostrarti come funziona:`,
             restrictDefaultLoginSelection: 'Limita la selezione di accesso predefinita',
             restrictDefaultLoginSelectionDescription: 'Impedisce ai membri di modificare l’email di accesso al di fuori del dominio aziendale per eludere le restrizioni delle policy.',
             expensifyCardPreferredWorkspaceDisabledMessage:
-                'Per abilitare questa impostazione, abilita prima uno spazio di lavoro preferito e configura le Expensify Card per il tuo dominio.',
+                'Per abilitare questa impostazione, prima abilita uno spazio di lavoro preferito e configura una Carta Expensify o un flusso di carte aziendali sul tuo dominio.',
             findGroup: 'Trova gruppo',
         },
     },
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 3f3c9c12..72967d0a 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -10882,8 +10882,9 @@ ${reportName}`,
             permissions: 'グループの権限',
             createNewGroupButton: '新しいグループ',
             createGroupSubmitButton: 'グループを作成',
-            expensifyCardPreferredWorkspace: 'Expensify Card の優先ワークスペース',
-            expensifyCardPreferredWorkspaceDescription: 'すべてのExpensify Cardトランザクションは、優先ワークスペースではなくExpensify Card優先ワークスペースで作成されます。',
+            expensifyCardPreferredWorkspace: 'カード優先ワークスペース',
+            expensifyCardPreferredWorkspaceDescription:
+                'すべての Expensify カードおよび会社カードの取引は、「優先ワークスペース」ではなく「カード優先ワークスペース」で作成されます。この機能を有効にすると、カード取引に限り、優先ワークスペースの設定が上書きされます。',
             strictlyEnforceWorkspaceRules: 'ワークスペースのルールを厳密に適用する',
             strictlyEnforceWorkspaceRulesDescription: 'レポートを送信する前にすべてのワークスペースのルールを満たす必要があります。手動による例外は許可されていません。',
             restrictExpenseWorkspaceCreation: '経費ワークスペースの作成/削除を制限する',
@@ -10900,7 +10901,8 @@ ${reportName}`,
             noWorkspacesMessage: 'このドメインにワークスペースがありません。この制限を有効にするにはワークスペースが必要です。',
             restrictDefaultLoginSelection: 'デフォルトのログイン選択を制限する',
             restrictDefaultLoginSelectionDescription: 'メンバーがポリシー制限を回避するために、ログイン用のメールアドレスを会社のドメイン以外に変更することを防ぎます。',
-            expensifyCardPreferredWorkspaceDisabledMessage: 'この設定を有効にするには、まず優先するワークスペースを有効にし、ドメインでExpensify Cardsを設定してください。',
+            expensifyCardPreferredWorkspaceDisabledMessage:
+                'この設定を有効にするには、まず優先ワークスペースを有効にし、ドメイン上で Expensify カードまたは会社カードフィードを設定してください。',
             findGroup: 'グループを検索',
         },
     },
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index c82199cd..b92c0162 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -11004,8 +11004,9 @@ Hier is een *proefbon* om je te laten zien hoe het werkt:`,
             permissions: 'Groepsmachtigingen',
             createNewGroupButton: 'Nieuwe groep',
             createGroupSubmitButton: 'Groep aanmaken',
-            expensifyCardPreferredWorkspace: 'Expensify Card voorkeurswerkruimte',
-            expensifyCardPreferredWorkspaceDescription: 'Alle Expensify Card-transacties worden aangemaakt in de Expensify Card-voorkeurswerkruimte in plaats van de voorkeurswerkruimte.',
+            expensifyCardPreferredWorkspace: 'Voorkeurswerkruimte voor kaart',
+            expensifyCardPreferredWorkspaceDescription:
+                'Alle transacties met de Expensify Kaart en bedrijfspassen worden aangemaakt in de kaartvoorkeurswerkruimte in plaats van in de voorkeurswerkruimte. Als je deze functie inschakelt, wordt de instelling voor de voorkeurswerkruimte overschreven, maar alleen voor kaarttransacties.',
             strictlyEnforceWorkspaceRules: 'Werkruimteregels strikt afdwingen',
             strictlyEnforceWorkspaceRulesDescription:
                 'Aan alle werkruimteregels moet worden voldaan voordat een rapport kan worden ingediend. Handmatige uitzonderingen zijn niet toegestaan.',
@@ -11023,7 +11024,8 @@ Hier is een *proefbon* om je te laten zien hoe het werkt:`,
             noWorkspacesMessage: 'Er zijn geen werkruimtes op dit domein. Een werkruimte is vereist om deze beperking in te schakelen.',
             restrictDefaultLoginSelection: 'Standaard login-selectie beperken',
             restrictDefaultLoginSelectionDescription: 'Voorkomt dat leden hun login-e-mail wijzigen naar een adres buiten het bedrijfsdomein om beleidsbeperkingen te omzeilen.',
-            expensifyCardPreferredWorkspaceDisabledMessage: 'Om deze instelling in te schakelen, schakelt u eerst een voorkeurswerkruimte in en stelt u Expensify Cards in op uw domein.',
+            expensifyCardPreferredWorkspaceDisabledMessage:
+                'Schakel eerst een voorkeurswerkruimte in en stel een Expensify Kaart of een bedrijfskaartfeed in op je domein om deze instelling in te schakelen.',
             findGroup: 'Groep zoeken',
         },
     },
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 7322d4b5..29d402a3 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -11023,9 +11023,9 @@ Oto *paragon testowy*, żeby pokazać Ci, jak to działa:`,
             permissions: 'Uprawnienia grupy',
             createNewGroupButton: 'Nowa grupa',
             createGroupSubmitButton: 'Utwórz grupę',
-            expensifyCardPreferredWorkspace: 'Preferowany workspace karty Expensify',
+            expensifyCardPreferredWorkspace: 'Preferowane miejsce pracy karty',
             expensifyCardPreferredWorkspaceDescription:
-                'Wszystkie transakcje Expensify Card będą tworzone w preferowanym obszarze roboczym Expensify Card zamiast w preferowanym obszarze roboczym.',
+                'Wszystkie transakcje z Karty Expensify i kart firmowych będą tworzone w preferowanej przestrzeni roboczej dla kart zamiast w preferowanej przestrzeni roboczej. Włączenie tej funkcji nadpisze ustawienie preferowanej przestrzeni roboczej tylko dla transakcji kartowych.',
             strictlyEnforceWorkspaceRules: 'Ściśle egzekwuj reguły przestrzeni roboczej',
             strictlyEnforceWorkspaceRulesDescription: 'Przed przesłaniem raportu muszą zostać spełnione wszystkie reguły przestrzeni roboczej. Ręczne wyjątki są niedozwolone.',
             restrictExpenseWorkspaceCreation: 'Ogranicz tworzenie/usuwanie przestrzeni roboczej wydatków',
@@ -11042,7 +11042,8 @@ Oto *paragon testowy*, żeby pokazać Ci, jak to działa:`,
             noWorkspacesMessage: 'W tej domenie nie ma żadnych obszarów roboczych. Obszar roboczy jest wymagany, aby włączyć to ograniczenie.',
             restrictDefaultLoginSelection: 'Ogranicz wybór domyślnego logowania',
             restrictDefaultLoginSelectionDescription: 'Zapobiega zmianie adresu e-mail do logowania przez członków na adres spoza domeny firmowej, aby obejść ograniczenia zasad.',
-            expensifyCardPreferredWorkspaceDisabledMessage: 'Aby włączyć to ustawienie, najpierw włącz preferowane miejsce pracy i skonfiguruj karty Expensify w swojej domenie.',
+            expensifyCardPreferredWorkspaceDisabledMessage:
+                'Aby włączyć to ustawienie, najpierw włącz preferowany workspace i skonfiguruj Kartę Expensify lub zasilanie kart firmowych w swojej domenie.',
             findGroup: 'Znajdź grupę',
         },
     },
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 3e966e28..b0d34b9b 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -10997,9 +10997,9 @@ Aqui está um *comprovante de teste* para mostrar como funciona:`,
             permissions: 'Permissões do grupo',
             createNewGroupButton: 'Novo grupo',
             createGroupSubmitButton: 'Criar grupo',
-            expensifyCardPreferredWorkspace: 'Espaço de trabalho preferido para o cartão Expensify',
+            expensifyCardPreferredWorkspace: 'Workspace de cartão preferencial',
             expensifyCardPreferredWorkspaceDescription:
-                'Todas as transações do Expensify Card serão criadas no espaço de trabalho preferido do Expensify Card em vez do espaço de trabalho preferido.',
+                'Todas as transações do Cartão Expensify e de cartões corporativos serão criadas no Espaço de Trabalho Preferencial de Cartão em vez do Espaço de Trabalho Preferencial. Ativar este recurso substituirá a configuração de Espaço de Trabalho Preferencial apenas para transações de cartão.',
             strictlyEnforceWorkspaceRules: 'Aplicar rigorosamente as regras do espaço de trabalho',
             strictlyEnforceWorkspaceRulesDescription: 'Todas as regras do espaço de trabalho devem ser atendidas antes de enviar um relatório. Não são permitidas exceções manuais.',
             restrictExpenseWorkspaceCreation: 'Restringir a criação/remoção de espaços de trabalho de despesas',
@@ -11018,7 +11018,8 @@ Aqui está um *comprovante de teste* para mostrar como funciona:`,
             restrictDefaultLoginSelection: 'Restringir seleção de login padrão',
             restrictDefaultLoginSelectionDescription:
                 'Impede que os membros alterem o e-mail de login para um endereço fora do domínio da empresa, evitando que burlem restrições de políticas.',
-            expensifyCardPreferredWorkspaceDisabledMessage: 'Para ativar esta configuração, primeiro ative um workspace preferido e configure os Cartões Expensify no seu domínio.',
+            expensifyCardPreferredWorkspaceDisabledMessage:
+                'Para ativar esta configuração, primeiro ative um espaço de trabalho preferido e configure um Cartão Expensify ou um feed de cartão corporativo no seu domínio.',
             findGroup: 'Encontrar grupo',
         },
     },
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 59bed8db..4cda337e 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -10611,8 +10611,8 @@ ${reportName}`,
             permissions: '群组权限',
             createNewGroupButton: '新建群组',
             createGroupSubmitButton: '创建群组',
-            expensifyCardPreferredWorkspace: 'Expensify Card 首选工作区',
-            expensifyCardPreferredWorkspaceDescription: '所有Expensify Card交易将在Expensify Card首选工作区而非首选工作区中创建。',
+            expensifyCardPreferredWorkspace: '卡首选工作区',
+            expensifyCardPreferredWorkspaceDescription: '所有 Expensify 卡和公司卡交易将创建在“卡首选工作区”,而不是“首选工作区”。启用此功能后,将仅对卡交易覆盖“首选工作区”的设置。',
             strictlyEnforceWorkspaceRules: '严格执行工作空间规则',
             strictlyEnforceWorkspaceRulesDescription: '提交报告前必须满足所有工作空间规则。不允许手动例外。',
             restrictExpenseWorkspaceCreation: '限制创建/删除费用工作区',
@@ -10628,7 +10628,7 @@ ${reportName}`,
             noWorkspacesMessage: '此域上没有工作区。启用此限制需要一个工作区。',
             restrictDefaultLoginSelection: '限制默认登录选择',
             restrictDefaultLoginSelectionDescription: '防止成员将登录邮箱更改为公司域名以外的地址,以规避政策限制。',
-            expensifyCardPreferredWorkspaceDisabledMessage: '要启用此设置,请先启用一个首选工作区,并在您的域上完成 Expensify Cards 的设置。',
+            expensifyCardPreferredWorkspaceDisabledMessage: '如需启用此设置,请先启用一个首选工作区,并在您的域上设置 Expensify 卡或公司卡交易导入。',
             findGroup: '查找群组',
         },
     },

Note

You can apply these changes to your branch by copying the patch to your clipboard, then running pbpaste | git apply 😉

View workflow run

@David-2002065

Copy link
Copy Markdown
Contributor Author

@joekaufmanexpensify yeah that's cleaner, went with your approach.

now the toggles keep exactly what the person set, nothing flips on its own. on Create we re-check the dependency and if it's gone (workspace or card feed removed from another tab/device) we block the submit and show the oops error explaining why. and if they turn a toggle off themselves while its condition isn't met, it locks the same way it would on a cold load. covered both scenarios in the tests too

cc @marufsharifi

@joekaufmanexpensify

Copy link
Copy Markdown
Contributor

Great, thank you!

@marufsharifi

marufsharifi commented Sep 15, 2026 •

Copy link
Copy Markdown

Reviewer Checklist

  • I have verified the author checklist is complete (all boxes are checked off).
  • I verified the correct issue is linked in the ### Fixed Issues section above
  • I verified testing steps are clear and they cover the changes made in this PR
    • I verified the steps for local testing are in the Tests section
    • I verified the steps for Staging and/or Production testing are in the QA steps section
    • I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
  • I checked that screenshots or videos are included for tests on all platforms
  • I included screenshots or videos for tests on all platforms
  • I verified that the composer does not automatically focus or open the keyboard on mobile unless explicitly intended. This includes checking that returning the app from the background does not unexpectedly open the keyboard.
  • I verified tests pass on all platforms & I tested again on:
    • Android: HybridApp
    • Android: mWeb Chrome
    • iOS: HybridApp
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
  • If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
  • I verified proper code patterns were followed (see Reviewing the code)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I verified that this PR follows the guidelines as stated in the Review Guidelines
  • I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
  • If a new component is created I verified that:
    • A similar component doesn't exist in the codebase
    • All props are defined accurately
    • The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • The only data being stored in the state is data necessary for rendering and nothing else
    • The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG)
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • For any bug fix or new feature in this PR, I verified that sufficient unit tests are included to prevent regressions in this flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
  • I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: HybridApp
andrid.ntative.mov
Android: mWeb Chrome
androidweb.mp4
iOS: HybridApp
iosnative.mov
iOS: mWeb Safari
ios.web.mov
MacOS: Chrome / Safari
web.mov

@marufsharifi

Copy link
Copy Markdown

@dilshodmackbook-sketch, could you please merge the main? thanks.

@David-2002065

Copy link
Copy Markdown
Contributor Author

@dilshodmackbook-sketch, could you please merge the main? thanks.

@marufsharifi done

@marufsharifi marufsharifi left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@melvin-bot
melvin-bot Bot requested a review from NicolasBonet September 16, 2026 10:38
Comment thread src/languages/es.ts Resolved
@David-2002065

Copy link
Copy Markdown
Contributor Author

@NicolasBonet Done

@NicolasBonet
NicolasBonet merged commit 7ab06cb into Expensify:main Sep 16, 2026
35 of 36 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

🚧 NicolasBonet has triggered a test Expensify/App build. You can view the workflow run here.

@OSBotify

Copy link
Copy Markdown
Contributor

✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to staging by https://github.com/NicolasBonet in version: 9.4.81-0 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 success ✅

@MelvinBot

Copy link
Copy Markdown
Contributor

Yes — one help site article needed updating, and the draft PR is up: Docs updates for E/A#100127 Card preferred workspace now covers company card feeds (Expensify/App#101372).

What was stale. docs/articles/new-expensify/domains/Create-and-Manage-Domain-Groups.md had a section titled "What Expensify Card preferred workspace does" that said the toggle posts Expensify Card transactions only. After this PR the label is Card preferred workspace and it covers company card feeds too, so a Domain Admin with only a third-party feed would read that the setting doesn't apply to them.

What the docs PR changes.

  • Renames the section to What Card preferred workspace does and rewrites it to cover Expensify Card and company card transactions, noting the override applies to card transactions only.
  • Documents the two prerequisites that unlock the toggle (Preferred Workspace enabled with a workspace selected, plus an Expensify Card or a company card feed on the domain) and quotes the locked-state message verbatim.
  • Adds two FAQ entries: whether it applies to company cards, and why the toggle is locked.
  • Adds card preferred workspace / company card preferred workspace keywords.

It also includes two small UI-exact fixes in the same article that docs/HELPSITE_NAMING_CONVENTIONS.md requires: the create-group steps said Create group → Save when the real labels are New group → Create group, and "Preferred workspace" is capitalized Preferred Workspace in the app. Drop either one if you'd rather keep the PR to the copy change alone.

Two things you should check.

  1. I could not confirm the labels against a running domain — the automated test account has no verified domain and creating one needs a security code emailed to the test inbox, which this run can't read. Every label in the docs PR came from src/languages/en.ts on main plus the components that consume those keys, so they match shipped code — but the navigation path in the article (Workspaces > Domains > domain > Groups) is unverified from the UI here.
  2. GitHub refused to assign you to the docs PR (could not assign user: 'dilshodmackbook-sketch' not found) — only users with push access on Expensify/App can be assignees. The PR is a draft with HelpDot applied and PullerBear requested; please assign yourself, or ask an Expensify engineer to.
Articles I checked and left alone
  • docs/articles/expensify-classic/domains/Domain-Groups.md — still says "Expensify Card Preferred Workspace", which is correct: this PR is NewDot-only and did not touch Classic.
  • docs/articles/new-expensify/domains/Manage-Domain-Members.md, docs/articles/expensify-classic/connect-credit-cards/Manage-Company-Cards.md, docs/articles/expensify-classic/expensify-card/Admin-Card-Settings-and-Features.md — these reference the plain Preferred Workspace setting, which this PR does not change.

@dilshodmackbook-sketch, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR Ready for review

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to production by https://github.com/luacmartins in version: 9.4.81-1 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 failure ❌
🍎 iOS 🍎 failure ❌

1 similar comment
@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to production by https://github.com/luacmartins in version: 9.4.81-1 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 failure ❌
🍎 iOS 🍎 failure ❌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants