From 65f0c5d2f4ccce254b7565442dad8ef6c0552e36 Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Fri, 24 Jul 2026 04:44:12 +0100 Subject: [PATCH 01/17] add export menu item to Expensify Card details --- ...namicWorkspaceExpensifyCardDetailsPage.tsx | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx b/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx index 79cbd3fe8a35..6590f1b15faf 100644 --- a/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx +++ b/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx @@ -29,14 +29,16 @@ import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; +import {clearCompanyCardErrorField} from '@libs/actions/CompanyCards'; import {openPolicyExpensifyCardsPage} from '@libs/actions/Policy/Policy'; import navigateToCardTransactions from '@libs/CardNavigationUtils'; import {getAllCardsForWorkspace, getCardFeedTextColor, getCardHintText, getTranslationKeyForLimitType, isCardFrozen, maskCard} from '@libs/CardUtils'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; import {temporaryGetDisplayNameOrDefault} from '@libs/PersonalDetailsUtils'; -import {arePolicyRulesEnabled, canMemberWrite} from '@libs/PolicyUtils'; +import {arePolicyRulesEnabled, canMemberWrite, getConnectedIntegration} from '@libs/PolicyUtils'; import {getSpendRuleByCardID, getSpendRuleSummaryText} from '@libs/SpendRulesUtils'; import Navigation from '@navigation/Navigation'; @@ -62,6 +64,8 @@ import {cardByIdSelector} from '@selectors/Card'; import React, {useCallback, useEffect, useMemo, useState} from 'react'; import {View} from 'react-native'; +import {getExportMenuItem} from '../companyCards/utils'; + type DynamicWorkspaceExpensifyCardDetailsPageProps = PlatformStackScreenProps< SettingsNavigatorParamList, typeof SCREENS.WORKSPACE.DYNAMIC_EXPENSIFY_CARD_DETAILS | typeof SCREENS.EXPENSIFY_CARD.DYNAMIC_EXPENSIFY_CARD_DETAILS @@ -117,6 +121,12 @@ function DynamicWorkspaceExpensifyCardDetailsPage({route}: DynamicWorkspaceExpen const [allFeedsCards, allFeedsCardsResult] = useOnyx(ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST); const workspaceCards = getAllCardsForWorkspace(defaultFundID, allFeedsCards, cardFeeds, expensifyCardSettings, /* includeDeactivated */ true); + const workspaceAccountID = policy?.policyAccountID ?? CONST.DEFAULT_NUMBER_ID; + + const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policyID}`); + const syncingAccountingIntegration = CONST.POLICY.CONNECTIONS.ACCOUNTING_CONNECTION_NAMES.find((integration) => integration === connectionSyncProgress?.connectionName); + const connectedIntegration = getConnectedIntegration(policy, CONST.POLICY.CONNECTIONS.ACCOUNTING_CONNECTION_NAMES) ?? syncingAccountingIntegration; + const workspaceCard = workspaceCards?.[cardID]; const card = workspaceCard ?? cardFromCardList; const currency = useCurrencyForExpensifyCard({ @@ -131,6 +141,7 @@ function DynamicWorkspaceExpensifyCardDetailsPage({route}: DynamicWorkspaceExpen passedPersonalDetails: cardholder, translate, }); + const exportMenuItem = getExportMenuItem(connectedIntegration, policyID, translate, styles, policy, card); const translationForLimitType = getTranslationKeyForLimitType(card?.nameValuePairs?.limitType); const remainingLimitHintTranslationKey = getLimitHintTranslationKey(card?.nameValuePairs?.limitType); const remainingLimitHint = remainingLimitHintTranslationKey ? translate(remainingLimitHintTranslationKey, formattedAvailableSpendAmount) : undefined; @@ -415,6 +426,29 @@ function DynamicWorkspaceExpensifyCardDetailsPage({route}: DynamicWorkspaceExpen interactive={canWriteExpensifyCard} /> + {exportMenuItem?.shouldShowMenuItem ? ( + { + if (!exportMenuItem.exportType) { + return; + } + clearCompanyCardErrorField(Number(card?.fundID ?? workspaceAccountID), cardID, CONST.EXPENSIFY_CARD.BANK, exportMenuItem.exportType); + }} + > + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute()))} + interactive={canWriteExpensifyCard} + sentryLabel={CONST.SENTRY_LABEL.WORKSPACE.COMPANY_CARDS.CARD_EXPORT} + /> + + ) : null} {canEditSpendRules && ( From 8d842238de699db5821564299ab89a78ab64185e Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Fri, 24 Jul 2026 04:52:55 +0100 Subject: [PATCH 02/17] update WORKSPACE_COMPANY_CARD_EXPORT route to accept feed and cardID params and add DYNAMIC_EXPENSIFY_CARD_DETAILS entry --- src/ROUTES.ts | 8 ++++---- .../rillet/export/RilletCardAccountCardList.tsx | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index c55bfb86f95d..e45d220687a5 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -808,12 +808,12 @@ const DYNAMIC_ROUTES = { getRoute: (feed: CompanyCardFeedWithDomainID, cardID: string) => `company-card-details/${encodeURIComponent(feed)}/${encodeURIComponent(cardID)}` as const, }, WORKSPACE_COMPANY_CARD_EXPORT: { - path: 'edit/export/:cardID?', - entryScreens: [SCREENS.WORKSPACE.DYNAMIC_COMPANY_CARD_DETAILS, SCREENS.WORKSPACE.ACCOUNTING.RILLET_CARD_ACCOUNT_CARD_LIST], + path: 'edit/export/:feed?/:cardID?', + entryScreens: [SCREENS.WORKSPACE.DYNAMIC_COMPANY_CARD_DETAILS, SCREENS.WORKSPACE.DYNAMIC_EXPENSIFY_CARD_DETAILS, SCREENS.WORKSPACE.ACCOUNTING.RILLET_CARD_ACCOUNT_CARD_LIST], - // The cardID param is optional because some entry screens e.g. `SCREENS.WORKSPACE.DYNAMIC_COMPANY_CARD_DETAILS` + // The feed and cardID params are optional because some entry screens e.g. `SCREENS.WORKSPACE.DYNAMIC_COMPANY_CARD_DETAILS` // already has the cardID in their path and we don't want to double pass the cardID. - getRoute: (cardID?: string) => `edit/export${cardID ? `/${encodeURIComponent(cardID)}` : ''}` as const, + getRoute: (feed?: CardFeedWithDomainID, cardID?: string) => `edit/export${feed ? `/${encodeURIComponent(feed)}` : ''}${cardID ? `/${encodeURIComponent(cardID)}` : ''}` as const, }, WORKSPACE_COMPANY_CARDS_ASSIGN_CARD_ASSIGNEE: { path: 'assign-card/:feed/:cardID/assignee', diff --git a/src/pages/workspace/accounting/rillet/export/RilletCardAccountCardList.tsx b/src/pages/workspace/accounting/rillet/export/RilletCardAccountCardList.tsx index 3355d52e2065..60775dc3b1e0 100644 --- a/src/pages/workspace/accounting/rillet/export/RilletCardAccountCardList.tsx +++ b/src/pages/workspace/accounting/rillet/export/RilletCardAccountCardList.tsx @@ -93,7 +93,7 @@ function RilletCardAccountCardList({ Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute(String(cardID))))} + onPress={() => Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute(feedWithDomainID, String(cardID))))} shouldShowRightIcon brickRoadIndicator={ areCardsCustomExportInErrorFields( From 33fe9565ca2bc0b7ccec03334c2f03fc0398d8ec Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Fri, 24 Jul 2026 04:57:22 +0100 Subject: [PATCH 03/17] make feed and cardID params required --- src/ROUTES.ts | 7 ++----- .../DynamicWorkspaceCompanyCardDetailsPage.tsx | 6 +++--- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index e45d220687a5..7c4aa221ea06 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -808,12 +808,9 @@ const DYNAMIC_ROUTES = { getRoute: (feed: CompanyCardFeedWithDomainID, cardID: string) => `company-card-details/${encodeURIComponent(feed)}/${encodeURIComponent(cardID)}` as const, }, WORKSPACE_COMPANY_CARD_EXPORT: { - path: 'edit/export/:feed?/:cardID?', + path: 'edit/export/:feed/:cardID', entryScreens: [SCREENS.WORKSPACE.DYNAMIC_COMPANY_CARD_DETAILS, SCREENS.WORKSPACE.DYNAMIC_EXPENSIFY_CARD_DETAILS, SCREENS.WORKSPACE.ACCOUNTING.RILLET_CARD_ACCOUNT_CARD_LIST], - - // The feed and cardID params are optional because some entry screens e.g. `SCREENS.WORKSPACE.DYNAMIC_COMPANY_CARD_DETAILS` - // already has the cardID in their path and we don't want to double pass the cardID. - getRoute: (feed?: CardFeedWithDomainID, cardID?: string) => `edit/export${feed ? `/${encodeURIComponent(feed)}` : ''}${cardID ? `/${encodeURIComponent(cardID)}` : ''}` as const, + getRoute: (feed: CardFeedWithDomainID, cardID: string) => `edit/export/${encodeURIComponent(feed)}/${encodeURIComponent(cardID)}` as const, }, WORKSPACE_COMPANY_CARDS_ASSIGN_CARD_ASSIGNEE: { path: 'assign-card/:feed/:cardID/assignee', diff --git a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx index a0920da17692..6249528d5ded 100644 --- a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx +++ b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx @@ -71,9 +71,9 @@ import {getExportMenuItem} from './utils'; type DynamicWorkspaceCompanyCardDetailsPageProps = PlatformStackScreenProps; function DynamicWorkspaceCompanyCardDetailsPage({route}: DynamicWorkspaceCompanyCardDetailsPageProps) { - const {policyID, cardID} = route.params; + const {policyID, feed, cardID} = route.params; const backPath = useDynamicBackPath(DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_DETAILS.path); - const feedName = decodeURIComponent(route.params.feed) as CompanyCardFeedWithDomainID; + const feedName = decodeURIComponent(feed) as CompanyCardFeedWithDomainID; const bank = getCompanyCardFeed(feedName); const {translate, getLocalDateFromDatetime} = useLocalize(); @@ -258,7 +258,7 @@ function DynamicWorkspaceCompanyCardDetailsPage({route}: DynamicWorkspaceCompany title={exportMenuItem.title} numberOfLinesTitle={2} shouldShowRightIcon={canWriteCompanyCards} - onPress={() => Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute()))} + onPress={() => Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute(feed, cardID)))} interactive={canWriteCompanyCards} sentryLabel={CONST.SENTRY_LABEL.WORKSPACE.COMPANY_CARDS.CARD_EXPORT} /> From 6713d5d17728fb54d060ba7200aca18443322711 Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Fri, 24 Jul 2026 05:09:34 +0100 Subject: [PATCH 04/17] pass feed and cardID params --- .../DynamicWorkspaceExpensifyCardDetailsPage.tsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx b/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx index 6590f1b15faf..f0b443bdec53 100644 --- a/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx +++ b/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx @@ -32,7 +32,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import {clearCompanyCardErrorField} from '@libs/actions/CompanyCards'; import {openPolicyExpensifyCardsPage} from '@libs/actions/Policy/Policy'; import navigateToCardTransactions from '@libs/CardNavigationUtils'; -import {getAllCardsForWorkspace, getCardFeedTextColor, getCardHintText, getTranslationKeyForLimitType, isCardFrozen, maskCard} from '@libs/CardUtils'; +import {getAllCardsForWorkspace, getCardFeedTextColor, getCardHintText, getCardFeedWithDomainID, getTranslationKeyForLimitType, isCardFrozen, maskCard} from '@libs/CardUtils'; import {getLatestErrorField} from '@libs/ErrorUtils'; import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; @@ -443,7 +443,16 @@ function DynamicWorkspaceExpensifyCardDetailsPage({route}: DynamicWorkspaceExpen title={exportMenuItem.title} numberOfLinesTitle={2} shouldShowRightIcon={canWriteExpensifyCard} - onPress={() => Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute()))} + onPress={() => + Navigation.navigate( + createDynamicRoute( + DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute( + getCardFeedWithDomainID(card.bank, card?.fundID ?? workspaceAccountID), + String(card.cardID), + ), + ), + ) + } interactive={canWriteExpensifyCard} sentryLabel={CONST.SENTRY_LABEL.WORKSPACE.COMPANY_CARDS.CARD_EXPORT} /> From c481f56a924d0e1342287d4ede51142e645a777c Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Fri, 24 Jul 2026 05:17:56 +0100 Subject: [PATCH 05/17] fix ts --- src/libs/actions/CompanyCards.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts index 8ba9884979eb..51bc536a4024 100644 --- a/src/libs/actions/CompanyCards.ts +++ b/src/libs/actions/CompanyCards.ts @@ -36,6 +36,7 @@ import type { AddNewCardFeedStep, CardFeedData, CardFeedDetails, + CardFeedWithNumber, CompanyCardFeed, CompanyCardFeedWithDomainID, CompanyCardFeedWithNumber, @@ -965,7 +966,7 @@ function setCompanyCardExportAccount(policyID: string, domainOrWorkspaceAccountI }); } -function clearCompanyCardErrorField(domainOrWorkspaceAccountID: number, cardID: string, bankName: CompanyCardFeedWithNumber, fieldName: string, isRootLevel?: boolean) { +function clearCompanyCardErrorField(domainOrWorkspaceAccountID: number, cardID: string, bankName: CardFeedWithNumber, fieldName: string, isRootLevel?: boolean) { if (isRootLevel) { Onyx.merge(`${ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST}${domainOrWorkspaceAccountID}_${bankName}`, { [cardID]: { From 0eeac671bfade05cf46a6099fc68e04c6bb1446b Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Fri, 24 Jul 2026 05:18:31 +0100 Subject: [PATCH 06/17] clean up --- ...DynamicWorkspaceCompanyCardDetailsPage.tsx | 32 +++++++++---------- ...namicWorkspaceExpensifyCardDetailsPage.tsx | 1 - 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx index 6249528d5ded..0fb3d5e792c9 100644 --- a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx +++ b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx @@ -241,6 +241,22 @@ function DynamicWorkspaceCompanyCardDetailsPage({route}: DynamicWorkspaceCompany interactive={false} titleStyle={styles.walletCardNumber} /> + clearCompanyCardErrorField(domainOrWorkspaceAccountID, cardID, bank, 'scrapeMinDate', true)} + > + Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARD_EDIT_TRANSACTION_START_DATE.getRoute(policyID, cardID, feedName))} + interactive={canWriteCompanyCards} + sentryLabel={CONST.SENTRY_LABEL.WORKSPACE.COMPANY_CARDS.TRANSACTION_START_DATE} + /> + {exportMenuItem?.shouldShowMenuItem ? ( ) : null} - clearCompanyCardErrorField(domainOrWorkspaceAccountID, cardID, bank, 'scrapeMinDate', true)} - > - Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARD_EDIT_TRANSACTION_START_DATE.getRoute(policyID, cardID, feedName))} - interactive={canWriteCompanyCards} - sentryLabel={CONST.SENTRY_LABEL.WORKSPACE.COMPANY_CARDS.TRANSACTION_START_DATE} - /> - {canWriteCompanyCards && shouldShowBreakConnection && ( ) : null} - {canEditSpendRules && ( Date: Fri, 24 Jul 2026 05:32:46 +0100 Subject: [PATCH 07/17] add exportsTo copy --- src/languages/en.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/languages/en.ts b/src/languages/en.ts index c0968a1c508f..c6e605acfb0e 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -511,6 +511,7 @@ const translations = { headsUp: 'Heads up!', submitTo: 'Submit to', forwardTo: 'Forward to', + exportsTo: 'Exports to', approvalLimit: 'Approval limit', overLimitForwardTo: 'Over limit forward to', merge: 'Merge', From 6229e0cf785fee8e5fe42048e35209893262fa7a Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Fri, 24 Jul 2026 05:40:03 +0100 Subject: [PATCH 08/17] update title and description for Rillet menu item --- src/pages/workspace/companyCards/utils.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/workspace/companyCards/utils.tsx b/src/pages/workspace/companyCards/utils.tsx index 1d421fb3c1c7..83554c08ef91 100644 --- a/src/pages/workspace/companyCards/utils.tsx +++ b/src/pages/workspace/companyCards/utils.tsx @@ -20,6 +20,7 @@ type ExportIntegration = { exportPageLink: string; data: SelectorType[]; exportType?: ValueOf; + shouldHideMenuItemDescription?: boolean; shouldShowMenuItem?: boolean; }; @@ -393,7 +394,7 @@ function getExportMenuItem( : undefined) ?? cardProgramAccount?.id; const cardAccount = rilletData?.accounts?.find((account) => account.id === cardAccountID); const cardAccountDisplayName = cardAccount ? `${cardAccount.code} ${cardAccount.name}${isUsingCustomAccount ? '' : ` (${translate('common.default').toLocaleLowerCase()})`}` : ''; - const title = cardAccountDisplayName; + const title = `${translate('common.exportsTo')} ${cardAccountDisplayName}`; const description = currentConnectionName ? translate('workspace.moreFeatures.companyCards.integrationExport', currentConnectionName, translate('workspace.rillet.cardAccount.label')) : undefined; @@ -417,6 +418,7 @@ function getExportMenuItem( title, description, exportType, + shouldHideMenuItemDescription: true, shouldShowMenuItem, exportPageLink: ROUTES.POLICY_ACCOUNTING_RILLET_EXPORT.getRoute(policyID), data: filteredData, From 9bf346b048d0de653589fd083f0ea2c6b8d55d47 Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Fri, 24 Jul 2026 05:56:32 +0100 Subject: [PATCH 09/17] add shouldShowMenuItemIcon param --- src/pages/workspace/companyCards/utils.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/workspace/companyCards/utils.tsx b/src/pages/workspace/companyCards/utils.tsx index 83554c08ef91..76890c42352c 100644 --- a/src/pages/workspace/companyCards/utils.tsx +++ b/src/pages/workspace/companyCards/utils.tsx @@ -21,6 +21,7 @@ type ExportIntegration = { data: SelectorType[]; exportType?: ValueOf; shouldHideMenuItemDescription?: boolean; + shouldShowMenuItemIcon?: boolean; shouldShowMenuItem?: boolean; }; @@ -419,6 +420,7 @@ function getExportMenuItem( description, exportType, shouldHideMenuItemDescription: true, + shouldShowMenuItemIcon: true, shouldShowMenuItem, exportPageLink: ROUTES.POLICY_ACCOUNTING_RILLET_EXPORT.getRoute(policyID), data: filteredData, From 4faeeb6c603ca7977b218ccac91ae6312ad97c40 Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Fri, 24 Jul 2026 06:05:45 +0100 Subject: [PATCH 10/17] update export menu item to use icon when provided --- ...namicWorkspaceExpensifyCardDetailsPage.tsx | 88 ++++++++++++------- 1 file changed, 55 insertions(+), 33 deletions(-) diff --git a/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx b/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx index b62dd077f986..58441bf4528f 100644 --- a/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx +++ b/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx @@ -39,6 +39,7 @@ import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavig import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; import {temporaryGetDisplayNameOrDefault} from '@libs/PersonalDetailsUtils'; import {arePolicyRulesEnabled, canMemberWrite, getConnectedIntegration} from '@libs/PolicyUtils'; +import {getIntegrationIcon} from '@libs/ReportUtils'; import {getSpendRuleByCardID, getSpendRuleSummaryText} from '@libs/SpendRulesUtils'; import Navigation from '@navigation/Navigation'; @@ -99,7 +100,20 @@ function DynamicWorkspaceExpensifyCardDetailsPage({route}: DynamicWorkspaceExpen const [isOfflineModalVisible, setIsOfflineModalVisible] = useState(false); const {translate} = useLocalize(); const {login: currentUserLogin = ''} = useCurrentUserPersonalDetails(); - const expensifyIcons = useMemoizedLazyExpensifyIcons(['FreezeCard', 'MoneySearch', 'Trashcan', 'CreditCardLock']); + const expensifyIcons = useMemoizedLazyExpensifyIcons([ + 'FreezeCard', + 'MoneySearch', + 'Trashcan', + 'CreditCardLock', + 'XeroSquare', + 'QBOSquare', + 'NetSuiteSquare', + 'IntacctSquare', + 'QBDSquare', + 'CertiniaSquare', + 'RilletSquare', + 'GustoSquare', + ]); const illustrations = useMemoizedLazyIllustrations(['ExpensifyCardImage']); // We need to use isSmallScreenWidth instead of shouldUseNarrowLayout to use the correct modal type for the decision modal // eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth @@ -426,38 +440,6 @@ function DynamicWorkspaceExpensifyCardDetailsPage({route}: DynamicWorkspaceExpen interactive={canWriteExpensifyCard} /> - {exportMenuItem?.shouldShowMenuItem ? ( - { - if (!exportMenuItem.exportType) { - return; - } - clearCompanyCardErrorField(Number(card?.fundID ?? workspaceAccountID), cardID, CONST.EXPENSIFY_CARD.BANK, exportMenuItem.exportType); - }} - > - - Navigation.navigate( - createDynamicRoute( - DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute( - getCardFeedWithDomainID(card.bank, card?.fundID ?? workspaceAccountID), - String(card.cardID), - ), - ), - ) - } - interactive={canWriteExpensifyCard} - sentryLabel={CONST.SENTRY_LABEL.WORKSPACE.COMPANY_CARDS.CARD_EXPORT} - /> - - ) : null} {canEditSpendRules && ( )} + {exportMenuItem?.shouldShowMenuItem ? ( + <> + + {translate('workspace.common.accounting')} + + { + if (!exportMenuItem.exportType) { + return; + } + clearCompanyCardErrorField(Number(card?.fundID ?? workspaceAccountID), cardID, CONST.EXPENSIFY_CARD.BANK, exportMenuItem.exportType); + }} + > + + Navigation.navigate( + createDynamicRoute( + DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute( + getCardFeedWithDomainID(card.bank, card?.fundID ?? workspaceAccountID), + String(card.cardID), + ), + ), + ) + } + interactive={canWriteExpensifyCard} + sentryLabel={CONST.SENTRY_LABEL.WORKSPACE.COMPANY_CARDS.CARD_EXPORT} + /> + + + ) : null} Date: Fri, 24 Jul 2026 06:10:13 +0100 Subject: [PATCH 11/17] update export menu item to use icon when provided - 2 --- ...DynamicWorkspaceCompanyCardDetailsPage.tsx | 70 ++++++++++++------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx index 0fb3d5e792c9..396c07a5ad14 100644 --- a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx +++ b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx @@ -42,6 +42,7 @@ import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavig import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; import {temporaryGetDisplayNameOrDefault} from '@libs/PersonalDetailsUtils'; import {getConnectedIntegration} from '@libs/PolicyUtils'; +import {getIntegrationIcon} from '@libs/ReportUtils'; import Navigation from '@navigation/Navigation'; @@ -80,7 +81,20 @@ function DynamicWorkspaceCompanyCardDetailsPage({route}: DynamicWorkspaceCompany const styles = useThemeStyles(); const illustrations = useThemeIllustrations(); const companyCardFeedIcons = useCompanyCardFeedIcons(); - const expensifyIcons = useMemoizedLazyExpensifyIcons(['MoneySearch', 'RemoveMembers', 'Sync', 'Trashcan']); + const expensifyIcons = useMemoizedLazyExpensifyIcons([ + 'MoneySearch', + 'RemoveMembers', + 'Sync', + 'Trashcan', + 'XeroSquare', + 'QBOSquare', + 'NetSuiteSquare', + 'IntacctSquare', + 'QBDSquare', + 'CertiniaSquare', + 'RilletSquare', + 'GustoSquare', + ]); const {isOffline} = useNetwork(); const {showConfirmModal} = useConfirmModal(); @@ -257,29 +271,6 @@ function DynamicWorkspaceCompanyCardDetailsPage({route}: DynamicWorkspaceCompany sentryLabel={CONST.SENTRY_LABEL.WORKSPACE.COMPANY_CARDS.TRANSACTION_START_DATE} /> - {exportMenuItem?.shouldShowMenuItem ? ( - { - if (!exportMenuItem.exportType) { - return; - } - clearCompanyCardErrorField(domainOrWorkspaceAccountID, cardID, bank, exportMenuItem.exportType); - }} - > - Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute(feed, cardID)))} - interactive={canWriteCompanyCards} - sentryLabel={CONST.SENTRY_LABEL.WORKSPACE.COMPANY_CARDS.CARD_EXPORT} - /> - - ) : null} {canWriteCompanyCards && shouldShowBreakConnection && ( )} + {exportMenuItem?.shouldShowMenuItem ? ( + <> + + {translate('workspace.common.accounting')} + + { + if (!exportMenuItem.exportType) { + return; + } + clearCompanyCardErrorField(domainOrWorkspaceAccountID, cardID, bank, exportMenuItem.exportType); + }} + > + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute(feed, cardID)))} + interactive={canWriteCompanyCards} + sentryLabel={CONST.SENTRY_LABEL.WORKSPACE.COMPANY_CARDS.CARD_EXPORT} + /> + + + ) : null} From 6a33ba83a161f2906087dbf5e6c365e93e57c8a6 Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Fri, 24 Jul 2026 06:48:32 +0100 Subject: [PATCH 12/17] lint --- .../expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx b/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx index 58441bf4528f..ae14bc8a5ff8 100644 --- a/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx +++ b/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx @@ -47,6 +47,7 @@ import Navigation from '@navigation/Navigation'; import NotFoundPage from '@pages/ErrorPage/NotFoundPage'; import CardDetailsActionButtons, {CardDetailsActionButton} from '@pages/settings/Wallet/CardDetailsActionButtons'; import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; +import {getExportMenuItem} from '@pages/workspace/companyCards/utils'; import variables from '@styles/variables'; @@ -65,8 +66,6 @@ import {cardByIdSelector} from '@selectors/Card'; import React, {useCallback, useEffect, useMemo, useState} from 'react'; import {View} from 'react-native'; -import {getExportMenuItem} from '../companyCards/utils'; - type DynamicWorkspaceExpensifyCardDetailsPageProps = PlatformStackScreenProps< SettingsNavigatorParamList, typeof SCREENS.WORKSPACE.DYNAMIC_EXPENSIFY_CARD_DETAILS | typeof SCREENS.EXPENSIFY_CARD.DYNAMIC_EXPENSIFY_CARD_DETAILS From 9df2b8fd5243697326398b409af445c0a21f90b7 Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Fri, 24 Jul 2026 19:01:33 +0100 Subject: [PATCH 13/17] translate --- src/languages/de.ts | 1 + src/languages/es.ts | 1 + src/languages/fr.ts | 1 + src/languages/it.ts | 1 + src/languages/ja.ts | 1 + src/languages/nl.ts | 1 + src/languages/pl.ts | 1 + src/languages/pt-BR.ts | 1 + src/languages/zh-hans.ts | 1 + 9 files changed, 9 insertions(+) diff --git a/src/languages/de.ts b/src/languages/de.ts index 2b4c88ee9c30..7f7759882461 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -529,6 +529,7 @@ const translations: TranslationDeepObject = { unableToDisplayChart: 'Diagram kann nicht angezeigt werden', webGLNotSupported: 'Ihr Browser unterstützt WebGL nicht. Bitte aktivieren Sie es oder wechseln Sie den Browser.', apiKey: 'API-Schlüssel', + exportsTo: 'Exportiert nach', }, socials: { podcast: 'Folgen Sie uns auf Podcast', diff --git a/src/languages/es.ts b/src/languages/es.ts index 293750179f19..e27979360211 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -482,6 +482,7 @@ const translations: TranslationDeepObject = { tagGLCode: 'Etiquetar código GL', off: 'Desactivado', noResultsFoundSubtitle: 'Sin resultados. Intenta ajustar tus filtros o la búsqueda.', + exportsTo: 'Exporta a', }, socials: { podcast: 'Síguenos en Podcast', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 86ad445d9ff2..b1dc4fdc070c 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -529,6 +529,7 @@ const translations: TranslationDeepObject = { unableToDisplayChart: 'Impossible d’afficher le graphique', webGLNotSupported: 'Votre navigateur ne prend pas en charge WebGL. Veuillez l’activer ou changer de navigateur.', apiKey: 'Clé API', + exportsTo: 'Exports vers', }, socials: { podcast: 'Suivez-nous sur Podcast', diff --git a/src/languages/it.ts b/src/languages/it.ts index 1647e4c0e876..a7405122d41a 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -529,6 +529,7 @@ const translations: TranslationDeepObject = { unableToDisplayChart: 'Impossibile visualizzare il grafico', webGLNotSupported: 'Il tuo browser non supporta WebGL. Abilitalo oppure passa a un altro browser.', apiKey: 'Chiave API', + exportsTo: 'Esporta in', }, socials: { podcast: 'Seguici su Podcast', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 7a8dc0136b0a..fe4f744eba82 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -528,6 +528,7 @@ const translations: TranslationDeepObject = { unableToDisplayChart: 'グラフを表示できません', webGLNotSupported: 'お使いのブラウザは WebGL に対応していません。有効にするか、別のブラウザに切り替えてください。', apiKey: 'API キー', + exportsTo: 'エクスポート先', }, socials: { podcast: 'ポッドキャストでフォロー', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 43980fc84722..9ae033e07cc8 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -528,6 +528,7 @@ const translations: TranslationDeepObject = { unableToDisplayChart: 'Grafiek kan niet worden weergegeven', webGLNotSupported: 'Je browser ondersteunt WebGL niet. Schakel het in of gebruik een andere browser.', apiKey: 'API-sleutel', + exportsTo: 'Exporteert naar', }, socials: { podcast: 'Volg ons op Podcast', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 9b4bcdc9d1d7..5816f9397b1a 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -528,6 +528,7 @@ const translations: TranslationDeepObject = { unableToDisplayChart: 'Nie można wyświetlić wykresu', webGLNotSupported: 'Twoja przeglądarka nie obsługuje WebGL. Włącz ją albo zmień przeglądarkę.', apiKey: 'Klucz API', + exportsTo: 'Eksporty do', }, socials: { podcast: 'Śledź nas na Podcast', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 4f1ee2716224..e97fd30c4a52 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -527,6 +527,7 @@ const translations: TranslationDeepObject = { unableToDisplayChart: 'Não foi possível exibir o gráfico', webGLNotSupported: 'Seu navegador não é compatível com WebGL. Ative-o ou mude de navegador.', apiKey: 'Chave de API', + exportsTo: 'Exportações para', }, socials: { podcast: 'Siga-nos no Podcast', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index eed8b03bf3cf..e32ea0b2c0d7 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -524,6 +524,7 @@ const translations: TranslationDeepObject = { unableToDisplayChart: '无法显示图表', webGLNotSupported: '您的浏览器不支持 WebGL。请启用该功能或更换浏览器。', apiKey: 'API 密钥', + exportsTo: '导出到', }, socials: { podcast: '在播客上关注我们', From b9bbdb25f2876e9e5ceb4d5c0ae666a5ff960703 Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Fri, 24 Jul 2026 19:16:12 +0100 Subject: [PATCH 14/17] fallback to defaultFundID if card fundID is not set --- .../DynamicWorkspaceExpensifyCardDetailsPage.tsx | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx b/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx index ae14bc8a5ff8..3375b061d3ac 100644 --- a/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx +++ b/src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx @@ -134,8 +134,6 @@ function DynamicWorkspaceExpensifyCardDetailsPage({route}: DynamicWorkspaceExpen const [allFeedsCards, allFeedsCardsResult] = useOnyx(ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST); const workspaceCards = getAllCardsForWorkspace(defaultFundID, allFeedsCards, cardFeeds, expensifyCardSettings, /* includeDeactivated */ true); - const workspaceAccountID = policy?.policyAccountID ?? CONST.DEFAULT_NUMBER_ID; - const [connectionSyncProgress] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}${policyID}`); const syncingAccountingIntegration = CONST.POLICY.CONNECTIONS.ACCOUNTING_CONNECTION_NAMES.find((integration) => integration === connectionSyncProgress?.connectionName); const connectedIntegration = getConnectedIntegration(policy, CONST.POLICY.CONNECTIONS.ACCOUNTING_CONNECTION_NAMES) ?? syncingAccountingIntegration; @@ -469,7 +467,7 @@ function DynamicWorkspaceExpensifyCardDetailsPage({route}: DynamicWorkspaceExpen if (!exportMenuItem.exportType) { return; } - clearCompanyCardErrorField(Number(card?.fundID ?? workspaceAccountID), cardID, CONST.EXPENSIFY_CARD.BANK, exportMenuItem.exportType); + clearCompanyCardErrorField(Number(card?.fundID ?? defaultFundID), cardID, CONST.EXPENSIFY_CARD.BANK, exportMenuItem.exportType); }} > Navigation.navigate( createDynamicRoute( - DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute( - getCardFeedWithDomainID(card.bank, card?.fundID ?? workspaceAccountID), - String(card.cardID), - ), + DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute(getCardFeedWithDomainID(card.bank, card?.fundID ?? defaultFundID), String(card.cardID)), ), ) } From dafaacab4fa8aa056541bf6b770728cd01a81e50 Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Fri, 24 Jul 2026 19:25:21 +0100 Subject: [PATCH 15/17] support all card feeds - including Expensify Card --- .../DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx index 337d38b1cd6d..f4df479c87ef 100644 --- a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx +++ b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx @@ -14,7 +14,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import useWorkspaceAccountID from '@hooks/useWorkspaceAccountID'; import {setCompanyCardExportAccount} from '@libs/actions/CompanyCards'; -import {getCompanyCardFeed, getCompanyFeeds, getDomainOrWorkspaceAccountID} from '@libs/CardUtils'; +import {getCompanyCardFeed, getDomainOrWorkspaceAccountID} from '@libs/CardUtils'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import {getConnectedIntegration, getCurrentConnectionName} from '@libs/PolicyUtils'; import tokenizedSearch from '@libs/tokenizedSearch'; @@ -64,8 +64,7 @@ function DynamicWorkspaceCompanyCardAccountSelectCardPage({route}: DynamicWorksp const illustrations = useMemoizedLazyIllustrations(['Telescope']); const [cardFeeds] = useCardFeeds(policyID); - const companyFeeds = getCompanyFeeds(cardFeeds); - const domainOrWorkspaceAccountID = getDomainOrWorkspaceAccountID(workspaceAccountID, companyFeeds[feed]); + const domainOrWorkspaceAccountID = getDomainOrWorkspaceAccountID(workspaceAccountID, cardFeeds?.[feed]); const searchedListOptions = tokenizedSearch(exportMenuItem?.data ?? [], searchText, (option) => [option.text ?? option.value]); From 70d736c339b624fc9e505274d0373153323eea20 Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Fri, 24 Jul 2026 19:34:12 +0100 Subject: [PATCH 16/17] set feature name based on card(feed) --- ...micWorkspaceCompanyCardAccountSelectCardPage.tsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx index f4df479c87ef..6bdc2394b4bc 100644 --- a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx +++ b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx @@ -14,7 +14,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import useWorkspaceAccountID from '@hooks/useWorkspaceAccountID'; import {setCompanyCardExportAccount} from '@libs/actions/CompanyCards'; -import {getCompanyCardFeed, getDomainOrWorkspaceAccountID} from '@libs/CardUtils'; +import {getCompanyCardFeed, getDomainOrWorkspaceAccountID, isExpensifyCard as isExpensifyCardUtil} from '@libs/CardUtils'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import {getConnectedIntegration, getCurrentConnectionName} from '@libs/PolicyUtils'; import tokenizedSearch from '@libs/tokenizedSearch'; @@ -66,6 +66,11 @@ function DynamicWorkspaceCompanyCardAccountSelectCardPage({route}: DynamicWorksp const [cardFeeds] = useCardFeeds(policyID); const domainOrWorkspaceAccountID = getDomainOrWorkspaceAccountID(workspaceAccountID, cardFeeds?.[feed]); + // This page is a dynamic page and is used by both Expensify Cards and Company Cards + const isExpensifyCard = isExpensifyCardUtil(card); + const featureName = isExpensifyCard ? CONST.POLICY.MORE_FEATURES.ARE_EXPENSIFY_CARDS_ENABLED : CONST.POLICY.MORE_FEATURES.ARE_COMPANY_CARDS_ENABLED; + const policyFeature = isExpensifyCard ? CONST.POLICY.POLICY_FEATURE.EXPENSIFY_CARD : CONST.POLICY.POLICY_FEATURE.COMPANY_CARDS; + const searchedListOptions = tokenizedSearch(exportMenuItem?.data ?? [], searchText, (option) => [option.text ?? option.value]); const listEmptyContent = ( @@ -93,8 +98,8 @@ function DynamicWorkspaceCompanyCardAccountSelectCardPage({route}: DynamicWorksp return ( } - featureName={CONST.POLICY.MORE_FEATURES.ARE_COMPANY_CARDS_ENABLED} + featureName={featureName} displayName="DynamicWorkspaceCompanyCardAccountSelectCardPage" data={searchedListOptions ?? []} textInputOptions={{ From 8d9b27f02dff42e57887ebc534ecde4dca9772c2 Mon Sep 17 00:00:00 2001 From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> Date: Sun, 26 Jul 2026 02:17:00 +0100 Subject: [PATCH 17/17] use feedName variable --- .../companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx index 396c07a5ad14..3d1a51264419 100644 --- a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx +++ b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx @@ -327,7 +327,7 @@ function DynamicWorkspaceCompanyCardDetailsPage({route}: DynamicWorkspaceCompany iconType={CONST.ICON_TYPE_AVATAR} avatarSize={CONST.AVATAR_SIZE.SMALLER} shouldShowRightIcon={canWriteCompanyCards} - onPress={() => Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute(feed, cardID)))} + onPress={() => Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute(feedName, cardID)))} interactive={canWriteCompanyCards} sentryLabel={CONST.SENTRY_LABEL.WORKSPACE.COMPANY_CARDS.CARD_EXPORT} />