From 5326a6fb962cf837f9eaabbbeccd044de2f8996f Mon Sep 17 00:00:00 2001 From: Jan Nowakowski Date: Mon, 7 Apr 2025 12:19:23 +0200 Subject: [PATCH 01/42] Add report preview actions to new preview component --- .../MoneyRequestReportPreviewContent.tsx | 187 ++++++++++-------- 1 file changed, 100 insertions(+), 87 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx index 6f11b89f10a6e..7e0eb9db6fc67 100644 --- a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx +++ b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx @@ -28,10 +28,12 @@ import useThemeStyles from '@hooks/useThemeStyles'; import ControlSelection from '@libs/ControlSelection'; import {convertToDisplayString} from '@libs/CurrencyUtils'; import {canUseTouchScreen} from '@libs/DeviceCapabilities'; +import Navigation from '@libs/Navigation/Navigation'; +import Performance from '@libs/Performance'; import {getConnectedIntegration} from '@libs/PolicyUtils'; +import getReportPreviewAction from '@libs/ReportPreviewActionUtils'; import { areAllRequestsBeingSmartScanned as areAllRequestsBeingSmartScannedReportUtils, - canBeExported, getBankAccountRoute, getDisplayNameForParticipant, getInvoicePayerName, @@ -50,7 +52,6 @@ import { hasUpdatedTotal, hasViolations, hasWarningTypeViolations, - isAllowedToApproveExpenseReport, isAllowedToSubmitDraftExpenseReport, isInvoiceReport as isInvoiceReportUtils, isInvoiceRoom as isInvoiceRoomReportUtils, @@ -61,18 +62,11 @@ import { isTripRoom as isTripRoomReportUtils, isWaitingForSubmissionFromCurrentUser as isWaitingForSubmissionFromCurrentUserReportUtils, } from '@libs/ReportUtils'; -import { - getMerchant, - hasPendingUI, - isCardTransaction, - isPartialMerchant, - isPending, - isReceiptBeingScanned, - shouldShowBrokenConnectionViolationForMultipleTransactions, -} from '@libs/TransactionUtils'; +import {getMerchant, hasPendingUI, isCardTransaction, isPartialMerchant, isPending, isReceiptBeingScanned} from '@libs/TransactionUtils'; import colors from '@styles/theme/colors'; import variables from '@styles/variables'; -import {approveMoneyRequest, canApproveIOU, canIOUBePaid as canIOUBePaidIOUActions, canSubmitReport, payInvoice, payMoneyRequest, submitReport} from '@userActions/IOU'; +import {approveMoneyRequest, canIOUBePaid as canIOUBePaidIOUActions, canSubmitReport, payInvoice, payMoneyRequest, submitReport} from '@userActions/IOU'; +import Timing from '@userActions/Timing'; import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; import ROUTES from '@src/ROUTES'; @@ -117,7 +111,6 @@ function MoneyRequestReportPreviewContent({ reportPreviewStyles, }: MoneyRequestReportPreviewContentProps) { const lastTransaction = transactions?.at(0); - const transactionIDList = transactions?.map((reportTransaction) => reportTransaction.transactionID) ?? []; const theme = useTheme(); const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); @@ -151,12 +144,8 @@ function MoneyRequestReportPreviewContent({ ); const canIOUBePaid = useMemo(() => getCanIOUBePaid(), [getCanIOUBePaid]); - const canIOUBePaidAndApproved = useMemo(() => getCanIOUBePaid(false, false), [getCanIOUBePaid]); const onlyShowPayElsewhere = useMemo(() => !canIOUBePaid && getCanIOUBePaid(true), [canIOUBePaid, getCanIOUBePaid]); const shouldShowPayButton = isPaidAnimationRunning || canIOUBePaid || onlyShowPayElsewhere; - const shouldShowApproveButton = useMemo(() => canApproveIOU(iouReport, policy), [iouReport, policy]) || isApprovedAnimationRunning; - - const shouldDisableApproveButton = shouldShowApproveButton && !isAllowedToApproveExpenseReport(iouReport); const {nonHeldAmount, fullAmount, hasValidNonHeldAmount} = getNonHeldAndFullAmount(iouReport, shouldShowPayButton); const hasOnlyHeldExpenses = hasOnlyHeldExpensesReportUtils(iouReport?.reportID); @@ -195,14 +184,12 @@ function MoneyRequestReportPreviewContent({ (isReportOwner(iouReport) && hasReportViolations(iouReportID)) || hasActionsWithErrors(iouReportID); const showRTERViolationMessage = numberOfRequests === 1 && hasPendingUI(lastTransaction, lastTransactionViolations); - const shouldShowBrokenConnectionViolation = numberOfRequests === 1 && shouldShowBrokenConnectionViolationForMultipleTransactions(transactionIDList, iouReport, policy, violations); let formattedMerchant = numberOfRequests === 1 ? getMerchant(lastTransaction) : undefined; if (isPartialMerchant(formattedMerchant ?? '')) { formattedMerchant = undefined; } - const isAdmin = policy?.role === CONST.POLICY.ROLE.ADMIN; const filteredTransactions = transactions?.filter((transaction) => transaction) ?? []; const shouldShowSubmitButton = canSubmitReport(iouReport, policy, filteredTransactions, violations); const shouldDisableSubmitButton = shouldShowSubmitButton && !isAllowedToSubmitDraftExpenseReport(iouReport); @@ -314,8 +301,6 @@ function MoneyRequestReportPreviewContent({ const bankAccountRoute = getBankAccountRoute(chatReport); - const shouldShowSettlementButton = !shouldShowSubmitButton && (shouldShowPayButton || shouldShowApproveButton) && !showRTERViolationMessage && !shouldShowBrokenConnectionViolation; - const shouldShowRBR = hasErrors && !iouSettled; /* @@ -345,7 +330,6 @@ function MoneyRequestReportPreviewContent({ * Manual export */ const connectedIntegration = getConnectedIntegration(policy); - const shouldShowExportIntegrationButton = !shouldShowPayButton && !shouldShowSubmitButton && connectedIntegration && isAdmin && canBeExported(iouReport); useEffect(() => { if (!isPaidAnimationRunning || isApprovedAnimationRunning) { @@ -437,6 +421,99 @@ function MoneyRequestReportPreviewContent({ /> ); + const openReportFromPreview = useCallback(() => { + if (!iouReportID) { + return; + } + Performance.markStart(CONST.TIMING.OPEN_REPORT_FROM_PREVIEW); + Timing.start(CONST.TIMING.OPEN_REPORT_FROM_PREVIEW); + Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(iouReportID)); + }, [iouReportID]); + + const reportPreviewAction = useMemo(() => { + return getReportPreviewAction(violations, iouReport, policy, transactions); + }, [iouReport, policy, violations, transactions]); + + const reportPreviewActions = { + [CONST.REPORT.REPORT_PREVIEW_ACTIONS.SUBMIT]: ( +