From ac95c58f848b112695333249a1beee3d82076a17 Mon Sep 17 00:00:00 2001 From: Kevin Brian Bader Date: Sat, 10 Jan 2026 19:14:46 -0800 Subject: [PATCH 1/2] fix: broken card feed missing currentStep causing infinite loading --- .../WorkspaceCompanyCardsTableHeaderButtons.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardsTable/WorkspaceCompanyCardsTableHeaderButtons.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardsTable/WorkspaceCompanyCardsTableHeaderButtons.tsx index 8f505e6f3865..6777920539b8 100644 --- a/src/pages/workspace/companyCards/WorkspaceCompanyCardsTable/WorkspaceCompanyCardsTableHeaderButtons.tsx +++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardsTable/WorkspaceCompanyCardsTableHeaderButtons.tsx @@ -16,10 +16,11 @@ import usePolicy from '@hooks/usePolicy'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; -import {getCompanyCardFeed, getCompanyFeeds, getCustomOrFormattedFeedName, isCustomFeed} from '@libs/CardUtils'; +import {getCompanyCardFeed, getCompanyFeeds, getCustomOrFormattedFeedName, getPlaidInstitutionId, isCustomFeed} from '@libs/CardUtils'; import Navigation from '@navigation/Navigation'; import useCompanyCardFeedErrors from '@pages/workspace/companyCards/hooks/useCardFeedErrors'; import useHasWorkspaceCompanyCardErrors from '@pages/workspace/companyCards/hooks/useHasWorkspaceCompanyCardErrors'; +import {setAssignCardStepAndData} from '@userActions/CompanyCards'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; @@ -70,6 +71,11 @@ function WorkspaceCompanyCardsTableHeaderButtons({policyID, feedName, isLoading, return; } + const institutionId = getPlaidInstitutionId(feedName); + const initialStep = institutionId ? CONST.COMPANY_CARD.STEP.PLAID_CONNECTION : CONST.COMPANY_CARD.STEP.BANK_CONNECTION; + + setAssignCardStepAndData({currentStep: initialStep}); + Navigation.setNavigationActionToMicrotaskQueue(() => { Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_BROKEN_CARD_FEED_CONNECTION.getRoute(policyID ?? String(CONST.DEFAULT_NUMBER_ID), feedName)); }); From 18d080ada23adb3f041bbdfdc4c83f7b1fbca110 Mon Sep 17 00:00:00 2001 From: Kevin Brian Bader Date: Mon, 12 Jan 2026 14:37:29 -0800 Subject: [PATCH 2/2] fix: seed selectedCountry for Plaid feeds before broken connection reconnect --- ...orkspaceCompanyCardsTableHeaderButtons.tsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardsTable/WorkspaceCompanyCardsTableHeaderButtons.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardsTable/WorkspaceCompanyCardsTableHeaderButtons.tsx index 6777920539b8..29bcc8e33c7e 100644 --- a/src/pages/workspace/companyCards/WorkspaceCompanyCardsTable/WorkspaceCompanyCardsTableHeaderButtons.tsx +++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardsTable/WorkspaceCompanyCardsTableHeaderButtons.tsx @@ -16,15 +16,16 @@ import usePolicy from '@hooks/usePolicy'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; -import {getCompanyCardFeed, getCompanyFeeds, getCustomOrFormattedFeedName, getPlaidInstitutionId, isCustomFeed} from '@libs/CardUtils'; +import {getCompanyCardFeed, getCompanyFeeds, getCustomOrFormattedFeedName, getPlaidCountry, getPlaidInstitutionId, isCustomFeed} from '@libs/CardUtils'; import Navigation from '@navigation/Navigation'; import useCompanyCardFeedErrors from '@pages/workspace/companyCards/hooks/useCardFeedErrors'; import useHasWorkspaceCompanyCardErrors from '@pages/workspace/companyCards/hooks/useHasWorkspaceCompanyCardErrors'; -import {setAssignCardStepAndData} from '@userActions/CompanyCards'; +import {setAddNewCompanyCardStepAndData, setAssignCardStepAndData} from '@userActions/CompanyCards'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; -import type {CompanyCardFeedWithDomainID} from '@src/types/onyx'; +import type {CompanyCardFeedWithDomainID, CurrencyList} from '@src/types/onyx'; +import {getEmptyObject} from '@src/types/utils/EmptyObject'; const FEED_SELECTOR_SKELETON_WIDTH = 289; @@ -62,6 +63,8 @@ function WorkspaceCompanyCardsTableHeaderButtons({policyID, feedName, isLoading, const companyFeeds = getCompanyFeeds(cardFeeds); const currentFeedData = feedName ? companyFeeds?.[feedName] : undefined; const [domain] = useOnyx(`${ONYXKEYS.COLLECTION.DOMAIN}${currentFeedData?.domainID}`, {canBeMissing: true}); + const [countryByIp] = useOnyx(ONYXKEYS.COUNTRY, {canBeMissing: false}); + const [currencyList = getEmptyObject()] = useOnyx(ONYXKEYS.CURRENCY_LIST, {canBeMissing: true}); const {hasFeedError, isFeedConnectionBroken} = useCompanyCardFeedErrors({policyID, feedName}); const hasCompanyCardFeedError = useHasWorkspaceCompanyCardErrors({policyID}); @@ -74,6 +77,16 @@ function WorkspaceCompanyCardsTableHeaderButtons({policyID, feedName, isLoading, const institutionId = getPlaidInstitutionId(feedName); const initialStep = institutionId ? CONST.COMPANY_CARD.STEP.PLAID_CONNECTION : CONST.COMPANY_CARD.STEP.BANK_CONNECTION; + // For Plaid feeds, seed selectedCountry so PlaidConnectionStep can start the login flow + if (institutionId) { + const country = getPlaidCountry(policy?.outputCurrency, currencyList, countryByIp); + setAddNewCompanyCardStepAndData({ + data: { + selectedCountry: country, + }, + }); + } + setAssignCardStepAndData({currentStep: initialStep}); Navigation.setNavigationActionToMicrotaskQueue(() => {