diff --git a/src/libs/CardUtils.ts b/src/libs/CardUtils.ts index 8cfa1b36d7dc..2f82b763a68c 100644 --- a/src/libs/CardUtils.ts +++ b/src/libs/CardUtils.ts @@ -968,12 +968,18 @@ function getCardAssignmentStartDate(isEditing: boolean | undefined, existingStar return isEditing ? (existingStartDate ?? format(new Date(), CONST.DATE.FNS_FORMAT_STRING)) : format(new Date(), CONST.DATE.FNS_FORMAT_STRING); } -function checkIfNewFeedConnected(prevFeedsData: CompanyFeeds, currentFeedsData: CompanyFeeds, plaidBank?: string) { +function checkIfNewFeedConnected(prevFeedsData: CombinedCardFeeds, currentFeedsData: CombinedCardFeeds, plaidBank?: string) { const prevFeeds = Object.keys(prevFeedsData); const currentFeeds = Object.keys(currentFeedsData); + const plaidBankFound = + plaidBank && + currentFeeds.find((feed) => { + return splitCardFeedWithDomainID(feed as CompanyCardFeedWithDomainID)?.feedName === `${CONST.BANK_ACCOUNT.SETUP_TYPE.PLAID}.${plaidBank}`; + }); + return { - isNewFeedConnected: currentFeeds.length > prevFeeds.length || (plaidBank && currentFeeds.includes(`${CONST.BANK_ACCOUNT.SETUP_TYPE.PLAID}.${plaidBank}`)), + isNewFeedConnected: currentFeeds.length > prevFeeds.length || plaidBankFound, newFeed: currentFeeds.find((feed) => !prevFeeds.includes(feed)) as CompanyCardFeedWithDomainID | undefined, }; } diff --git a/src/pages/settings/Wallet/PersonalCards/useGetNewPersonalCard.ts b/src/pages/settings/Wallet/PersonalCards/useGetNewPersonalCard.ts index bc7dad042f6c..10af93322ecb 100644 --- a/src/pages/settings/Wallet/PersonalCards/useGetNewPersonalCard.ts +++ b/src/pages/settings/Wallet/PersonalCards/useGetNewPersonalCard.ts @@ -17,14 +17,15 @@ export default function useGetNewPersonalCard() { prevCardListRef.current = cardList; return; } - const prevCardList = prevCardListRef.current; - const prevIds = new Set(Object.keys(prevCardList)); - const currentIds = Object.keys(cardList); - const newCardIds = currentIds.filter((id) => !prevIds.has(id)); - if (newCardIds.length > 0) { - for (const id of newCardIds) { - setNewCard(cardList[id]); - } + + // Find the first card that is either new or has a fresh import timestamp + const latestChange = Object.values(cardList).find((card) => { + const prev = prevCardListRef.current?.[card.cardID]; + return !prev || card.lastImportAttempt !== prev.lastImportAttempt; + }); + + if (latestChange) { + setNewCard(latestChange); } prevCardListRef.current = cardList; diff --git a/src/types/onyx/Card.ts b/src/types/onyx/Card.ts index 57cec8f15510..ad421678c53f 100644 --- a/src/types/onyx/Card.ts +++ b/src/types/onyx/Card.ts @@ -105,6 +105,9 @@ type Card = OnyxCommon.OnyxValueWithOfflineFeedback<{ /** Last update result */ lastScrapeResult?: number; + /** Last import attempt */ + lastImportAttempt?: string; + /** Card related error messages */ errors?: OnyxCommon.Errors;