diff --git a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx index e9b6e26842c3..303d67e8ad5c 100644 --- a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx +++ b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx @@ -54,6 +54,7 @@ import { generateReportID, getReportOrDraftReport, hasViolations as hasViolationsReportUtils, + isMoneyRequestReport, isProcessingReport, isReportOutstanding, isSelectedManagerMcTest, @@ -527,6 +528,41 @@ function IOURequestStepConfirmation({ }); }, [requestType, iouType, initialTransactionID, reportID, action, report, transactions, participants]); + const policyParams = useMemo( + () => ({ + policy, + policyTagList: policyTags, + policyCategories, + policyRecentlyUsedCategories, + }), + [policy, policyTags, policyCategories, policyRecentlyUsedCategories], + ); + + const emptyPolicyParams = useMemo(() => ({}), []); + + const getMoneyRequestContextForParticipant = useCallback( + (participant: Participant | undefined) => { + const isWorkspaceTarget = !!participant?.isPolicyExpenseChat; + const workspaceChatReport = isWorkspaceTarget && participant?.reportID ? getReportOrDraftReport(participant.reportID) : undefined; + return { + parentChatReport: isWorkspaceTarget ? workspaceChatReport : undefined, + policyParams: isWorkspaceTarget ? policyParams : emptyPolicyParams, + }; + }, + [policyParams, emptyPolicyParams], + ); + + const getReportToUseAndBackToReport = useCallback( + (participant: Participant | undefined, parentChatReport: Report | undefined, reportParam: Report | undefined, backToReportParam: string | undefined) => { + const reportToUse = participant?.isPolicyExpenseChat ? parentChatReport : undefined; + + const backToReportToUse = backToReportParam ?? (isMoneyRequestReport(reportParam) ? reportParam?.reportID : undefined); + + return {reportToUse, backToReportToUse}; + }, + [], + ); + const requestMoney = useCallback( (selectedParticipants: Participant[], gpsPoint?: GpsPoint) => { if (!transactions.length) { @@ -538,6 +574,9 @@ function IOURequestStepConfirmation({ return; } + const {parentChatReport, policyParams: contextPolicyParams} = getMoneyRequestContextForParticipant(participant); + const {reportToUse, backToReportToUse} = getReportToUseAndBackToReport(participant, parentChatReport, report, backToReport); + const optimisticChatReportID = generateReportID(); const optimisticCreatedReportActionID = rand64(); const optimisticReportPreviewActionID = rand64(); @@ -556,7 +595,7 @@ function IOURequestStepConfirmation({ } const {iouReport} = requestMoneyIOUActions({ - report, + report: reportToUse, existingIOUReport, optimisticChatReportID, optimisticCreatedReportActionID, @@ -566,12 +605,7 @@ function IOURequestStepConfirmation({ payeeAccountID: currentUserPersonalDetails.accountID, participant, }, - policyParams: { - policy, - policyTagList: policyTags, - policyCategories, - policyRecentlyUsedCategories, - }, + policyParams: contextPolicyParams, gpsPoint, action, transactionParams: { @@ -600,7 +634,7 @@ function IOURequestStepConfirmation({ }, shouldHandleNavigation: index === transactions.length - 1, shouldGenerateTransactionThreadReport, - backToReport, + backToReport: backToReportToUse, isASAPSubmitBetaEnabled, currentUserAccountIDParam: currentUserPersonalDetails.accountID, currentUserEmailParam: currentUserPersonalDetails.login ?? '', @@ -700,12 +734,15 @@ function IOURequestStepConfirmation({ if (!participant) { return; } + const {parentChatReport, policyParams: contextPolicyParams} = getMoneyRequestContextForParticipant(participant); + const {reportToUse} = getReportToUseAndBackToReport(participant, parentChatReport, report, backToReport); + for (const [index, item] of transactions.entries()) { const isLinkedTrackedExpenseReportArchived = !!item.linkedTrackedExpenseReportID && archivedReportsIdSet.has(`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${item.linkedTrackedExpenseReportID}`); trackExpenseIOUActions({ - report, + report: reportToUse, isDraftPolicy, action, participantParams: { @@ -713,11 +750,7 @@ function IOURequestStepConfirmation({ payeeAccountID: currentUserPersonalDetails.accountID, participant, }, - policyParams: { - policy, - policyCategories, - policyTagList: policyTags, - }, + policyParams: contextPolicyParams, transactionParams: { amount: item.amount, distance: isManualDistanceRequest ? (item.comment?.customUnit?.quantity ?? undefined) : undefined, @@ -774,19 +807,23 @@ function IOURequestStepConfirmation({ if (!transaction) { return; } + + const participant = selectedParticipants.at(0); + if (!participant) { + return; + } + + const {parentChatReport, policyParams: contextPolicyParams} = getMoneyRequestContextForParticipant(participant); + const {reportToUse, backToReportToUse} = getReportToUseAndBackToReport(participant, parentChatReport, report, backToReport); + createDistanceRequestIOUActions({ - report, + report: reportToUse, participants: selectedParticipants, currentUserLogin: currentUserPersonalDetails.login, currentUserAccountID: currentUserPersonalDetails.accountID, iouType, existingTransaction: transaction, - policyParams: { - policy, - policyCategories, - policyTagList: policyTags, - policyRecentlyUsedCategories, - }, + policyParams: contextPolicyParams, transactionParams: { amount: transaction.amount, comment: trimmedComment, @@ -806,7 +843,7 @@ function IOURequestStepConfirmation({ attendees: transaction.comment?.attendees, receipt: isManualDistanceRequest ? receiptFiles[transaction.transactionID] : undefined, }, - backToReport, + backToReport: backToReportToUse, isASAPSubmitBetaEnabled, transactionViolations, });