diff --git a/src/libs/actions/ImportTransactions.ts b/src/libs/actions/ImportTransactions.ts index d8760556313d..bed99a6c2622 100644 --- a/src/libs/actions/ImportTransactions.ts +++ b/src/libs/actions/ImportTransactions.ts @@ -191,7 +191,7 @@ function buildTransactionListFromSpreadsheet(spreadsheet: ImportedSpreadsheet, s /** * Creates an optimistic card object for the imported transactions */ -function buildOptimisticCard(cardDisplayName: string, accountID: number): {card: Card; cardID: number} { +function buildOptimisticCard(cardDisplayName: string, accountID: number, isReimbursable: boolean): {card: Card; cardID: number} { const cardID = generateCardID(); return { cardID, @@ -209,6 +209,9 @@ function buildOptimisticCard(cardDisplayName: string, accountID: number): {card: scrapeMinDate: '', fraud: CONST.EXPENSIFY_CARD.FRAUD_TYPES.NONE, lastUpdated: DateUtils.getDBTime(), + // Persist the user's reimbursable selection so the card details toggle matches it immediately, + // instead of falling back to the enabled default until the card is re-fetched from the server. + reimbursable: isReimbursable, nameValuePairs: { cardTitle: cardDisplayName, } as Card['nameValuePairs'], @@ -310,7 +313,7 @@ async function importTransactionsFromCSV( if (isAddingToExistingCard) { cardID = existingCardID; } else { - const optimisticCardData = buildOptimisticCard(cardDisplayName, accountID); + const optimisticCardData = buildOptimisticCard(cardDisplayName, accountID, isReimbursable); cardID = optimisticCardData.cardID; optimisticCard = optimisticCardData.card; } diff --git a/tests/unit/ImportTransactions.test.ts b/tests/unit/ImportTransactions.test.ts index 7cc754ef0930..8e9eb29f9f7d 100644 --- a/tests/unit/ImportTransactions.test.ts +++ b/tests/unit/ImportTransactions.test.ts @@ -914,6 +914,17 @@ describe('ImportTransactions', () => { getRequiredOnyxUpdate(onyxData, 'optimisticData', ONYXKEYS.CARD_LIST, Onyx.METHOD.MERGE); }); + it('stores the reimbursable selection on the optimistic card', async () => { + const nonReimbursableSpreadsheet = {...validSpreadsheet, importTransactionSettings: {isReimbursable: false}}; + + await importTransactionsFromCSV(nonReimbursableSpreadsheet, CURRENT_USER_ACCOUNT_ID); + + const [, , onyxData] = getRequiredWriteCall(writeSpy.mock.calls, 0); + const cardUpdate = getRequiredOnyxUpdate(onyxData, 'optimisticData', ONYXKEYS.CARD_LIST, Onyx.METHOD.MERGE, true); + const [optimisticCard] = Object.values(cardUpdate.value); + expect(optimisticCard).toEqual(expect.objectContaining({reimbursable: false})); + }); + it('reuses an existingCardID without queuing an optimistic card', async () => { const existingCardID = 987654321;