From 131031b035dbe325a0cd24b8b312ea43fbe02d20 Mon Sep 17 00:00:00 2001 From: alberto Date: Tue, 30 Sep 2025 23:03:26 +0900 Subject: [PATCH 01/16] Allow zero-amount expenses --- src/components/ReportActionItem/MoneyRequestView.tsx | 4 ---- src/libs/TransactionPreviewUtils.ts | 4 ++-- src/libs/TransactionUtils/index.ts | 3 ++- src/pages/iou/MoneyRequestAmountForm.tsx | 2 +- src/pages/iou/request/step/IOURequestStepDistanceManual.tsx | 2 +- 5 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 47f75348bb19..d2d0a1d5c1a0 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -378,10 +378,6 @@ function MoneyRequestView({ // Checks applied when creating a new expense // NOTE: receipt field can return multiple violations, so we need to handle it separately const fieldChecks: Partial> = { - amount: { - isError: transactionAmount === 0, - translationPath: canEditAmount ? 'common.error.enterAmount' : 'common.error.missingAmount', - }, merchant: { isError: !isSettled && !isCancelled && isPolicyExpenseChat && isEmptyMerchant, translationPath: canEditMerchant ? 'common.error.enterMerchant' : 'common.error.missingMerchantName', diff --git a/src/libs/TransactionPreviewUtils.ts b/src/libs/TransactionPreviewUtils.ts index 2654457d949b..38136692f4d5 100644 --- a/src/libs/TransactionPreviewUtils.ts +++ b/src/libs/TransactionPreviewUtils.ts @@ -30,7 +30,7 @@ import { getOriginalTransactionWithSplitInfo, hasMissingSmartscanFields, hasNoticeTypeViolation, - hasPendingRTERViolation, + hasPendingRTERViolation, hasReceipt, hasViolation, hasWarningTypeViolation, isAmountMissing, @@ -216,7 +216,7 @@ function getTransactionPreviewTextAndTranslationPaths({ if (hasFieldErrors && RBRMessage === undefined) { const merchantMissing = isMerchantMissing(transaction); - const amountMissing = isAmountMissing(transaction); + const amountMissing = isAmountMissing(transaction) && hasReceipt(transaction); if (amountMissing && merchantMissing) { RBRMessage = {translationPath: 'violations.reviewRequired'}; } else if (amountMissing) { diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index f17faad8cf1d..2a6bd64a389b 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -442,7 +442,8 @@ function areRequiredFieldsEmpty(transaction: OnyxEntry): boolean { const isFromExpenseReport = parentReport?.type === CONST.REPORT.TYPE.EXPENSE; const isSplitPolicyExpenseChat = !!transaction?.comment?.splits?.some((participant) => allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${participant.chatReportID}`]?.isOwnPolicyExpenseChat); const isMerchantRequired = isFromExpenseReport || isSplitPolicyExpenseChat; - return (isMerchantRequired && isMerchantMissing(transaction)) || isAmountMissing(transaction) || isCreatedMissing(transaction); + const isAmountRequired = hasReceipt(transaction); + return (isMerchantRequired && isMerchantMissing(transaction)) || (isAmountMissing(transaction) && isAmountRequired) || isCreatedMissing(transaction); } /** diff --git a/src/pages/iou/MoneyRequestAmountForm.tsx b/src/pages/iou/MoneyRequestAmountForm.tsx index ab95c7e67c9a..997c6b609a6c 100644 --- a/src/pages/iou/MoneyRequestAmountForm.tsx +++ b/src/pages/iou/MoneyRequestAmountForm.tsx @@ -51,7 +51,7 @@ type MoneyRequestAmountFormProps = Omit !amount.length || parseFloat(amount) < 0.01; +const isAmountInvalid = (amount: string) => !amount.length; const isTaxAmountInvalid = (currentAmount: string, taxAmount: number, isTaxAmountForm: boolean, currency: string) => isTaxAmountForm && Number.parseFloat(currentAmount) > convertToFrontendAmountAsInteger(Math.abs(taxAmount), currency); diff --git a/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx b/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx index 25aa9e3ad2c7..e9c12c267396 100644 --- a/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx @@ -290,7 +290,7 @@ function IOURequestStepDistanceManual({ const submitAndNavigateToNextPage = useCallback(() => { const value = numberFormRef.current?.getNumber() ?? ''; - if (!value.length || parseFloat(value) < 0.01) { + if (!value.length) { setFormError(translate('iou.error.invalidDistance')); return; } From 40d42ed07e1b640a00896acb95994f6d381d1bef Mon Sep 17 00:00:00 2001 From: alberto Date: Tue, 30 Sep 2025 23:48:26 +0900 Subject: [PATCH 02/16] show zero amount --- src/components/ReportActionItem/MoneyRequestView.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index d2d0a1d5c1a0..35a377b33137 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -60,7 +60,7 @@ import { getReimbursable, getTagForDisplay, getTaxName, - hasMissingSmartscanFields, + hasMissingSmartscanFields, hasReceipt, hasReservationList, hasRoute as hasRouteTransactionUtils, isCardTransaction as isCardTransactionTransactionUtils, @@ -196,7 +196,7 @@ function MoneyRequestView({ // Use the updated transaction amount in merge flow to have correct positive/negative sign const actualAmount = isFromMergeTransaction && updatedTransaction ? updatedTransaction.amount : transactionAmount; const actualCurrency = updatedTransaction ? getCurrency(updatedTransaction) : transactionCurrency; - const shouldDisplayTransactionAmount = ((isDistanceRequest && hasRoute) || !!actualAmount) && actualAmount !== undefined; + const shouldDisplayTransactionAmount = ((isDistanceRequest && hasRoute) || (!!actualAmount && hasReceipt(updatedTransaction ?? transaction)) || !hasReceipt(updatedTransaction ?? transaction)) && actualAmount !== undefined; const formattedTransactionAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount, actualCurrency) : ''; const formattedPerAttendeeAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount / (transactionAttendees?.length ?? 1), actualCurrency) : ''; @@ -302,7 +302,9 @@ function MoneyRequestView({ const rateToDisplay = isCustomUnitOutOfPolicy ? translate('common.rateOutOfPolicy') : DistanceRequestUtils.getRateForDisplay(unit, rate, currency, translate, toLocaleDigit, isOffline); const distanceToDisplay = DistanceRequestUtils.getDistanceForDisplay(hasRoute, distance, unit, rate, translate); let merchantTitle = isEmptyMerchant ? '' : transactionMerchant; - let amountTitle = formattedTransactionAmount ? formattedTransactionAmount.toString() : ''; + console.log('AAAA'); + console.log(formattedTransactionAmount); + let amountTitle = formattedTransactionAmount.toString(); if (isTransactionScanning) { merchantTitle = translate('iou.receiptStatusTitle'); amountTitle = translate('iou.receiptStatusTitle'); From 85155961eb38cddbf4e26d46d3b90c4f487d2ba8 Mon Sep 17 00:00:00 2001 From: alberto Date: Tue, 30 Sep 2025 23:48:45 +0900 Subject: [PATCH 03/16] remove log lines --- src/components/ReportActionItem/MoneyRequestView.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 35a377b33137..33b74bf606bd 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -302,8 +302,6 @@ function MoneyRequestView({ const rateToDisplay = isCustomUnitOutOfPolicy ? translate('common.rateOutOfPolicy') : DistanceRequestUtils.getRateForDisplay(unit, rate, currency, translate, toLocaleDigit, isOffline); const distanceToDisplay = DistanceRequestUtils.getDistanceForDisplay(hasRoute, distance, unit, rate, translate); let merchantTitle = isEmptyMerchant ? '' : transactionMerchant; - console.log('AAAA'); - console.log(formattedTransactionAmount); let amountTitle = formattedTransactionAmount.toString(); if (isTransactionScanning) { merchantTitle = translate('iou.receiptStatusTitle'); From f0010946e290de72728c7dccba32bdc67b213b9d Mon Sep 17 00:00:00 2001 From: alberto Date: Tue, 30 Sep 2025 23:59:13 +0900 Subject: [PATCH 04/16] bot reviewer makes good points --- src/components/ReportActionItem/MoneyRequestView.tsx | 2 +- src/pages/iou/MoneyRequestAmountForm.tsx | 2 +- src/pages/iou/request/step/IOURequestStepDistanceManual.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 33b74bf606bd..e73de67b4a29 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -302,7 +302,7 @@ function MoneyRequestView({ const rateToDisplay = isCustomUnitOutOfPolicy ? translate('common.rateOutOfPolicy') : DistanceRequestUtils.getRateForDisplay(unit, rate, currency, translate, toLocaleDigit, isOffline); const distanceToDisplay = DistanceRequestUtils.getDistanceForDisplay(hasRoute, distance, unit, rate, translate); let merchantTitle = isEmptyMerchant ? '' : transactionMerchant; - let amountTitle = formattedTransactionAmount.toString(); + let amountTitle = formattedTransactionAmount?.toString() || ''; if (isTransactionScanning) { merchantTitle = translate('iou.receiptStatusTitle'); amountTitle = translate('iou.receiptStatusTitle'); diff --git a/src/pages/iou/MoneyRequestAmountForm.tsx b/src/pages/iou/MoneyRequestAmountForm.tsx index 997c6b609a6c..7f0627a0863d 100644 --- a/src/pages/iou/MoneyRequestAmountForm.tsx +++ b/src/pages/iou/MoneyRequestAmountForm.tsx @@ -51,7 +51,7 @@ type MoneyRequestAmountFormProps = Omit !amount.length; +const isAmountInvalid = (amount: string) => !amount.length || parseFloat(amount) < 0; const isTaxAmountInvalid = (currentAmount: string, taxAmount: number, isTaxAmountForm: boolean, currency: string) => isTaxAmountForm && Number.parseFloat(currentAmount) > convertToFrontendAmountAsInteger(Math.abs(taxAmount), currency); diff --git a/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx b/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx index e9c12c267396..b51aba97c1b7 100644 --- a/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx @@ -290,7 +290,7 @@ function IOURequestStepDistanceManual({ const submitAndNavigateToNextPage = useCallback(() => { const value = numberFormRef.current?.getNumber() ?? ''; - if (!value.length) { + if (!value.length || parseFloat(value) < 0) { setFormError(translate('iou.error.invalidDistance')); return; } From 4fe2a514f95951af02467a6c35dbb156c896997d Mon Sep 17 00:00:00 2001 From: alberto Date: Wed, 1 Oct 2025 00:08:15 +0900 Subject: [PATCH 05/16] prettier --- src/components/ReportActionItem/MoneyRequestView.tsx | 7 +++++-- src/libs/TransactionPreviewUtils.ts | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index e73de67b4a29..295573468abb 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -60,7 +60,8 @@ import { getReimbursable, getTagForDisplay, getTaxName, - hasMissingSmartscanFields, hasReceipt, + hasMissingSmartscanFields, + hasReceipt, hasReservationList, hasRoute as hasRouteTransactionUtils, isCardTransaction as isCardTransactionTransactionUtils, @@ -196,7 +197,9 @@ function MoneyRequestView({ // Use the updated transaction amount in merge flow to have correct positive/negative sign const actualAmount = isFromMergeTransaction && updatedTransaction ? updatedTransaction.amount : transactionAmount; const actualCurrency = updatedTransaction ? getCurrency(updatedTransaction) : transactionCurrency; - const shouldDisplayTransactionAmount = ((isDistanceRequest && hasRoute) || (!!actualAmount && hasReceipt(updatedTransaction ?? transaction)) || !hasReceipt(updatedTransaction ?? transaction)) && actualAmount !== undefined; + const shouldDisplayTransactionAmount = + ((isDistanceRequest && hasRoute) || (!!actualAmount && hasReceipt(updatedTransaction ?? transaction)) || !hasReceipt(updatedTransaction ?? transaction)) && + actualAmount !== undefined; const formattedTransactionAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount, actualCurrency) : ''; const formattedPerAttendeeAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount / (transactionAttendees?.length ?? 1), actualCurrency) : ''; diff --git a/src/libs/TransactionPreviewUtils.ts b/src/libs/TransactionPreviewUtils.ts index 38136692f4d5..31bde050ce57 100644 --- a/src/libs/TransactionPreviewUtils.ts +++ b/src/libs/TransactionPreviewUtils.ts @@ -30,7 +30,8 @@ import { getOriginalTransactionWithSplitInfo, hasMissingSmartscanFields, hasNoticeTypeViolation, - hasPendingRTERViolation, hasReceipt, + hasPendingRTERViolation, + hasReceipt, hasViolation, hasWarningTypeViolation, isAmountMissing, From e17c1341426322e6535a9d59d64932d98d811742 Mon Sep 17 00:00:00 2001 From: alberto Date: Fri, 3 Oct 2025 11:40:12 +0900 Subject: [PATCH 06/16] lint --- src/components/ReportActionItem/MoneyRequestView.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 4ad3b3ead12e..da62fa4f6461 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -417,7 +417,6 @@ function MoneyRequestView({ return ''; }, [ - transactionAmount, isSettled, isCancelled, isPolicyExpenseChat, @@ -428,7 +427,6 @@ function MoneyRequestView({ hasViolations, translate, getViolationsForField, - canEditAmount, canEditDate, canEditMerchant, canEdit, From c0013c37dab4e9f826174536e71c033bd5e04569 Mon Sep 17 00:00:00 2001 From: alberto Date: Mon, 6 Oct 2025 07:42:48 +0200 Subject: [PATCH 07/16] use date instead of amount for tests --- tests/unit/DebugUtilsTest.ts | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/tests/unit/DebugUtilsTest.ts b/tests/unit/DebugUtilsTest.ts index c3346c726922..0951faa403ba 100644 --- a/tests/unit/DebugUtilsTest.ts +++ b/tests/unit/DebugUtilsTest.ts @@ -1250,8 +1250,9 @@ describe('DebugUtils', () => { }; await Onyx.multiSet({ [`${ONYXKEYS.COLLECTION.TRANSACTION}1` as const]: { - amount: 0, - modifiedAmount: 0, + amount: 100, + created: '', + modifiedCreated: '', }, [`${ONYXKEYS.COLLECTION.REPORT}1` as const]: MOCK_IOU_REPORT, [`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}1` as const]: MOCK_REPORT_ACTIONS, @@ -1310,8 +1311,9 @@ describe('DebugUtils', () => { }; await Onyx.multiSet({ [`${ONYXKEYS.COLLECTION.TRANSACTION}1` as const]: { - amount: 0, - modifiedAmount: 0, + amount: 100, + created: '', + modifiedCreated: '', }, [`${ONYXKEYS.COLLECTION.REPORT}1` as const]: MOCK_IOU_REPORT, [`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}1` as const]: MOCK_REPORT_ACTIONS, @@ -1369,8 +1371,9 @@ describe('DebugUtils', () => { }; await Onyx.multiSet({ [`${ONYXKEYS.COLLECTION.TRANSACTION}1` as const]: { - amount: 0, - modifiedAmount: 0, + amount: 100, + created: '', + modifiedCreated: '', }, [`${ONYXKEYS.COLLECTION.REPORT}1` as const]: MOCK_CHAT_REPORT, [`${ONYXKEYS.COLLECTION.REPORT}2` as const]: MOCK_IOU_REPORT, @@ -1434,8 +1437,9 @@ describe('DebugUtils', () => { }; await Onyx.multiSet({ [`${ONYXKEYS.COLLECTION.TRANSACTION}1` as const]: { - amount: 0, - modifiedAmount: 0, + amount: 100, + created: '', + modifiedCreated: '', }, [`${ONYXKEYS.COLLECTION.REPORT}1` as const]: MOCK_CHAT_REPORT, [`${ONYXKEYS.COLLECTION.REPORT}2` as const]: MOCK_IOU_REPORT, @@ -1493,8 +1497,9 @@ describe('DebugUtils', () => { }; await Onyx.multiSet({ [`${ONYXKEYS.COLLECTION.TRANSACTION}1` as const]: { - amount: 0, - modifiedAmount: 0, + amount: 100, + created: '', + modifiedCreated: '', }, [`${ONYXKEYS.COLLECTION.REPORT}1` as const]: MOCK_IOU_REPORT, [`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}1` as const]: MOCK_REPORT_ACTIONS, From 54890d05b64185672f794d4e38df6747e8f01c5a Mon Sep 17 00:00:00 2001 From: alberto Date: Mon, 6 Oct 2025 08:09:57 +0200 Subject: [PATCH 08/16] more test updates --- tests/unit/ReportUtilsTest.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/unit/ReportUtilsTest.ts b/tests/unit/ReportUtilsTest.ts index 41866e89f998..3c57441b467c 100644 --- a/tests/unit/ReportUtilsTest.ts +++ b/tests/unit/ReportUtilsTest.ts @@ -7085,7 +7085,8 @@ describe('ReportUtils', () => { const transaction: Transaction = { ...createRandomTransaction(12345), reportID: parentReport.reportID, - amount: 0, + created: '', + modifiedCreated: '', }; await Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION}${transaction.transactionID}`, transaction); await waitForBatchedUpdates(); @@ -7110,7 +7111,8 @@ describe('ReportUtils', () => { const transaction: Transaction = { ...createRandomTransaction(12345), reportID: parentReport.reportID, - amount: 0, + created: '', + modifiedCreated: '', }; await Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION}${transaction.transactionID}`, transaction); await waitForBatchedUpdates(); From f16d537c20b103f4a6b002ad7ccc49462ce1cc13 Mon Sep 17 00:00:00 2001 From: alberto Date: Mon, 6 Oct 2025 09:08:15 +0200 Subject: [PATCH 09/16] update more tests --- tests/unit/TransactionPreviewUtils.test.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tests/unit/TransactionPreviewUtils.test.ts b/tests/unit/TransactionPreviewUtils.test.ts index 4331f657be60..6c41f2433231 100644 --- a/tests/unit/TransactionPreviewUtils.test.ts +++ b/tests/unit/TransactionPreviewUtils.test.ts @@ -104,12 +104,20 @@ describe('TransactionPreviewUtils', () => { expect(result.displayAmountText.text).toEqual('$0.00'); }); - it('returns merchant missing and amount missing message when appropriate', () => { + it('returns violations.reviewRequired when transaction has receipt with missing merchant and amount', async () => { + // Set up a proper expense report in Onyx + await Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}1`, { + reportID: '1', + type: 'expense', + }); + await waitForBatchedUpdates(); + const functionArgs = { ...basicProps, - transaction: {...basicProps.transaction, merchant: '', amount: 0}, + transaction: {...basicProps.transaction, merchant: '', amount: 0, receipt: {source: 'test-receipt.jpg', state: 'SCANCOMPLETE'}}, originalTransaction: undefined, shouldShowRBR: true, + isReportAPolicyExpenseChat: true, }; const result = getTransactionPreviewTextAndTranslationPaths(functionArgs); expect(result.RBRMessage.translationPath).toEqual('violations.reviewRequired'); From 0c3b0a0578cd5645790bcfd245306f0927fc5722 Mon Sep 17 00:00:00 2001 From: alberto Date: Mon, 6 Oct 2025 09:57:09 +0200 Subject: [PATCH 10/16] use CONST --- tests/unit/TransactionPreviewUtils.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/TransactionPreviewUtils.test.ts b/tests/unit/TransactionPreviewUtils.test.ts index 6c41f2433231..1eeabdad14ad 100644 --- a/tests/unit/TransactionPreviewUtils.test.ts +++ b/tests/unit/TransactionPreviewUtils.test.ts @@ -114,7 +114,7 @@ describe('TransactionPreviewUtils', () => { const functionArgs = { ...basicProps, - transaction: {...basicProps.transaction, merchant: '', amount: 0, receipt: {source: 'test-receipt.jpg', state: 'SCANCOMPLETE'}}, + transaction: {...basicProps.transaction, merchant: '', amount: 0, receipt: {source: 'test-receipt.jpg', state: CONST.IOU.RECEIPT_STATE.SCAN_COMPLETE}}, originalTransaction: undefined, shouldShowRBR: true, isReportAPolicyExpenseChat: true, From 897cf960c0bcb480f17345ff9609b740863eb525 Mon Sep 17 00:00:00 2001 From: alberto Date: Mon, 6 Oct 2025 10:14:59 +0200 Subject: [PATCH 11/16] prettier --- tests/unit/TransactionPreviewUtils.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/TransactionPreviewUtils.test.ts b/tests/unit/TransactionPreviewUtils.test.ts index 1eeabdad14ad..aae0b40701a2 100644 --- a/tests/unit/TransactionPreviewUtils.test.ts +++ b/tests/unit/TransactionPreviewUtils.test.ts @@ -111,7 +111,7 @@ describe('TransactionPreviewUtils', () => { type: 'expense', }); await waitForBatchedUpdates(); - + const functionArgs = { ...basicProps, transaction: {...basicProps.transaction, merchant: '', amount: 0, receipt: {source: 'test-receipt.jpg', state: CONST.IOU.RECEIPT_STATE.SCAN_COMPLETE}}, From 8c4346ee32b1c7e01cc249bf5c51926f4f86ce2d Mon Sep 17 00:00:00 2001 From: alberto Date: Thu, 9 Oct 2025 16:27:02 +0200 Subject: [PATCH 12/16] add dependencies --- src/components/ReportActionItem/MoneyRequestView.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index ce1edd277559..87dbf6762a10 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -195,9 +195,12 @@ function MoneyRequestView({ // Use the updated transaction amount in merge flow to have correct positive/negative sign const actualAmount = isFromMergeTransaction && updatedTransaction ? updatedTransaction.amount : transactionAmount; const actualCurrency = updatedTransaction ? getCurrency(updatedTransaction) : transactionCurrency; - const shouldDisplayTransactionAmount = - ((isDistanceRequest && hasRoute) || (!!actualAmount && hasReceipt(updatedTransaction ?? transaction)) || !hasReceipt(updatedTransaction ?? transaction)) && - actualAmount !== undefined; + const shouldDisplayTransactionAmount = useMemo(() => { + return ((isDistanceRequest && hasRoute) || + (!!actualAmount && hasReceipt(updatedTransaction ?? transaction)) || + !hasReceipt(updatedTransaction ?? transaction)) && + actualAmount !== undefined; + }, [isDistanceRequest, hasRoute, actualAmount, updatedTransaction?.receipt, transaction?.receipt]); const formattedTransactionAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount, actualCurrency) : ''; const formattedPerAttendeeAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount / (transactionAttendees?.length ?? 1), actualCurrency) : ''; From 0a6298e38fd53171b010633d5d40c1987151cf39 Mon Sep 17 00:00:00 2001 From: alberto Date: Thu, 9 Oct 2025 16:27:47 +0200 Subject: [PATCH 13/16] missing one --- src/components/ReportActionItem/MoneyRequestView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 87dbf6762a10..778101df2095 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -200,7 +200,7 @@ function MoneyRequestView({ (!!actualAmount && hasReceipt(updatedTransaction ?? transaction)) || !hasReceipt(updatedTransaction ?? transaction)) && actualAmount !== undefined; - }, [isDistanceRequest, hasRoute, actualAmount, updatedTransaction?.receipt, transaction?.receipt]); + }, [isDistanceRequest, hasRoute, actualAmount, updatedTransaction, transaction]); const formattedTransactionAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount, actualCurrency) : ''; const formattedPerAttendeeAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount / (transactionAttendees?.length ?? 1), actualCurrency) : ''; From c6b63454cbf50f8bb635875dcdf26918002eb361 Mon Sep 17 00:00:00 2001 From: alberto Date: Thu, 9 Oct 2025 16:33:12 +0200 Subject: [PATCH 14/16] prettier --- src/components/ReportActionItem/MoneyRequestView.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 778101df2095..0e0eab61807f 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -196,10 +196,10 @@ function MoneyRequestView({ const actualAmount = isFromMergeTransaction && updatedTransaction ? updatedTransaction.amount : transactionAmount; const actualCurrency = updatedTransaction ? getCurrency(updatedTransaction) : transactionCurrency; const shouldDisplayTransactionAmount = useMemo(() => { - return ((isDistanceRequest && hasRoute) || - (!!actualAmount && hasReceipt(updatedTransaction ?? transaction)) || - !hasReceipt(updatedTransaction ?? transaction)) && - actualAmount !== undefined; + return ( + ((isDistanceRequest && hasRoute) || (!!actualAmount && hasReceipt(updatedTransaction ?? transaction)) || !hasReceipt(updatedTransaction ?? transaction)) && + actualAmount !== undefined + ); }, [isDistanceRequest, hasRoute, actualAmount, updatedTransaction, transaction]); const formattedTransactionAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount, actualCurrency) : ''; const formattedPerAttendeeAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount / (transactionAttendees?.length ?? 1), actualCurrency) : ''; From f5d242e08b80de16fd951aa4b18136329841ac4d Mon Sep 17 00:00:00 2001 From: alberto Date: Thu, 9 Oct 2025 16:44:47 +0200 Subject: [PATCH 15/16] extra check because TS sucks --- src/components/ReportActionItem/MoneyRequestView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 0e0eab61807f..be3ad0c34f31 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -202,7 +202,7 @@ function MoneyRequestView({ ); }, [isDistanceRequest, hasRoute, actualAmount, updatedTransaction, transaction]); const formattedTransactionAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount, actualCurrency) : ''; - const formattedPerAttendeeAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount / (transactionAttendees?.length ?? 1), actualCurrency) : ''; + const formattedPerAttendeeAmount = shouldDisplayTransactionAmount && actualAmount !== undefined ? convertToDisplayString(actualAmount / (transactionAttendees?.length ?? 1), actualCurrency) : ''; const formattedOriginalAmount = transactionOriginalAmount && transactionOriginalCurrency && convertToDisplayString(transactionOriginalAmount, transactionOriginalCurrency); const isCardTransaction = isCardTransactionTransactionUtils(transaction); From 694204c8537a81f53313fa682fcdb539eee0c49d Mon Sep 17 00:00:00 2001 From: alberto Date: Thu, 9 Oct 2025 16:49:18 +0200 Subject: [PATCH 16/16] prettier again --- src/components/ReportActionItem/MoneyRequestView.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index be3ad0c34f31..c9f3008cfd2e 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -202,7 +202,8 @@ function MoneyRequestView({ ); }, [isDistanceRequest, hasRoute, actualAmount, updatedTransaction, transaction]); const formattedTransactionAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount, actualCurrency) : ''; - const formattedPerAttendeeAmount = shouldDisplayTransactionAmount && actualAmount !== undefined ? convertToDisplayString(actualAmount / (transactionAttendees?.length ?? 1), actualCurrency) : ''; + const formattedPerAttendeeAmount = + shouldDisplayTransactionAmount && actualAmount !== undefined ? convertToDisplayString(actualAmount / (transactionAttendees?.length ?? 1), actualCurrency) : ''; const formattedOriginalAmount = transactionOriginalAmount && transactionOriginalCurrency && convertToDisplayString(transactionOriginalAmount, transactionOriginalCurrency); const isCardTransaction = isCardTransactionTransactionUtils(transaction);