diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 0c4fbf04412ea..27d9c8432e8ef 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -2226,13 +2226,14 @@ const ROUTES = { WORKSPACE_COMPANY_CARD_DETAILS: { route: 'workspaces/:policyID/company-cards/:feed/:cardID', - getRoute: (policyID: string, cardID: string, feed: CompanyCardFeedWithDomainID, backTo?: string) => + getRoute: (policyID: string, feed: CompanyCardFeedWithDomainID, cardID: string, backTo?: string) => // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`workspaces/${policyID}/company-cards/${encodeURIComponent(feed)}/${encodeURIComponent(cardID)}`, backTo), }, - WORKSPACE_COMPANY_CARD_NAME: { - route: 'workspaces/:policyID/company-cards/:bank/:cardID/edit/name', - getRoute: (policyID: string, cardID: string, bank: string) => `workspaces/${policyID}/company-cards/${bank}/${cardID}/edit/name` as const, + WORKSPACE_COMPANY_CARD_EDIT_CARD_NAME: { + route: 'workspaces/:policyID/company-cards/:feed/:cardID/edit/name', + getRoute: (policyID: string, cardID: string, feed: CompanyCardFeedWithDomainID) => + `workspaces/${policyID}/company-cards/${encodeURIComponent(feed)}/${encodeURIComponent(cardID)}/edit/name` as const, }, WORKSPACE_COMPANY_CARD_EXPORT: { route: 'workspaces/:policyID/company-cards/:bank/:cardID/edit/export', diff --git a/src/SCREENS.ts b/src/SCREENS.ts index c73a1ae704203..f226769d6aea4 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -598,7 +598,7 @@ const SCREENS = { COMPANY_CARDS_SETTINGS_FEED_NAME: 'Workspace_CompanyCards_Settings_Feed_Name', COMPANY_CARDS_SETTINGS_STATEMENT_CLOSE_DATE: 'Workspace_CompanyCards_Settings_Statement_Close_Date', COMPANY_CARD_DETAILS: 'Workspace_CompanyCard_Details', - COMPANY_CARD_NAME: 'Workspace_CompanyCard_Name', + COMPANY_CARD_EDIT_CARD_NAME: 'Workspace_CompanyCard_Edit_Card_Name', COMPANY_CARD_EXPORT: 'Workspace_CompanyCard_Export', EXPENSIFY_CARD: 'Workspace_ExpensifyCard', EXPENSIFY_CARD_DETAILS: 'Workspace_ExpensifyCard_Details', diff --git a/src/hooks/useCompanyCards.ts b/src/hooks/useCompanyCards.ts index 55c89cb84ab31..89f6542692c46 100644 --- a/src/hooks/useCompanyCards.ts +++ b/src/hooks/useCompanyCards.ts @@ -1,6 +1,6 @@ -import type {OnyxCollection, ResultMetadata} from 'react-native-onyx'; +import type {OnyxCollection, OnyxEntry, ResultMetadata} from 'react-native-onyx'; import type {ValueOf} from 'type-fest'; -import {getCompanyCardFeed, getCompanyFeeds, getPlaidInstitutionId} from '@libs/CardUtils'; +import {getCompanyCardFeed, getCompanyFeeds, getPlaidInstitutionId, getSelectedFeed} from '@libs/CardUtils'; import type CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import type {CardFeeds, CardList} from '@src/types/onyx'; @@ -27,14 +27,15 @@ type UsCompanyCardsResult = Partial<{ onyxMetadata: { cardListMetadata: ResultMetadata; allCardFeedsMetadata: ResultMetadata>; + lastSelectedFeedMetadata: ResultMetadata>; }; }; function useCompanyCards(policyID?: string): UsCompanyCardsResult { - const [lastSelectedFeed] = useOnyx(`${ONYXKEYS.COLLECTION.LAST_SELECTED_FEED}${policyID}`, {canBeMissing: true}); + const [lastSelectedFeed, lastSelectedFeedMetadata] = useOnyx(`${ONYXKEYS.COLLECTION.LAST_SELECTED_FEED}${policyID}`, {canBeMissing: true}); const [allCardFeeds, allCardFeedsMetadata] = useCardFeeds(policyID); - const feedName = lastSelectedFeed; + const feedName = getSelectedFeed(lastSelectedFeed, allCardFeeds); const bankName = feedName ? getCompanyCardFeed(feedName) : undefined; const [cardsList, cardListMetadata] = useCardsList(feedName); @@ -54,6 +55,7 @@ function useCompanyCards(policyID?: string): UsCompanyCardsResult { const onyxMetadata = { cardListMetadata, allCardFeedsMetadata, + lastSelectedFeedMetadata, }; if (!policyID) { diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index 6b475dc2b3ff7..fadf95d854816 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -708,7 +708,7 @@ const SettingsModalStackNavigator = createModalStackNavigator require('../../../../pages/workspace/companyCards/BankConnection').default, [SCREENS.WORKSPACE.COMPANY_CARDS_ADD_NEW]: () => require('../../../../pages/workspace/companyCards/addNew/AddNewCardPage').default, [SCREENS.WORKSPACE.COMPANY_CARD_DETAILS]: () => require('../../../../pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage').default, - [SCREENS.WORKSPACE.COMPANY_CARD_NAME]: () => require('../../../../pages/workspace/companyCards/WorkspaceCompanyCardEditCardNamePage').default, + [SCREENS.WORKSPACE.COMPANY_CARD_EDIT_CARD_NAME]: () => require('../../../../pages/workspace/companyCards/WorkspaceCompanyCardEditCardNamePage').default, [SCREENS.WORKSPACE.COMPANY_CARD_EXPORT]: () => require('../../../../pages/workspace/companyCards/WorkspaceCompanyCardAccountSelectCardPage').default, [SCREENS.WORKSPACE.EXPENSIFY_CARD_ISSUE_NEW]: () => require('../../../../pages/workspace/expensifyCard/issueNew/IssueNewCardPage').default, [SCREENS.WORKSPACE.EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE]: () => diff --git a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts index 6e9e6fd79786c..5dee0b252dd9f 100755 --- a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts +++ b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts @@ -250,7 +250,7 @@ const WORKSPACE_TO_RHP: Partial['config'] = { [SCREENS.WORKSPACE.COMPANY_CARD_DETAILS]: { path: ROUTES.WORKSPACE_COMPANY_CARD_DETAILS.route, }, - [SCREENS.WORKSPACE.COMPANY_CARD_NAME]: { - path: ROUTES.WORKSPACE_COMPANY_CARD_NAME.route, + [SCREENS.WORKSPACE.COMPANY_CARD_EDIT_CARD_NAME]: { + path: ROUTES.WORKSPACE_COMPANY_CARD_EDIT_CARD_NAME.route, }, [SCREENS.WORKSPACE.COMPANY_CARD_EXPORT]: { path: ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.route, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 63c4bcc750045..96fabcc262c30 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -1152,10 +1152,10 @@ type SettingsNavigatorParamList = { // eslint-disable-next-line no-restricted-syntax -- `backTo` usages in this file are legacy. Do not add new `backTo` params to screens. See contributingGuides/NAVIGATION.md backTo?: Routes; }; - [SCREENS.WORKSPACE.COMPANY_CARD_NAME]: { + [SCREENS.WORKSPACE.COMPANY_CARD_EDIT_CARD_NAME]: { policyID: string; - cardID: string; feed: CompanyCardFeedWithDomainID; + cardID: string; }; [SCREENS.WORKSPACE.COMPANY_CARD_EXPORT]: { policyID: string; diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardAccountSelectCardPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardAccountSelectCardPage.tsx index 8c1372ab26238..928f6f080c18a 100644 --- a/src/pages/workspace/companyCards/WorkspaceCompanyCardAccountSelectCardPage.tsx +++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardAccountSelectCardPage.tsx @@ -82,7 +82,7 @@ function WorkspaceCompanyCardAccountSelectCardPage({route}: WorkspaceCompanyCard const exportValue = isDefaultCardSelected ? CONST.COMPANY_CARDS.DEFAULT_EXPORT_TYPE : value; setCompanyCardExportAccount(policyID, domainOrWorkspaceAccountID, cardID, exportMenuItem.exportType, exportValue, getCompanyCardFeed(feed)); - Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARD_DETAILS.getRoute(policyID, cardID, feed)); + Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARD_DETAILS.getRoute(policyID, feed, cardID)); }, [exportMenuItem?.exportType, domainOrWorkspaceAccountID, cardID, policyID, feed, defaultCard], ); @@ -117,7 +117,7 @@ function WorkspaceCompanyCardAccountSelectCardPage({route}: WorkspaceCompanyCard onChangeText={setSearchText} onSelectRow={updateExportAccount} initiallyFocusedOptionKey={exportMenuItem?.data?.find((mode) => mode.isSelected)?.keyForList} - onBackButtonPress={() => Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARD_DETAILS.getRoute(policyID, cardID, feed, backTo), {compareParams: false})} + onBackButtonPress={() => Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARD_DETAILS.getRoute(policyID, feed, cardID, backTo), {compareParams: false})} headerTitleAlreadyTranslated={exportMenuItem?.description} listEmptyContent={listEmptyContent} connectionName={connectedIntegration} diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx index 81773096e8c21..12f5c1a4e250d 100644 --- a/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx +++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx @@ -49,8 +49,8 @@ type WorkspaceCompanyCardDetailsPageProps = PlatformStackScreenProps { setIsUnassignModalVisible(false); if (card) { - unassignWorkspaceCompanyCard(domainOrWorkspaceAccountID, feed, card); + unassignWorkspaceCompanyCard(domainOrWorkspaceAccountID, bank, card); } Navigation.goBack(); }; const updateCard = () => { - updateWorkspaceCompanyCard(domainOrWorkspaceAccountID, cardID, feed, card?.lastScrapeResult); + updateWorkspaceCompanyCard(domainOrWorkspaceAccountID, cardID, bank, card?.lastScrapeResult); }; const lastScrape = useMemo(() => { @@ -158,7 +158,7 @@ function WorkspaceCompanyCardDetailsPage({route}: WorkspaceCompanyCardDetailsPag @@ -166,14 +166,14 @@ function WorkspaceCompanyCardDetailsPage({route}: WorkspaceCompanyCardDetailsPag pendingAction={card?.nameValuePairs?.pendingFields?.cardTitle} errorRowStyles={[styles.ph5, styles.mb3]} errors={getLatestErrorField(card?.nameValuePairs ?? {}, 'cardTitle')} - onClose={() => clearCompanyCardErrorField(domainOrWorkspaceAccountID, cardID, feed, 'cardTitle')} + onClose={() => clearCompanyCardErrorField(domainOrWorkspaceAccountID, cardID, bank, 'cardTitle')} > Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARD_NAME.getRoute(policyID, cardID, bank))} + onPress={() => Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARD_EDIT_CARD_NAME.getRoute(policyID, cardID, feedName))} /> {exportMenuItem?.shouldShowMenuItem ? ( @@ -185,14 +185,14 @@ function WorkspaceCompanyCardDetailsPage({route}: WorkspaceCompanyCardDetailsPag if (!exportMenuItem.exportType) { return; } - clearCompanyCardErrorField(domainOrWorkspaceAccountID, cardID, feed, exportMenuItem.exportType); + clearCompanyCardErrorField(domainOrWorkspaceAccountID, cardID, bank, exportMenuItem.exportType); }} > Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute(policyID, cardID, bank, backTo))} + onPress={() => Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARD_EXPORT.getRoute(policyID, cardID, feedName, backTo))} /> ) : null} @@ -224,7 +224,7 @@ function WorkspaceCompanyCardDetailsPage({route}: WorkspaceCompanyCardDetailsPag pendingAction={card?.pendingFields?.lastScrape} errorRowStyles={[styles.ph5, styles.mb3]} errors={getLatestErrorField(card ?? {}, 'lastScrape')} - onClose={() => clearCompanyCardErrorField(domainOrWorkspaceAccountID, cardID, feed, 'lastScrape', true)} + onClose={() => clearCompanyCardErrorField(domainOrWorkspaceAccountID, cardID, bank, 'lastScrape', true)} > ; +type WorkspaceCompanyCardEditCardNamePageProps = PlatformStackScreenProps; function WorkspaceCompanyCardEditCardNamePage({route}: WorkspaceCompanyCardEditCardNamePageProps) { - const {policyID, cardID} = route.params; + const {policyID, cardID, feed} = route.params; const workspaceAccountID = useWorkspaceAccountID(policyID); - const feed = route.params.feed; const [customCardNames, customCardNamesMetadata] = useOnyx(ONYXKEYS.NVP_EXPENSIFY_COMPANY_CARDS_CUSTOM_NAMES, {canBeMissing: true}); const defaultValue = customCardNames?.[cardID]; @@ -46,7 +45,7 @@ function WorkspaceCompanyCardEditCardNamePage({route}: WorkspaceCompanyCardEditC const submit = (values: FormOnyxValues) => { updateCompanyCardName(domainOrWorkspaceAccountID, cardID, values[INPUT_IDS.NAME], getCompanyCardFeed(feed), defaultValue); - Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARD_DETAILS.getRoute(policyID, cardID, feed), {compareParams: false}); + Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARD_DETAILS.getRoute(policyID, feed, cardID), {compareParams: false}); }; const validate = (values: FormOnyxValues): FormInputErrors => { @@ -81,7 +80,7 @@ function WorkspaceCompanyCardEditCardNamePage({route}: WorkspaceCompanyCardEditC > Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARD_DETAILS.getRoute(policyID, cardID, feed), {compareParams: false})} + onBackButtonPress={() => Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARD_DETAILS.getRoute(policyID, feed, cardID), {compareParams: false})} /> {translate('workspace.moreFeatures.companyCards.giveItNameInstruction')} - {isLoadingFeed ? ( + {isLoading ? ( - {!isLoadingFeed && showTableControls && ( + {!isLoading && showTableControls && ( )} - {!isLoadingFeed && ( + {!isLoading && ( <> {showTableControls && } { if (!failedCompanyCardAssignment) { @@ -142,7 +145,7 @@ function WorkspaceCompanyCardTableItem({ const feedName = getCompanyCardFeedWithDomainID(assignedCard?.bank as CompanyCardFeed, assignedCard.fundID); - return Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARD_DETAILS.getRoute(policyID, assignedCard.cardID.toString(), feedName)); + return Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARD_DETAILS.getRoute(policyID, feedName, assignedCard.cardID.toString())); }} > {({hovered}) => ( @@ -160,46 +163,33 @@ function WorkspaceCompanyCardTableItem({ > {isAssigned ? ( - <> - - - - - - - + ) : ( - <> - {CardFeedIcon} - - - - - - + CardFeedIcon )} + + + + {!!leftColumnSubtitle && ( + + )} + {!shouldUseNarrowTableLayout && ( @@ -213,7 +203,7 @@ function WorkspaceCompanyCardTableItem({ )} - + {isAssigned ? ( {!shouldUseNarrowTableLayout && ( @@ -235,7 +225,7 @@ function WorkspaceCompanyCardTableItem({ ) : (