Skip to content

Commit 64e5bff

Browse files
authored
Merge pull request #86484 from heekinho/fix-infinite-spinner-add-cards
[Payment due @ShridharGoel] Fix infinite spinner add cards
2 parents aff1e0c + 55c377b commit 64e5bff

3 files changed

Lines changed: 20 additions & 10 deletions

File tree

src/libs/CardUtils.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -968,12 +968,18 @@ function getCardAssignmentStartDate(isEditing: boolean | undefined, existingStar
968968
return isEditing ? (existingStartDate ?? format(new Date(), CONST.DATE.FNS_FORMAT_STRING)) : format(new Date(), CONST.DATE.FNS_FORMAT_STRING);
969969
}
970970

971-
function checkIfNewFeedConnected(prevFeedsData: CompanyFeeds, currentFeedsData: CompanyFeeds, plaidBank?: string) {
971+
function checkIfNewFeedConnected(prevFeedsData: CombinedCardFeeds, currentFeedsData: CombinedCardFeeds, plaidBank?: string) {
972972
const prevFeeds = Object.keys(prevFeedsData);
973973
const currentFeeds = Object.keys(currentFeedsData);
974974

975+
const plaidBankFound =
976+
plaidBank &&
977+
currentFeeds.find((feed) => {
978+
return splitCardFeedWithDomainID(feed as CompanyCardFeedWithDomainID)?.feedName === `${CONST.BANK_ACCOUNT.SETUP_TYPE.PLAID}.${plaidBank}`;
979+
});
980+
975981
return {
976-
isNewFeedConnected: currentFeeds.length > prevFeeds.length || (plaidBank && currentFeeds.includes(`${CONST.BANK_ACCOUNT.SETUP_TYPE.PLAID}.${plaidBank}`)),
982+
isNewFeedConnected: currentFeeds.length > prevFeeds.length || plaidBankFound,
977983
newFeed: currentFeeds.find((feed) => !prevFeeds.includes(feed)) as CompanyCardFeedWithDomainID | undefined,
978984
};
979985
}

src/pages/settings/Wallet/PersonalCards/useGetNewPersonalCard.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@ export default function useGetNewPersonalCard() {
1717
prevCardListRef.current = cardList;
1818
return;
1919
}
20-
const prevCardList = prevCardListRef.current;
21-
const prevIds = new Set(Object.keys(prevCardList));
22-
const currentIds = Object.keys(cardList);
23-
const newCardIds = currentIds.filter((id) => !prevIds.has(id));
24-
if (newCardIds.length > 0) {
25-
for (const id of newCardIds) {
26-
setNewCard(cardList[id]);
27-
}
20+
21+
// Find the first card that is either new or has a fresh import timestamp
22+
const latestChange = Object.values(cardList).find((card) => {
23+
const prev = prevCardListRef.current?.[card.cardID];
24+
return !prev || card.lastImportAttempt !== prev.lastImportAttempt;
25+
});
26+
27+
if (latestChange) {
28+
setNewCard(latestChange);
2829
}
2930

3031
prevCardListRef.current = cardList;

src/types/onyx/Card.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ type Card = OnyxCommon.OnyxValueWithOfflineFeedback<{
105105
/** Last update result */
106106
lastScrapeResult?: number;
107107

108+
/** Last import attempt */
109+
lastImportAttempt?: string;
110+
108111
/** Card related error messages */
109112
errors?: OnyxCommon.Errors;
110113

0 commit comments

Comments
 (0)