From d826722a80838f6b0374c60d41c5e319e9068085 Mon Sep 17 00:00:00 2001 From: thelullabyy Date: Tue, 26 Aug 2025 20:45:14 +0700 Subject: [PATCH 1/2] fix: Refreshing app and starting invoice flow again previous amount is shown --- src/libs/actions/IOU.ts | 15 +++++++++++---- src/libs/actions/Transaction.ts | 4 ++-- src/libs/actions/TransactionEdit.ts | 6 +++--- .../sidebar/FloatingActionButtonAndPopover.tsx | 18 ++++++++++++++---- 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index a2b1ab492076..74afc808950a 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -1031,14 +1031,21 @@ function createDraftTransaction(transaction: OnyxTypes.Transaction) { Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transaction.transactionID}`, newTransaction); } -function clearMoneyRequest(transactionID: string, skipConfirmation = false) { - removeDraftTransactions(); +function clearMoneyRequest(transactionID: string, skipConfirmation = false, draftsTransaction?: OnyxCollection) { + removeDraftTransactions(undefined, draftsTransaction); Onyx.set(`${ONYXKEYS.COLLECTION.SKIP_CONFIRMATION}${transactionID}`, skipConfirmation); } -function startMoneyRequest(iouType: ValueOf, reportID: string, requestType?: IOURequestType, skipConfirmation = false, backToReport?: string) { +function startMoneyRequest( + iouType: ValueOf, + reportID: string, + requestType?: IOURequestType, + skipConfirmation = false, + backToReport?: string, + draftsTransaction?: OnyxCollection, +) { Performance.markStart(CONST.TIMING.OPEN_CREATE_EXPENSE); - clearMoneyRequest(CONST.IOU.OPTIMISTIC_TRANSACTION_ID, skipConfirmation); + clearMoneyRequest(CONST.IOU.OPTIMISTIC_TRANSACTION_ID, skipConfirmation, draftsTransaction); switch (requestType) { case CONST.IOU.REQUEST_TYPE.MANUAL: Navigation.navigate(ROUTES.MONEY_REQUEST_CREATE_TAB_MANUAL.getRoute(CONST.IOU.ACTION.CREATE, iouType, CONST.IOU.OPTIMISTIC_TRANSACTION_ID, reportID, backToReport)); diff --git a/src/libs/actions/Transaction.ts b/src/libs/actions/Transaction.ts index d07ee25a71f7..a79a60b01343 100644 --- a/src/libs/actions/Transaction.ts +++ b/src/libs/actions/Transaction.ts @@ -1163,8 +1163,8 @@ function changeTransactionsReport(transactionIDs: string[], reportID: string, po }); } -function getDraftTransactions(): Transaction[] { - return Object.values(allTransactionDrafts ?? {}).filter((transaction): transaction is Transaction => !!transaction); +function getDraftTransactions(draftsTransaction?: OnyxCollection): Transaction[] { + return Object.values(draftsTransaction ?? allTransactionDrafts ?? {}).filter((transaction): transaction is Transaction => !!transaction); } export { diff --git a/src/libs/actions/TransactionEdit.ts b/src/libs/actions/TransactionEdit.ts index 4cddec6ee728..b05c073b00e4 100644 --- a/src/libs/actions/TransactionEdit.ts +++ b/src/libs/actions/TransactionEdit.ts @@ -1,6 +1,6 @@ import {format} from 'date-fns'; import Onyx from 'react-native-onyx'; -import type {Connection, OnyxEntry} from 'react-native-onyx'; +import type {Connection, OnyxCollection, OnyxEntry} from 'react-native-onyx'; import {formatCurrentUserToAttendee} from '@libs/IOUUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; @@ -97,8 +97,8 @@ function removeDraftSplitTransaction(transactionID: string | undefined) { Onyx.set(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, null); } -function removeDraftTransactions(shouldExcludeInitialTransaction = false) { - const draftTransactions = getDraftTransactions(); +function removeDraftTransactions(shouldExcludeInitialTransaction = false, allTransactionDrafts?: OnyxCollection) { + const draftTransactions = getDraftTransactions(allTransactionDrafts); const draftTransactionsSet = draftTransactions.reduce( (acc, item) => { if (shouldExcludeInitialTransaction && item.transactionID === CONST.IOU.OPTIMISTIC_TRANSACTION_ID) { diff --git a/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx b/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx index d7d32c76bf1d..65bb49ae1aab 100644 --- a/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx +++ b/src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx @@ -104,6 +104,7 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, isT const [quickActionReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${quickAction?.chatReportID}`, {canBeMissing: true}); const [activePolicyID] = useOnyx(ONYXKEYS.NVP_ACTIVE_POLICY_ID, {canBeMissing: true}); const [allReports] = useOnyx(ONYXKEYS.COLLECTION.REPORT, {canBeMissing: true}); + const [allTransactionDrafts] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_DRAFT, {canBeMissing: true}); const [activePolicy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${activePolicyID}`, {canBeMissing: true}); const policyChatForActivePolicy = useMemo(() => { if (isEmptyObject(activePolicy) || !activePolicy?.isPolicyExpenseChatEnabled) { @@ -221,9 +222,9 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, isT } // Start the scan flow directly - startMoneyRequest(CONST.IOU.TYPE.CREATE, generateReportID(), CONST.IOU.REQUEST_TYPE.SCAN, false); + startMoneyRequest(CONST.IOU.TYPE.CREATE, generateReportID(), CONST.IOU.REQUEST_TYPE.SCAN, false, undefined, allTransactionDrafts); }); - }, [shouldRedirectToExpensifyClassic]); + }, [shouldRedirectToExpensifyClassic, allTransactionDrafts]); /** * Check if LHN status changed from active to inactive. @@ -309,11 +310,15 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, isT // When starting to create an expense from the global FAB, there is not an existing report yet. A random optimistic reportID is generated and used // for all of the routes in the creation flow. generateReportID(), + undefined, + undefined, + undefined, + allTransactionDrafts, ); }), }, ]; - }, [translate, shouldRedirectToExpensifyClassic, shouldUseNarrowLayout]); + }, [translate, shouldRedirectToExpensifyClassic, shouldUseNarrowLayout, allTransactionDrafts]); const quickActionMenuItems = useMemo(() => { // Define common properties in baseQuickAction @@ -364,7 +369,7 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, isT } const quickActionReportID = policyChatForActivePolicy?.reportID || generateReportID(); - startMoneyRequest(CONST.IOU.TYPE.SUBMIT, quickActionReportID, CONST.IOU.REQUEST_TYPE.SCAN, true); + startMoneyRequest(CONST.IOU.TYPE.SUBMIT, quickActionReportID, CONST.IOU.REQUEST_TYPE.SCAN, true, undefined, allTransactionDrafts); }); }; @@ -400,6 +405,7 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, isT showDelegateNoAccessModal, isReportArchived, isManualDistanceTrackingEnabled, + allTransactionDrafts, ]); const isTravelEnabled = useMemo(() => { @@ -516,6 +522,10 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, isT // When starting to create an invoice from the global FAB, there is not an existing report yet. A random optimistic reportID is generated and used // for all of the routes in the creation flow. generateReportID(), + undefined, + undefined, + undefined, + allTransactionDrafts, ); }), }, From 9e450fff5982bad4d4d3a68b10a203a0e6142ce0 Mon Sep 17 00:00:00 2001 From: thelullabyy Date: Mon, 8 Sep 2025 14:20:42 +0700 Subject: [PATCH 2/2] refactor code --- src/libs/actions/IOU.ts | 8 ++++---- src/libs/actions/Transaction.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index b09d5dc37496..c22b0d566be6 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -1032,8 +1032,8 @@ function createDraftTransaction(transaction: OnyxTypes.Transaction) { Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transaction.transactionID}`, newTransaction); } -function clearMoneyRequest(transactionID: string, skipConfirmation = false, draftsTransaction?: OnyxCollection) { - removeDraftTransactions(undefined, draftsTransaction); +function clearMoneyRequest(transactionID: string, skipConfirmation = false, draftTransactions?: OnyxCollection) { + removeDraftTransactions(undefined, draftTransactions); Onyx.set(`${ONYXKEYS.COLLECTION.SKIP_CONFIRMATION}${transactionID}`, skipConfirmation); } @@ -1043,10 +1043,10 @@ function startMoneyRequest( requestType?: IOURequestType, skipConfirmation = false, backToReport?: string, - draftsTransaction?: OnyxCollection, + draftTransactions?: OnyxCollection, ) { Performance.markStart(CONST.TIMING.OPEN_CREATE_EXPENSE); - clearMoneyRequest(CONST.IOU.OPTIMISTIC_TRANSACTION_ID, skipConfirmation, draftsTransaction); + clearMoneyRequest(CONST.IOU.OPTIMISTIC_TRANSACTION_ID, skipConfirmation, draftTransactions); switch (requestType) { case CONST.IOU.REQUEST_TYPE.MANUAL: Navigation.navigate(ROUTES.MONEY_REQUEST_CREATE_TAB_MANUAL.getRoute(CONST.IOU.ACTION.CREATE, iouType, CONST.IOU.OPTIMISTIC_TRANSACTION_ID, reportID, backToReport)); diff --git a/src/libs/actions/Transaction.ts b/src/libs/actions/Transaction.ts index a79a60b01343..010ac39489f9 100644 --- a/src/libs/actions/Transaction.ts +++ b/src/libs/actions/Transaction.ts @@ -1163,8 +1163,8 @@ function changeTransactionsReport(transactionIDs: string[], reportID: string, po }); } -function getDraftTransactions(draftsTransaction?: OnyxCollection): Transaction[] { - return Object.values(draftsTransaction ?? allTransactionDrafts ?? {}).filter((transaction): transaction is Transaction => !!transaction); +function getDraftTransactions(draftTransactions?: OnyxCollection): Transaction[] { + return Object.values(draftTransactions ?? allTransactionDrafts ?? {}).filter((transaction): transaction is Transaction => !!transaction); } export {