diff --git a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx index 8878fcd57b2bb..4442c2232eb2e 100644 --- a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx +++ b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx @@ -15,7 +15,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'; @@ -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}`]; @@ -108,7 +108,6 @@ function MoneyRequestReceiptView({ }); const [isLoading, setIsLoading] = useState(true); - const parentReportAction = report?.parentReportActionID ? parentReportActions?.[report.parentReportActionID] : undefined; const {iouReport, chatReport: chatIOUReport, isChatIOUReportArchived} = useGetIOUReportFromReportAction(parentReportAction); const isTrackExpense = isTrackExpenseReport(report); @@ -190,11 +189,15 @@ 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?.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]); const showReceiptErrorWithEmptyState = shouldShowReceiptEmptyState && !hasReceipt && !isEmptyObject(errors); const [showConfirmDismissReceiptError, setShowConfirmDismissReceiptError] = useState(false); @@ -221,10 +224,30 @@ function MoneyRequestReceiptView({ clearAllRelatedReportActionErrors(report.reportID, parentReportAction); return; } - revert(transaction, getLastModifiedExpense(report?.reportID)); - clearError(transaction.transactionID); - clearAllRelatedReportActionErrors(report.reportID, parentReportAction); - }, [transaction, chatReport, parentReportAction, linkedTransactionID, report?.reportID, iouReport, chatIOUReport, isChatIOUReportArchived]); + if (!isEmptyObject(errorsWithoutReportCreation)) { + revert(transaction, getLastModifiedExpense(report?.reportID)); + clearError(transaction.transactionID); + clearAllRelatedReportActionErrors(report.reportID, parentReportAction); + } + if (!isEmptyObject(reportCreationError)) { + if (isInNarrowPaneModal) { + Navigation.goBack(); + } + navigateToConciergeChatAndDeleteReport(report.reportID, true, true); + } + }, [ + transaction, + chatReport, + parentReportAction, + linkedTransactionID, + report?.reportID, + iouReport, + chatIOUReport, + isChatIOUReportArchived, + errorsWithoutReportCreation, + reportCreationError, + isInNarrowPaneModal, + ]); let receiptStyle: StyleProp;