From a9129f269f4ebc8e91a5df9fc82204d85c4b7432 Mon Sep 17 00:00:00 2001 From: daledah Date: Mon, 14 Apr 2025 23:20:51 +0700 Subject: [PATCH 01/20] fix: Content before dot separator is empty --- src/libs/TransactionUtils/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index ef568db066a2..2e39583b3d04 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -343,6 +343,9 @@ function isAmountMissing(transaction: OnyxEntry) { } function isCreatedMissing(transaction: OnyxEntry) { + if (!transaction) { + return true; + } return transaction?.created === '' && (!transaction.created || transaction.modifiedCreated === ''); } From 54007dc6c173125694244f87fb4b41eaa291997a Mon Sep 17 00:00:00 2001 From: daledah Date: Tue, 15 Apr 2025 00:26:50 +0700 Subject: [PATCH 02/20] fix test --- src/libs/TransactionPreviewUtils.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libs/TransactionPreviewUtils.ts b/src/libs/TransactionPreviewUtils.ts index 6ee158603460..0389ec22c56b 100644 --- a/src/libs/TransactionPreviewUtils.ts +++ b/src/libs/TransactionPreviewUtils.ts @@ -180,7 +180,9 @@ function getTransactionPreviewTextAndTranslationPaths({ let previewHeaderText: TranslationPathOrText[] = [showCashOrCard]; - if (isDistanceRequest(transaction)) { + if (!transaction) { + previewHeaderText = [{text: ''}]; + } else if (isDistanceRequest(transaction)) { previewHeaderText = [{translationPath: 'common.distance'}]; } else if (isPerDiemRequest(transaction)) { previewHeaderText = [{translationPath: 'common.perDiem'}]; From 2ff1b21c9581d7026b9e5c6246fb5c0329e480b3 Mon Sep 17 00:00:00 2001 From: daledah Date: Tue, 15 Apr 2025 00:30:33 +0700 Subject: [PATCH 03/20] fix jest test 3 --- src/libs/TransactionPreviewUtils.ts | 4 +--- tests/unit/TransactionPreviewUtils.test.ts | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/libs/TransactionPreviewUtils.ts b/src/libs/TransactionPreviewUtils.ts index 0389ec22c56b..6ee158603460 100644 --- a/src/libs/TransactionPreviewUtils.ts +++ b/src/libs/TransactionPreviewUtils.ts @@ -180,9 +180,7 @@ function getTransactionPreviewTextAndTranslationPaths({ let previewHeaderText: TranslationPathOrText[] = [showCashOrCard]; - if (!transaction) { - previewHeaderText = [{text: ''}]; - } else if (isDistanceRequest(transaction)) { + if (isDistanceRequest(transaction)) { previewHeaderText = [{translationPath: 'common.distance'}]; } else if (isPerDiemRequest(transaction)) { previewHeaderText = [{translationPath: 'common.perDiem'}]; diff --git a/tests/unit/TransactionPreviewUtils.test.ts b/tests/unit/TransactionPreviewUtils.test.ts index dad134be3dfe..9a2f80d3a0fb 100644 --- a/tests/unit/TransactionPreviewUtils.test.ts +++ b/tests/unit/TransactionPreviewUtils.test.ts @@ -56,7 +56,7 @@ describe('TransactionPreviewUtils', () => { const functionArgs = {...basicProps, iouReport: undefined, transaction: undefined}; const result = getTransactionPreviewTextAndTranslationPaths(functionArgs); expect(result.RBRMessage.text).toEqual(''); - expect(result.previewHeaderText).toContainEqual({text: ''}); + expect(result.previewHeaderText).toContainEqual({translationPath: 'iou.cash'}); expect(result.displayAmountText.text).toEqual('$0.00'); }); From 2b8c76dd000298a6edbb9f035f65fa298a910396 Mon Sep 17 00:00:00 2001 From: daledah Date: Fri, 18 Apr 2025 02:03:18 +0700 Subject: [PATCH 04/20] add the optimistic to delete money request --- src/libs/actions/IOU.ts | 8 +++++++- src/pages/home/report/PureReportActionItem.tsx | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 305da947860c..6f72e3ea3a98 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -7364,7 +7364,7 @@ function deleteMoneyRequest(transactionID: string | undefined, reportAction: Ony { onyxMethod: Onyx.METHOD.SET, key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, - value: null, + value: {...transaction, pendingFields: {pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE}}, }, ]; @@ -7569,6 +7569,12 @@ function deleteMoneyRequest(transactionID: string | undefined, reportAction: Ony }); } + successData.push({ + onyxMethod: Onyx.METHOD.SET, + key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, + value: null, + }); + failureData.push({ onyxMethod: Onyx.METHOD.SET, key: `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, diff --git a/src/pages/home/report/PureReportActionItem.tsx b/src/pages/home/report/PureReportActionItem.tsx index f7939dc6cfb4..a4ea67581943 100644 --- a/src/pages/home/report/PureReportActionItem.tsx +++ b/src/pages/home/report/PureReportActionItem.tsx @@ -831,7 +831,7 @@ function PureReportActionItem({ ); } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.REPORT_PREVIEW && isClosedExpenseReportWithNoExpenses) { children = ${translate('parentReportAction.deletedReport')}`} />; - } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.REPORT_PREVIEW && canUseTableReportView && action.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE) { + } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.REPORT_PREVIEW && canUseTableReportView) { children = ( Date: Fri, 18 Apr 2025 02:09:59 +0700 Subject: [PATCH 05/20] fix ts error --- src/libs/actions/IOU.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 6f72e3ea3a98..a7d573dc8234 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -7363,17 +7363,11 @@ function deleteMoneyRequest(transactionID: string | undefined, reportAction: Ony const optimisticData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.SET, - key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, - value: {...transaction, pendingFields: {pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE}}, + key: `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, + value: null, }, ]; - optimisticData.push({ - onyxMethod: Onyx.METHOD.SET, - key: `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, - value: null, - }); - const failureData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.SET, From 5a048cab54745daaf3443ff1701a88d773986ba3 Mon Sep 17 00:00:00 2001 From: daledah Date: Fri, 18 Apr 2025 18:33:30 +0700 Subject: [PATCH 06/20] fix test --- tests/actions/IOUTest.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts index ea0559ca67c1..46f1947cb077 100644 --- a/tests/actions/IOUTest.ts +++ b/tests/actions/IOUTest.ts @@ -5248,7 +5248,7 @@ describe('actions/IOU', () => { }, }); }); - expect(updatedTransaction?.modifiedAmount).toBe(0); + expect(updatedTransaction?.modifiedAmount).toBe(20000); }); }); From f083498d14f712093f3ada396dd5861695710cb7 Mon Sep 17 00:00:00 2001 From: daledah Date: Sun, 20 Apr 2025 00:48:55 +0700 Subject: [PATCH 07/20] fix: show deleted transactions and fix test --- src/ONYXKEYS.ts | 2 ++ .../MoneyRequestReportPreview/index.tsx | 21 +++++++++++----- .../TransactionPreview/index.tsx | 24 ++++++++++--------- .../useReportWithTransactionsAndViolations.ts | 16 +++++++++---- src/libs/actions/IOU.ts | 20 ++++++++++++++-- tests/actions/IOUTest.ts | 2 +- 6 files changed, 61 insertions(+), 24 deletions(-) diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts index 5554a1f2c33f..cd84d941eb26 100755 --- a/src/ONYXKEYS.ts +++ b/src/ONYXKEYS.ts @@ -555,6 +555,7 @@ const ONYXKEYS = { REPORT_VIOLATIONS: 'reportViolations_', SECURITY_GROUP: 'securityGroup_', TRANSACTION: 'transactions_', + TRANSACTION_DELETED: 'transactionsDeleted_', TRANSACTION_VIOLATIONS: 'transactionViolations_', TRANSACTION_DRAFT: 'transactionsDraft_', SKIP_CONFIRMATION: 'skipConfirmation_', @@ -943,6 +944,7 @@ type OnyxCollectionValuesMapping = { [ONYXKEYS.COLLECTION.REPORT_VIOLATIONS]: OnyxTypes.ReportViolations; [ONYXKEYS.COLLECTION.SECURITY_GROUP]: OnyxTypes.SecurityGroup; [ONYXKEYS.COLLECTION.TRANSACTION]: OnyxTypes.Transaction; + [ONYXKEYS.COLLECTION.TRANSACTION_DELETED]: OnyxTypes.Transaction; [ONYXKEYS.COLLECTION.TRANSACTION_DRAFT]: OnyxTypes.Transaction; [ONYXKEYS.COLLECTION.SKIP_CONFIRMATION]: boolean; [ONYXKEYS.COLLECTION.TRANSACTION_BACKUP]: OnyxTypes.Transaction; diff --git a/src/components/ReportActionItem/MoneyRequestReportPreview/index.tsx b/src/components/ReportActionItem/MoneyRequestReportPreview/index.tsx index 7cae88187d68..b4ea740df7dd 100644 --- a/src/components/ReportActionItem/MoneyRequestReportPreview/index.tsx +++ b/src/components/ReportActionItem/MoneyRequestReportPreview/index.tsx @@ -34,25 +34,34 @@ function MoneyRequestReportPreview({ const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); const {shouldUseNarrowLayout} = useResponsiveLayout(); - const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${chatReportID}`); + const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${chatReportID}`, {canBeMissing: false}); const [invoiceReceiverPolicy] = useOnyx( `${ONYXKEYS.COLLECTION.POLICY}${chatReport?.invoiceReceiver && 'policyID' in chatReport.invoiceReceiver ? chatReport.invoiceReceiver.policyID : CONST.DEFAULT_NUMBER_ID}`, + {canBeMissing: false}, ); const [invoiceReceiverPersonalDetail] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, { selector: (personalDetails) => personalDetails?.[chatReport?.invoiceReceiver && 'accountID' in chatReport.invoiceReceiver ? chatReport.invoiceReceiver.accountID : CONST.DEFAULT_NUMBER_ID], + canBeMissing: false, }); - const [iouReport, transactions, violations] = useReportWithTransactionsAndViolations(iouReportID); + const [iouReport, transactions, violations, deletedTransactions] = useReportWithTransactionsAndViolations(iouReportID); + const transactionsOrDeleted = useMemo(() => { + if (!deletedTransactions) { + return transactions; + } + const transactionIDs = transactions.map((transaction) => transaction.transactionID); + return [...transactions, ...deletedTransactions.filter((transaction) => !transactionIDs.includes(transaction.transactionID))]; + }, [transactions, deletedTransactions]); const policy = usePolicy(policyID); - const lastTransaction = transactions?.at(0); + const lastTransaction = transactionsOrDeleted?.at(0); const lastTransactionViolations = useTransactionViolations(lastTransaction?.transactionID); const {isDelegateAccessRestricted} = useDelegateUserDetails(); const isTrackExpenseAction = isTrackExpenseActionReportActionsUtils(action); const isSplitBillAction = isSplitBillActionReportActionsUtils(action); const [currentWidth, setCurrentWidth] = useState(256); const reportPreviewStyles = useMemo( - () => StyleUtils.getMoneyRequestReportPreviewStyle(shouldUseNarrowLayout, currentWidth, transactions.length === 1), - [StyleUtils, currentWidth, shouldUseNarrowLayout, transactions.length], + () => StyleUtils.getMoneyRequestReportPreviewStyle(shouldUseNarrowLayout, currentWidth, transactionsOrDeleted.length === 1), + [StyleUtils, currentWidth, shouldUseNarrowLayout, transactionsOrDeleted.length], ); const renderItem: ListRenderItem = ({item}) => ( @@ -87,7 +96,7 @@ function MoneyRequestReportPreview({ iouReportID={iouReportID} policyID={undefined} iouReport={iouReport} - transactions={transactions} + transactions={transactionsOrDeleted} violations={violations} chatReport={chatReport} policy={policy} diff --git a/src/components/ReportActionItem/TransactionPreview/index.tsx b/src/components/ReportActionItem/TransactionPreview/index.tsx index 16e44f9fb63b..1e37c2728c71 100644 --- a/src/components/ReportActionItem/TransactionPreview/index.tsx +++ b/src/components/ReportActionItem/TransactionPreview/index.tsx @@ -35,17 +35,19 @@ const getOriginalTransactionIfBillIsSplit = (transaction: OnyxEntry function TransactionPreview(props: TransactionPreviewProps) { const {action, chatReportID, reportID, contextMenuAnchor, checkIfContextMenuActive = () => {}, shouldDisplayContextMenu, iouReportID, transactionID: transactionIDFromProps} = props; - const [iouReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${iouReportID}`); + const [iouReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${iouReportID}`, {canBeMissing: false}); const route = useRoute>(); - const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params?.threadReportID}`); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params?.threadReportID}`, {canBeMissing: false}); const isMoneyRequestAction = isMoneyRequestActionReportActionsUtils(action); const transactionID = transactionIDFromProps ?? (isMoneyRequestAction ? getOriginalMessage(action)?.IOUTransactionID : null); - const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`); - const violations = useTransactionViolations(transaction?.transactionID); - const [walletTerms] = useOnyx(ONYXKEYS.WALLET_TERMS); - const [session] = useOnyx(ONYXKEYS.SESSION); - const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${chatReportID}`); - const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST); + const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, {canBeMissing: true}); + const [deletedTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_DELETED}${transactionID}`, {canBeMissing: true}); + const transactionOrDeleted = useMemo(() => transaction ?? deletedTransaction, [transaction, deletedTransaction]); + const violations = useTransactionViolations(transactionOrDeleted?.transactionID); + const [walletTerms] = useOnyx(ONYXKEYS.WALLET_TERMS, {canBeMissing: true}); + const [session] = useOnyx(ONYXKEYS.SESSION, {canBeMissing: false}); + const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${chatReportID}`, {canBeMissing: false}); + const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {canBeMissing: false}); // Get transaction violations for given transaction id from onyx, find duplicated transactions violations and get duplicates const allDuplicates = useMemo(() => violations?.find((violation) => violation.name === CONST.VIOLATIONS.DUPLICATED_TRANSACTION)?.data?.duplicates ?? [], [violations]); @@ -66,10 +68,10 @@ function TransactionPreview(props: TransactionPreviewProps) { }, [chatReportID]); const navigateToReviewFields = useCallback(() => { - Navigation.navigate(getReviewNavigationRoute(route, report, transaction, duplicates)); - }, [duplicates, report, route, transaction]); + Navigation.navigate(getReviewNavigationRoute(route, report, transactionOrDeleted, duplicates)); + }, [duplicates, report, route, transactionOrDeleted]); - const {originalTransaction, isSplit} = getOriginalTransactionIfBillIsSplit(transaction); + const {originalTransaction, isSplit} = getOriginalTransactionIfBillIsSplit(transactionOrDeleted); return ( = {}; -function useReportWithTransactionsAndViolations(reportID?: string): [OnyxEntry, Transaction[], OnyxCollection] { +function useReportWithTransactionsAndViolations(reportID?: string): [OnyxEntry, Transaction[], OnyxCollection, Transaction[]] { const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID ?? CONST.DEFAULT_NUMBER_ID}`); const [transactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION, { selector: (_transactions) => reportTransactionsSelector(_transactions, reportID), + canBeMissing: true, + }); + const [deletedTransactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_DELETED, { + selector: (_transactions) => reportTransactionsSelector(_transactions, reportID), + canBeMissing: true, }); const [violations] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, { selector: (allViolations) => Object.fromEntries( - Object.entries(allViolations ?? {}).filter(([key]) => - transactions?.some((transaction) => transaction.transactionID === key.replace(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, '')), + Object.entries(allViolations ?? {}).filter( + ([key]) => + !!transactions?.some((transaction) => transaction.transactionID === key.replace(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, '')) || + !!deletedTransactions?.some((transaction) => transaction.transactionID === key.replace(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, '')), ), ), + canBeMissing: true, }); - return [report, transactions ?? DEFAULT_TRANSACTIONS, violations ?? DEFAULT_VIOLATIONS]; + return [report, transactions ?? DEFAULT_TRANSACTIONS, violations ?? DEFAULT_VIOLATIONS, deletedTransactions ?? DEFAULT_TRANSACTIONS]; } export default useReportWithTransactionsAndViolations; diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 483c6f9ff204..b0a0bd30847c 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -7363,17 +7363,33 @@ function deleteMoneyRequest(transactionID: string | undefined, reportAction: Ony const optimisticData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.SET, - key: `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, + key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, value: null, }, + { + onyxMethod: Onyx.METHOD.SET, + key: `${ONYXKEYS.COLLECTION.TRANSACTION_DELETED}${transactionID}`, + value: transaction ?? null, + }, ]; + optimisticData.push({ + onyxMethod: Onyx.METHOD.SET, + key: `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, + value: null, + }); + const failureData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.SET, key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, value: transaction ?? null, }, + { + onyxMethod: Onyx.METHOD.SET, + key: `${ONYXKEYS.COLLECTION.TRANSACTION_DELETED}${transactionID}`, + value: null, + } ]; if (transactionViolations) { @@ -7565,7 +7581,7 @@ function deleteMoneyRequest(transactionID: string | undefined, reportAction: Ony successData.push({ onyxMethod: Onyx.METHOD.SET, - key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, + key: `${ONYXKEYS.COLLECTION.TRANSACTION_DELETED}${transactionID}`, value: null, }); diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts index 46f1947cb077..ea0559ca67c1 100644 --- a/tests/actions/IOUTest.ts +++ b/tests/actions/IOUTest.ts @@ -5248,7 +5248,7 @@ describe('actions/IOU', () => { }, }); }); - expect(updatedTransaction?.modifiedAmount).toBe(20000); + expect(updatedTransaction?.modifiedAmount).toBe(0); }); }); From 5c64865d5280e37ba8d654afa62ab0a814b30a79 Mon Sep 17 00:00:00 2001 From: daledah Date: Sun, 20 Apr 2025 00:51:03 +0700 Subject: [PATCH 08/20] fix: add canBeMissing --- src/hooks/useReportWithTransactionsAndViolations.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/useReportWithTransactionsAndViolations.ts b/src/hooks/useReportWithTransactionsAndViolations.ts index 36de567f632b..a529d04e8079 100644 --- a/src/hooks/useReportWithTransactionsAndViolations.ts +++ b/src/hooks/useReportWithTransactionsAndViolations.ts @@ -9,7 +9,7 @@ const DEFAULT_TRANSACTIONS: Transaction[] = []; const DEFAULT_VIOLATIONS: Record = {}; function useReportWithTransactionsAndViolations(reportID?: string): [OnyxEntry, Transaction[], OnyxCollection, Transaction[]] { - const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID ?? CONST.DEFAULT_NUMBER_ID}`); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID ?? CONST.DEFAULT_NUMBER_ID}`, {canBeMissing: true}); const [transactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION, { selector: (_transactions) => reportTransactionsSelector(_transactions, reportID), canBeMissing: true, From 6342dc0f23c1cc6d0fa2c7a9e9ad0531860d1cd3 Mon Sep 17 00:00:00 2001 From: daledah Date: Sun, 20 Apr 2025 00:51:59 +0700 Subject: [PATCH 09/20] fix: prettier --- src/libs/actions/IOU.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index b0a0bd30847c..4db12c737c99 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -7386,10 +7386,10 @@ function deleteMoneyRequest(transactionID: string | undefined, reportAction: Ony value: transaction ?? null, }, { - onyxMethod: Onyx.METHOD.SET, - key: `${ONYXKEYS.COLLECTION.TRANSACTION_DELETED}${transactionID}`, - value: null, - } + onyxMethod: Onyx.METHOD.SET, + key: `${ONYXKEYS.COLLECTION.TRANSACTION_DELETED}${transactionID}`, + value: null, + }, ]; if (transactionViolations) { From a3e36888374099c5739cb30173a556d27eb34587 Mon Sep 17 00:00:00 2001 From: daledah Date: Mon, 21 Apr 2025 15:34:24 +0700 Subject: [PATCH 10/20] fix: lint --- .../MoneyRequestReportPreview/index.tsx | 2 +- .../useReportWithTransactionsAndViolations.ts | 3 +-- src/libs/actions/IOU.ts | 17 ++++++++++++++--- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestReportPreview/index.tsx b/src/components/ReportActionItem/MoneyRequestReportPreview/index.tsx index b4ea740df7dd..4e74d104ac8c 100644 --- a/src/components/ReportActionItem/MoneyRequestReportPreview/index.tsx +++ b/src/components/ReportActionItem/MoneyRequestReportPreview/index.tsx @@ -36,7 +36,7 @@ function MoneyRequestReportPreview({ const {shouldUseNarrowLayout} = useResponsiveLayout(); const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${chatReportID}`, {canBeMissing: false}); const [invoiceReceiverPolicy] = useOnyx( - `${ONYXKEYS.COLLECTION.POLICY}${chatReport?.invoiceReceiver && 'policyID' in chatReport.invoiceReceiver ? chatReport.invoiceReceiver.policyID : CONST.DEFAULT_NUMBER_ID}`, + `${ONYXKEYS.COLLECTION.POLICY}${chatReport?.invoiceReceiver && 'policyID' in chatReport.invoiceReceiver ? chatReport.invoiceReceiver.policyID : undefined}`, {canBeMissing: false}, ); const [invoiceReceiverPersonalDetail] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, { diff --git a/src/hooks/useReportWithTransactionsAndViolations.ts b/src/hooks/useReportWithTransactionsAndViolations.ts index a529d04e8079..528c0fe36eab 100644 --- a/src/hooks/useReportWithTransactionsAndViolations.ts +++ b/src/hooks/useReportWithTransactionsAndViolations.ts @@ -1,6 +1,5 @@ import type {OnyxCollection, OnyxEntry} from 'react-native-onyx'; import {reportTransactionsSelector} from '@libs/ReportUtils'; -import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import type {Report, Transaction, TransactionViolation} from '@src/types/onyx'; import useOnyx from './useOnyx'; @@ -9,7 +8,7 @@ const DEFAULT_TRANSACTIONS: Transaction[] = []; const DEFAULT_VIOLATIONS: Record = {}; function useReportWithTransactionsAndViolations(reportID?: string): [OnyxEntry, Transaction[], OnyxCollection, Transaction[]] { - const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID ?? CONST.DEFAULT_NUMBER_ID}`, {canBeMissing: true}); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`, {canBeMissing: true}); const [transactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION, { selector: (_transactions) => reportTransactionsSelector(_transactions, reportID), canBeMissing: true, diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 4db12c737c99..76b7669097b5 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -123,7 +123,6 @@ import { getOutstandingChildRequest, getParsedComment, getPersonalDetailsForAccountID, - getReportNameValuePairs, getReportNotificationPreference, getReportOrDraftReport, getReportTransactions, @@ -731,6 +730,18 @@ Onyx.connect({ callback: (value) => (personalDetailsList = value), }); +let allReportNameValuePairs: OnyxCollection; +Onyx.connect({ + key: ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS, + waitForCollectionCallback: true, + callback: (value) => { + if (!value) { + return; + } + allReportNameValuePairs = value; + }, +}); + /** * @private * After finishing the action in RHP from the Inbox tab, besides dismissing the modal, we should open the report. @@ -8690,7 +8701,7 @@ function canApproveIOU(iouReport: OnyxTypes.OnyxInputOrEntry | const isOpenExpenseReport = isOpenExpenseReportReportUtils(iouReport); const isApproved = isReportApproved({report: iouReport}); const iouSettled = isSettled(iouReport); - const reportNameValuePairs = getReportNameValuePairs(iouReport?.reportID); + const reportNameValuePairs = allReportNameValuePairs?.[`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${iouReport?.reportID}`]; const isArchivedExpenseReport = isArchivedReport(reportNameValuePairs); const reportTransactions = getReportTransactions(iouReport?.reportID); const hasOnlyPendingCardOrScanningTransactions = reportTransactions.length > 0 && reportTransactions.every(isPendingCardOrScanningTransaction); @@ -8725,7 +8736,7 @@ function canIOUBePaid( shouldCheckApprovedState = true, ) { const isPolicyExpenseChat = isPolicyExpenseChatReportUtil(chatReport); - const reportNameValuePairs = chatReportRNVP ?? getReportNameValuePairs(chatReport?.reportID); + const reportNameValuePairs = chatReportRNVP ?? allReportNameValuePairs?.[`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${chatReport?.reportID}`]; const isChatReportArchived = isArchivedReport(reportNameValuePairs); const iouSettled = isSettled(iouReport); From 84d6c992800d87c584477cb3eee2a683b4bf08ab Mon Sep 17 00:00:00 2001 From: daledah Date: Wed, 23 Apr 2025 04:21:46 +0700 Subject: [PATCH 11/20] fix: lint --- src/libs/actions/IOU.ts | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 766b590a9e92..caf97dcb9609 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -738,18 +738,6 @@ Onyx.connect({ callback: (value) => (personalDetailsList = value), }); -let allReportNameValuePairs: OnyxCollection; -Onyx.connect({ - key: ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS, - waitForCollectionCallback: true, - callback: (value) => { - if (!value) { - return; - } - allReportNameValuePairs = value; - }, -}); - /** * @private * After finishing the action in RHP from the Inbox tab, besides dismissing the modal, we should open the report. From be1d15297ac062ea5b4351a85bae12ba846019c5 Mon Sep 17 00:00:00 2001 From: daledah Date: Wed, 23 Apr 2025 15:09:52 +0700 Subject: [PATCH 12/20] revert latest changes --- src/ONYXKEYS.ts | 2 -- .../MoneyRequestReportPreview/index.tsx | 17 +++++----------- .../TransactionPreview/index.tsx | 16 +++++++-------- .../useReportWithTransactionsAndViolations.ts | 19 ++++++------------ src/libs/actions/IOU.ts | 20 ++----------------- tests/actions/IOUTest.ts | 2 +- 6 files changed, 21 insertions(+), 55 deletions(-) diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts index 1b1ba5ccfb98..38e1b25c6a9f 100755 --- a/src/ONYXKEYS.ts +++ b/src/ONYXKEYS.ts @@ -555,7 +555,6 @@ const ONYXKEYS = { REPORT_VIOLATIONS: 'reportViolations_', SECURITY_GROUP: 'securityGroup_', TRANSACTION: 'transactions_', - TRANSACTION_DELETED: 'transactionsDeleted_', TRANSACTION_VIOLATIONS: 'transactionViolations_', TRANSACTION_DRAFT: 'transactionsDraft_', SKIP_CONFIRMATION: 'skipConfirmation_', @@ -944,7 +943,6 @@ type OnyxCollectionValuesMapping = { [ONYXKEYS.COLLECTION.REPORT_VIOLATIONS]: OnyxTypes.ReportViolations; [ONYXKEYS.COLLECTION.SECURITY_GROUP]: OnyxTypes.SecurityGroup; [ONYXKEYS.COLLECTION.TRANSACTION]: OnyxTypes.Transaction; - [ONYXKEYS.COLLECTION.TRANSACTION_DELETED]: OnyxTypes.Transaction; [ONYXKEYS.COLLECTION.TRANSACTION_DRAFT]: OnyxTypes.Transaction; [ONYXKEYS.COLLECTION.SKIP_CONFIRMATION]: boolean; [ONYXKEYS.COLLECTION.TRANSACTION_BACKUP]: OnyxTypes.Transaction; diff --git a/src/components/ReportActionItem/MoneyRequestReportPreview/index.tsx b/src/components/ReportActionItem/MoneyRequestReportPreview/index.tsx index 2182b0b83ded..8a5fc8bedeb3 100644 --- a/src/components/ReportActionItem/MoneyRequestReportPreview/index.tsx +++ b/src/components/ReportActionItem/MoneyRequestReportPreview/index.tsx @@ -44,24 +44,17 @@ function MoneyRequestReportPreview({ personalDetails?.[chatReport?.invoiceReceiver && 'accountID' in chatReport.invoiceReceiver ? chatReport.invoiceReceiver.accountID : CONST.DEFAULT_NUMBER_ID], canBeMissing: true, }); - const [iouReport, transactions, violations, deletedTransactions] = useReportWithTransactionsAndViolations(iouReportID); - const transactionsOrDeleted = useMemo(() => { - if (!deletedTransactions) { - return transactions; - } - const transactionIDs = transactions.map((transaction) => transaction.transactionID); - return [...transactions, ...deletedTransactions.filter((transaction) => !transactionIDs.includes(transaction.transactionID))]; - }, [transactions, deletedTransactions]); + const [iouReport, transactions, violations] = useReportWithTransactionsAndViolations(iouReportID); const policy = usePolicy(policyID); - const lastTransaction = transactionsOrDeleted?.at(0); + const lastTransaction = transactions?.at(0); const lastTransactionViolations = useTransactionViolations(lastTransaction?.transactionID); const {isDelegateAccessRestricted} = useDelegateUserDetails(); const isTrackExpenseAction = isTrackExpenseActionReportActionsUtils(action); const isSplitBillAction = isSplitBillActionReportActionsUtils(action); const [currentWidth, setCurrentWidth] = useState(256); const reportPreviewStyles = useMemo( - () => StyleUtils.getMoneyRequestReportPreviewStyle(shouldUseNarrowLayout, currentWidth, transactionsOrDeleted.length === 1), - [StyleUtils, currentWidth, shouldUseNarrowLayout, transactionsOrDeleted.length], + () => StyleUtils.getMoneyRequestReportPreviewStyle(shouldUseNarrowLayout, currentWidth, transactions.length === 1), + [StyleUtils, currentWidth, shouldUseNarrowLayout, transactions.length], ); const renderItem: ListRenderItem = ({item}) => ( @@ -97,7 +90,7 @@ function MoneyRequestReportPreview({ iouReportID={iouReportID} policyID={undefined} iouReport={iouReport} - transactions={transactionsOrDeleted} + transactions={transactions} violations={violations} chatReport={chatReport} policy={policy} diff --git a/src/components/ReportActionItem/TransactionPreview/index.tsx b/src/components/ReportActionItem/TransactionPreview/index.tsx index a09bb10cdfe1..dc26694a4c49 100644 --- a/src/components/ReportActionItem/TransactionPreview/index.tsx +++ b/src/components/ReportActionItem/TransactionPreview/index.tsx @@ -42,17 +42,15 @@ function TransactionPreview(props: TransactionPreviewProps) { const [iouReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${iouReportID}`, {canBeMissing: true}); const route = useRoute>(); - const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params?.threadReportID}`, {canBeMissing: false}); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params?.threadReportID}`, {canBeMissing: true}); const isMoneyRequestAction = isMoneyRequestActionReportActionsUtils(action); const transactionID = transactionIDFromProps ?? (isMoneyRequestAction ? getOriginalMessage(action)?.IOUTransactionID : null); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, {canBeMissing: true}); - const [deletedTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_DELETED}${transactionID}`, {canBeMissing: true}); - const transactionOrDeleted = useMemo(() => transaction ?? deletedTransaction, [transaction, deletedTransaction]); - const violations = useTransactionViolations(transactionOrDeleted?.transactionID); + const violations = useTransactionViolations(transaction?.transactionID); const [walletTerms] = useOnyx(ONYXKEYS.WALLET_TERMS, {canBeMissing: true}); - const [session] = useOnyx(ONYXKEYS.SESSION, {canBeMissing: false}); + const [session] = useOnyx(ONYXKEYS.SESSION, {canBeMissing: true}); const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${chatReportID}`, {canBeMissing: true}); - const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {canBeMissing: false}); + const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {canBeMissing: true}); // Get transaction violations for given transaction id from onyx, find duplicated transactions violations and get duplicates const allDuplicates = useMemo(() => violations?.find((violation) => violation.name === CONST.VIOLATIONS.DUPLICATED_TRANSACTION)?.data?.duplicates ?? [], [violations]); @@ -73,10 +71,10 @@ function TransactionPreview(props: TransactionPreviewProps) { }, [chatReportID]); const navigateToReviewFields = useCallback(() => { - Navigation.navigate(getReviewNavigationRoute(route, report, transactionOrDeleted, duplicates)); - }, [duplicates, report, route, transactionOrDeleted]); + Navigation.navigate(getReviewNavigationRoute(route, report, transaction, duplicates)); + }, [duplicates, report, route, transaction]); - const {originalTransaction, isSplit} = getOriginalTransactionIfBillIsSplit(transactionOrDeleted); + const {originalTransaction, isSplit} = getOriginalTransactionIfBillIsSplit(transaction); return ( = {}; -function useReportWithTransactionsAndViolations(reportID?: string): [OnyxEntry, Transaction[], OnyxCollection, Transaction[]] { - const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`, {canBeMissing: true}); +function useReportWithTransactionsAndViolations(reportID?: string): [OnyxEntry, Transaction[], OnyxCollection] { + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID ?? CONST.DEFAULT_NUMBER_ID}`); const [transactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION, { selector: (_transactions) => reportTransactionsSelector(_transactions, reportID), - canBeMissing: true, - }); - const [deletedTransactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_DELETED, { - selector: (_transactions) => reportTransactionsSelector(_transactions, reportID), - canBeMissing: true, }); const [violations] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, { selector: (allViolations) => Object.fromEntries( - Object.entries(allViolations ?? {}).filter( - ([key]) => - !!transactions?.some((transaction) => transaction.transactionID === key.replace(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, '')) || - !!deletedTransactions?.some((transaction) => transaction.transactionID === key.replace(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, '')), + Object.entries(allViolations ?? {}).filter(([key]) => + transactions?.some((transaction) => transaction.transactionID === key.replace(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, '')), ), ), - canBeMissing: true, }); - return [report, transactions ?? DEFAULT_TRANSACTIONS, violations ?? DEFAULT_VIOLATIONS, deletedTransactions ?? DEFAULT_TRANSACTIONS]; + return [report, transactions ?? DEFAULT_TRANSACTIONS, violations ?? DEFAULT_VIOLATIONS]; } export default useReportWithTransactionsAndViolations; diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index caf97dcb9609..81295ba1a394 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -7371,33 +7371,17 @@ function deleteMoneyRequest(transactionID: string | undefined, reportAction: Ony const optimisticData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.SET, - key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, + key: `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, value: null, }, - { - onyxMethod: Onyx.METHOD.SET, - key: `${ONYXKEYS.COLLECTION.TRANSACTION_DELETED}${transactionID}`, - value: transaction ?? null, - }, ]; - optimisticData.push({ - onyxMethod: Onyx.METHOD.SET, - key: `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, - value: null, - }); - const failureData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.SET, key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, value: transaction ?? null, }, - { - onyxMethod: Onyx.METHOD.SET, - key: `${ONYXKEYS.COLLECTION.TRANSACTION_DELETED}${transactionID}`, - value: null, - }, ]; if (transactionViolations) { @@ -7589,7 +7573,7 @@ function deleteMoneyRequest(transactionID: string | undefined, reportAction: Ony successData.push({ onyxMethod: Onyx.METHOD.SET, - key: `${ONYXKEYS.COLLECTION.TRANSACTION_DELETED}${transactionID}`, + key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, value: null, }); diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts index d3c805c4d097..9da187153f87 100644 --- a/tests/actions/IOUTest.ts +++ b/tests/actions/IOUTest.ts @@ -5209,7 +5209,7 @@ describe('actions/IOU', () => { }, }); }); - expect(updatedTransaction?.modifiedAmount).toBe(0); + expect(updatedTransaction?.modifiedAmount).toBe(20000); }); }); From bb6bd47bb1ff520d926eb284c89a6e171ecf6930 Mon Sep 17 00:00:00 2001 From: daledah Date: Thu, 24 Apr 2025 01:42:29 +0700 Subject: [PATCH 13/20] fix test --- tests/actions/IOUTest.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts index 018b53580677..a8abf77ff1ef 100644 --- a/tests/actions/IOUTest.ts +++ b/tests/actions/IOUTest.ts @@ -2777,7 +2777,7 @@ describe('actions/IOU', () => { }); }); - expect(t).toBeFalsy(); + expect(t).toBeTruthy(); // Given fetch operations are resumed mockFetch?.resume?.(); @@ -5298,7 +5298,7 @@ describe('actions/IOU', () => { }, }); }); - expect(updatedTransaction?.modifiedAmount).toBe(20000); + expect(updatedTransaction?.modifiedAmount).toBe(0); }); }); From f6134e811baaaae399156703f3ee385aec8792a8 Mon Sep 17 00:00:00 2001 From: daledah Date: Thu, 24 Apr 2025 18:15:20 +0700 Subject: [PATCH 14/20] fix canBeMissing --- src/components/ReportActionItem/TransactionPreview/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ReportActionItem/TransactionPreview/index.tsx b/src/components/ReportActionItem/TransactionPreview/index.tsx index dc26694a4c49..5974efdbd1dc 100644 --- a/src/components/ReportActionItem/TransactionPreview/index.tsx +++ b/src/components/ReportActionItem/TransactionPreview/index.tsx @@ -45,7 +45,7 @@ function TransactionPreview(props: TransactionPreviewProps) { const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params?.threadReportID}`, {canBeMissing: true}); const isMoneyRequestAction = isMoneyRequestActionReportActionsUtils(action); const transactionID = transactionIDFromProps ?? (isMoneyRequestAction ? getOriginalMessage(action)?.IOUTransactionID : null); - const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, {canBeMissing: true}); + const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, {canBeMissing: false}); const violations = useTransactionViolations(transaction?.transactionID); const [walletTerms] = useOnyx(ONYXKEYS.WALLET_TERMS, {canBeMissing: true}); const [session] = useOnyx(ONYXKEYS.SESSION, {canBeMissing: true}); From 64f3692ddfb7819172a192ceeb33e28789dce696 Mon Sep 17 00:00:00 2001 From: daledah Date: Mon, 28 Apr 2025 22:52:18 +0700 Subject: [PATCH 15/20] add pending delete action for deleted transaction --- src/libs/actions/IOU.ts | 12 +++++++++--- tests/actions/IOUTest.ts | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 6116eaf10d91..38ce3d53d676 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -7366,16 +7366,22 @@ function deleteMoneyRequest(transactionID: string | undefined, reportAction: Ony const optimisticData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.SET, - key: `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, - value: null, + key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, + value: {...transaction, pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE}, }, ]; + optimisticData.push({ + onyxMethod: Onyx.METHOD.SET, + key: `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, + value: null, + }); + const failureData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.SET, key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, - value: transaction ?? null, + value: {...transaction, pendingAction: null}, }, ]; diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts index a8abf77ff1ef..0b43f9e81ef9 100644 --- a/tests/actions/IOUTest.ts +++ b/tests/actions/IOUTest.ts @@ -2778,6 +2778,7 @@ describe('actions/IOU', () => { }); expect(t).toBeTruthy(); + expect(t?.pendingAction).toBe(CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE); // Given fetch operations are resumed mockFetch?.resume?.(); From 59a3d60acc63bd656db77f571db222d537f4aba4 Mon Sep 17 00:00:00 2001 From: daledah Date: Tue, 29 Apr 2025 18:38:44 +0700 Subject: [PATCH 16/20] fix: apply strikethrough style for delete action --- .../TransactionPreviewContent.tsx | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/components/ReportActionItem/TransactionPreview/TransactionPreviewContent.tsx b/src/components/ReportActionItem/TransactionPreview/TransactionPreviewContent.tsx index 8389f4521d3a..35631aa9f391 100644 --- a/src/components/ReportActionItem/TransactionPreview/TransactionPreviewContent.tsx +++ b/src/components/ReportActionItem/TransactionPreview/TransactionPreviewContent.tsx @@ -112,7 +112,7 @@ function TransactionPreviewContent({ ? getIOUData(managerID, ownerAccountID, isIOUReport(iouReport) || reportPreviewAction?.childType === CONST.REPORT.TYPE.IOU, personalDetails, requestAmount ?? 0) : undefined; const {from, to} = iouData ?? {from: null, to: null}; - const isDeleted = action?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE; + const isDeleted = action?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE || transaction?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE; const shouldShowCategoryOrTag = shouldShowCategory || shouldShowTag; const shouldShowMerchantOrDescription = shouldShowDescription || shouldShowMerchant; const shouldShowIOUHeader = !!from && !!to; @@ -171,15 +171,13 @@ function TransactionPreviewContent({ shouldHideOnDelete={shouldHideOnDelete} > - {!isDeleted && ( - - )} + {shouldShowSkeleton ? ( ) : ( @@ -201,7 +199,7 @@ function TransactionPreviewContent({ )} - {previewHeaderText} + {previewHeaderText} {isBillSplit && ( {!!splitShare && ( - + {translate('iou.yourSplit', {amount: convertToDisplayString(splitShare, requestCurrency)})} )} @@ -282,7 +280,7 @@ function TransactionPreviewContent({ /> {category} @@ -298,7 +296,7 @@ function TransactionPreviewContent({ /> {getCleanedTagName(tag)} @@ -317,7 +315,7 @@ function TransactionPreviewContent({ /> {RBRMessage} From 51a07aa1fc14e866f23c56b1471b9634472afbfc Mon Sep 17 00:00:00 2001 From: daledah Date: Fri, 2 May 2025 23:08:05 +0700 Subject: [PATCH 17/20] fix: show not-allowed cursor for pending delete report preview --- .../MoneyRequestReportPreviewContent.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx index 8b11a3615275..68f999fd63d0 100644 --- a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx +++ b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx @@ -458,6 +458,8 @@ function MoneyRequestReportPreviewContent({ return getReportPreviewAction(violations, iouReport, policy, transactions, reportNameValuePairs); }, [isPaidAnimationRunning, violations, iouReport, policy, transactions, reportNameValuePairs]); + const isPendingDelete = action.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE; + const reportPreviewActions = { [CONST.REPORT.REPORT_PREVIEW_ACTIONS.SUBMIT]: (