From d5e87389897e63d91239cf8a5d9d138684ceeb35 Mon Sep 17 00:00:00 2001 From: truph01 Date: Tue, 14 Oct 2025 23:39:17 +0700 Subject: [PATCH 1/7] fix: display fallback x button to dismiss the transaction report in createChat error --- .../MoneyRequestReceiptView.tsx | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx index ab586c8cc5832..7f6eb048a516b 100644 --- a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx +++ b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx @@ -14,7 +14,7 @@ import useReportIsArchived from '@hooks/useReportIsArchived'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; import useTransactionViolations from '@hooks/useTransactionViolations'; -import {isReceiptError} from '@libs/ErrorUtils'; +import {getMicroSecondOnyxErrorWithTranslationKey, isReceiptError} from '@libs/ErrorUtils'; import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID'; import {getThumbnailAndImageURIs} from '@libs/ReceiptUtils'; import {getOriginalMessage, isMoneyRequestAction} from '@libs/ReportActionsUtils'; @@ -107,7 +107,6 @@ function MoneyRequestReceiptView({ }); const [isLoading, setIsLoading] = useState(true); - const parentReportAction = report?.parentReportActionID ? parentReportActions?.[report.parentReportActionID] : undefined; const isTrackExpense = isTrackExpenseReport(report); const moneyRequestReport = parentReport; @@ -187,11 +186,16 @@ function MoneyRequestReceiptView({ !isTransactionScanning && (hasReceipt || !!receiptRequiredViolation || !!customRulesViolation) && !!(receiptViolations.length || didReceiptScanSucceed) && isPaidGroupPolicy(report); const shouldShowReceiptAudit = !isInvoice && (shouldShowReceiptEmptyState || hasReceipt); - const errors = { - ...(transaction?.errorFields?.route ?? transaction?.errorFields?.waypoints ?? transaction?.errors), - ...parentReportAction?.errors, - }; - + const errorsWithoutReportCreation = useMemo( + () => ({ + ...(transaction?.errorFields?.route ?? transaction?.errorFields?.waypoints ?? transaction?.errors), + ...parentReportAction?.errors, + }), + [transaction, parentReportAction], + ); + const reportCreationError = useMemo(() => (getCreationReportErrors(report) ? getMicroSecondOnyxErrorWithTranslationKey('report.genericCreateReportFailureMessage') : {}), [report]); + const hasOnlyReportCreationError = useMemo(() => isEmptyObject(errorsWithoutReportCreation) && !isEmptyObject(reportCreationError), [errorsWithoutReportCreation, reportCreationError]); + const errors = useMemo(() => ({...errorsWithoutReportCreation, ...reportCreationError}), [errorsWithoutReportCreation, reportCreationError]); const showReceiptErrorWithEmptyState = shouldShowReceiptEmptyState && !hasReceipt && !isEmptyObject(errors); const [showConfirmDismissReceiptError, setShowConfirmDismissReceiptError] = useState(false); @@ -218,10 +222,14 @@ function MoneyRequestReceiptView({ clearAllRelatedReportActionErrors(report.reportID, parentReportAction); return; } + if (hasOnlyReportCreationError) { + navigateToConciergeChatAndDeleteReport(report.reportID, true, true); + return; + } revert(transaction, getLastModifiedExpense(report?.reportID)); clearError(transaction.transactionID); clearAllRelatedReportActionErrors(report.reportID, parentReportAction); - }, [transaction, chatReport, parentReportAction, linkedTransactionID, report?.reportID]); + }, [transaction, chatReport, parentReportAction, linkedTransactionID, report?.reportID, hasOnlyReportCreationError]); let receiptStyle: StyleProp; From 5c599879f77564684da66c660cfddcea051b21e3 Mon Sep 17 00:00:00 2001 From: truph01 Date: Thu, 16 Oct 2025 16:49:13 +0700 Subject: [PATCH 2/7] fix: dismiss modal before deleting and navigating --- src/components/ReportActionItem/MoneyRequestReceiptView.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx index 96bd5b9031b96..15be327b1252f 100644 --- a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx +++ b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx @@ -97,7 +97,7 @@ function MoneyRequestReceiptView({ }: MoneyRequestReceiptViewProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); - const {shouldUseNarrowLayout} = useResponsiveLayout(); + const {shouldUseNarrowLayout, isInNarrowPaneModal} = useResponsiveLayout(); const {getReportRHPActiveRoute} = useActiveRoute(); const parentReportID = report?.parentReportID; const parentReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${parentReportID}`]; @@ -225,6 +225,9 @@ function MoneyRequestReceiptView({ return; } if (hasOnlyReportCreationError) { + if (isInNarrowPaneModal) { + Navigation.goBack(); + } navigateToConciergeChatAndDeleteReport(report.reportID, true, true); return; } From 13239eb06af860c86ab959731eec9e74bd9e7ff6 Mon Sep 17 00:00:00 2001 From: truph01 Date: Fri, 31 Oct 2025 23:12:31 +0700 Subject: [PATCH 3/7] fix: update condition to call delete report and navigate --- .../ReportActionItem/MoneyRequestReceiptView.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx index 9ad6dd798f7ad..373c240a4138f 100644 --- a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx +++ b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx @@ -225,17 +225,18 @@ function MoneyRequestReceiptView({ clearAllRelatedReportActionErrors(report.reportID, parentReportAction); return; } - if (hasOnlyReportCreationError) { + if (!hasOnlyReportCreationError) { + revert(transaction, getLastModifiedExpense(report?.reportID)); + clearError(transaction.transactionID); + clearAllRelatedReportActionErrors(report.reportID, parentReportAction); + } + if (!isEmptyObject(reportCreationError)) { if (isInNarrowPaneModal) { Navigation.goBack(); } navigateToConciergeChatAndDeleteReport(report.reportID, true, true); - return; } - revert(transaction, getLastModifiedExpense(report?.reportID)); - clearError(transaction.transactionID); - clearAllRelatedReportActionErrors(report.reportID, parentReportAction); - }, [transaction, chatReport, parentReportAction, linkedTransactionID, report?.reportID, iouReport, chatIOUReport, isChatIOUReportArchived]); + }, [transaction, chatReport, parentReportAction, linkedTransactionID, report?.reportID, iouReport, chatIOUReport, isChatIOUReportArchived, reportCreationError]); let receiptStyle: StyleProp; From 8f3f9172f8e191d4abf6b9a71a79aab85bb9f0d6 Mon Sep 17 00:00:00 2001 From: truph01 Date: Fri, 31 Oct 2025 23:15:53 +0700 Subject: [PATCH 4/7] fix: remove redundant code --- src/components/ReportActionItem/MoneyRequestReceiptView.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx index 373c240a4138f..3c80036d63e61 100644 --- a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx +++ b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx @@ -197,7 +197,6 @@ function MoneyRequestReceiptView({ [transaction, parentReportAction], ); const reportCreationError = useMemo(() => (getCreationReportErrors(report) ? getMicroSecondOnyxErrorWithTranslationKey('report.genericCreateReportFailureMessage') : {}), [report]); - const hasOnlyReportCreationError = useMemo(() => isEmptyObject(errorsWithoutReportCreation) && !isEmptyObject(reportCreationError), [errorsWithoutReportCreation, reportCreationError]); const errors = useMemo(() => ({...errorsWithoutReportCreation, ...reportCreationError}), [errorsWithoutReportCreation, reportCreationError]); const showReceiptErrorWithEmptyState = shouldShowReceiptEmptyState && !hasReceipt && !isEmptyObject(errors); @@ -225,7 +224,7 @@ function MoneyRequestReceiptView({ clearAllRelatedReportActionErrors(report.reportID, parentReportAction); return; } - if (!hasOnlyReportCreationError) { + if (!isEmptyObject(errorsWithoutReportCreation)) { revert(transaction, getLastModifiedExpense(report?.reportID)); clearError(transaction.transactionID); clearAllRelatedReportActionErrors(report.reportID, parentReportAction); From 0b1d8c905144d22d88daec48f048910832ceea7b Mon Sep 17 00:00:00 2001 From: truph01 Date: Tue, 4 Nov 2025 09:41:36 +0700 Subject: [PATCH 5/7] fix: missing dependencies --- .../ReportActionItem/MoneyRequestReceiptView.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx index 3c80036d63e61..e85696dc26523 100644 --- a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx +++ b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx @@ -235,7 +235,18 @@ function MoneyRequestReceiptView({ } navigateToConciergeChatAndDeleteReport(report.reportID, true, true); } - }, [transaction, chatReport, parentReportAction, linkedTransactionID, report?.reportID, iouReport, chatIOUReport, isChatIOUReportArchived, reportCreationError]); + }, [ + transaction, + chatReport, + parentReportAction, + linkedTransactionID, + report?.reportID, + iouReport, + chatIOUReport, + isChatIOUReportArchived, + errorsWithoutReportCreation, + reportCreationError, + ]); let receiptStyle: StyleProp; From d1d334d7d575d0cc23fb6974266131c7ec1b93ba Mon Sep 17 00:00:00 2001 From: truph01 Date: Tue, 4 Nov 2025 09:56:12 +0700 Subject: [PATCH 6/7] fix: missing dependencies --- src/components/ReportActionItem/MoneyRequestReceiptView.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx index e85696dc26523..11def9557f875 100644 --- a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx +++ b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx @@ -246,6 +246,7 @@ function MoneyRequestReceiptView({ isChatIOUReportArchived, errorsWithoutReportCreation, reportCreationError, + isInNarrowPaneModal, ]); let receiptStyle: StyleProp; From adb9a27adf64bef1b88180dce142a15d8b813e42 Mon Sep 17 00:00:00 2001 From: truph01 Date: Wed, 5 Nov 2025 10:01:11 +0700 Subject: [PATCH 7/7] fix: specify the fields exactly in the dependency --- src/components/ReportActionItem/MoneyRequestReceiptView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx index 11def9557f875..4442c2232eb2e 100644 --- a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx +++ b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx @@ -194,7 +194,7 @@ function MoneyRequestReceiptView({ ...(transaction?.errorFields?.route ?? transaction?.errorFields?.waypoints ?? transaction?.errors), ...parentReportAction?.errors, }), - [transaction, parentReportAction], + [transaction?.errorFields?.route, transaction?.errorFields?.waypoints, transaction?.errors, parentReportAction?.errors], ); const reportCreationError = useMemo(() => (getCreationReportErrors(report) ? getMicroSecondOnyxErrorWithTranslationKey('report.genericCreateReportFailureMessage') : {}), [report]); const errors = useMemo(() => ({...errorsWithoutReportCreation, ...reportCreationError}), [errorsWithoutReportCreation, reportCreationError]);