diff --git a/src/components/KYCWall/BaseKYCWall.tsx b/src/components/KYCWall/BaseKYCWall.tsx index d40d873c0439..a45b59e05d17 100644 --- a/src/components/KYCWall/BaseKYCWall.tsx +++ b/src/components/KYCWall/BaseKYCWall.tsx @@ -3,8 +3,11 @@ import React, {useCallback, useEffect, useImperativeHandle, useRef, useState} fr import {Dimensions} from 'react-native'; import type {EmitterSubscription, View} from 'react-native'; import AddPaymentMethodMenu from '@components/AddPaymentMethodMenu'; +import {usePersonalDetails} from '@components/OnyxListItemProvider'; +import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; +import useParentReportAction from '@hooks/useParentReportAction'; import {openPersonalBankAccountSetupView} from '@libs/actions/BankAccounts'; import {completePaymentOnboarding, savePreferredPaymentMethod} from '@libs/actions/IOU'; import {navigateToBankAccountRoute} from '@libs/actions/ReimbursementAccount'; @@ -63,7 +66,11 @@ function KYCWall({ const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT, {canBeMissing: true}); const {formatPhoneNumber} = useLocalize(); - + const currentUserDetails = useCurrentUserPersonalDetails(); + const currentUserEmail = currentUserDetails.email ?? ''; + const reportPreviewAction = useParentReportAction(iouReport); + const personalDetails = usePersonalDetails(); + const employeeEmail = personalDetails?.[iouReport?.ownerAccountID ?? CONST.DEFAULT_NUMBER_ID]?.login ?? ''; const anchorRef = useRef(null); const transferBalanceButtonRef = useRef(null); @@ -155,7 +162,8 @@ function KYCWall({ return; } - const {policyID, workspaceChatReportID, reportPreviewReportActionID, adminsChatReportID} = createWorkspaceFromIOUPayment(iouReport) ?? {}; + const {policyID, workspaceChatReportID, reportPreviewReportActionID, adminsChatReportID} = + createWorkspaceFromIOUPayment(iouReport, reportPreviewAction, currentUserEmail, employeeEmail) ?? {}; if (policyID && iouReport?.policyID) { savePreferredPaymentMethod(iouReport.policyID, policyID, CONST.LAST_PAYMENT_METHOD.IOU, lastPaymentMethod?.[iouReport?.policyID]); } @@ -200,6 +208,9 @@ function KYCWall({ introSelected, formatPhoneNumber, lastPaymentMethod, + reportPreviewAction, + currentUserEmail, + employeeEmail, ], ); diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index 773126aef45f..b6df6e728fc3 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -119,6 +119,7 @@ import type { PolicyCategories, PolicyCategory, Report, + ReportAction, ReportActions, Request, TaxRatesWithDefault, @@ -3483,7 +3484,12 @@ function buildOptimisticRecentlyUsedCurrencies(currency?: string) { * @returns policyID of the workspace we have created */ // eslint-disable-next-line rulesdir/no-call-actions-from-actions -function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceFromIOUCreationData | undefined { +function createWorkspaceFromIOUPayment( + iouReport: OnyxEntry, + reportPreviewAction: ReportAction | undefined, + currentUserEmail: string, + iouReportOwnerEmail: string, +): WorkspaceFromIOUCreationData | undefined { // This flow only works for IOU reports if (!iouReport || !ReportUtils.isIOUReportUsingReport(iouReport)) { return; @@ -3491,7 +3497,7 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF // Generate new variables for the policy const policyID = generatePolicyID(); - const workspaceName = generateDefaultWorkspaceName(deprecatedSessionEmail); + const workspaceName = generateDefaultWorkspaceName(currentUserEmail); const employeeAccountID = iouReport?.ownerAccountID; const {customUnits, customUnitID, customUnitRateID} = buildOptimisticDistanceRateCustomUnits(iouReport?.currency); const oldPersonalPolicyID = iouReport?.policyID; @@ -3513,10 +3519,8 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF return; } - const employeeEmail = deprecatedAllPersonalDetails?.[employeeAccountID]?.login ?? ''; - // Create the expense chat for the employee whose IOU is being paid - const employeeWorkspaceChat = createPolicyExpenseChats(policyID, {[employeeEmail]: employeeAccountID}, true); + const employeeWorkspaceChat = createPolicyExpenseChats(policyID, {[iouReportOwnerEmail]: employeeAccountID}, true); const newWorkspace = { id: policyID, @@ -3524,7 +3528,7 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF type: CONST.POLICY.TYPE.TEAM, name: workspaceName, role: CONST.POLICY.ROLE.ADMIN, - owner: deprecatedSessionEmail, + owner: currentUserEmail, ownerAccountID: deprecatedSessionAccountID, isPolicyExpenseChatEnabled: true, @@ -3534,7 +3538,7 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF autoReporting: true, autoReportingFrequency: CONST.POLICY.AUTO_REPORTING_FREQUENCIES.IMMEDIATE, approvalMode: CONST.POLICY.APPROVAL_MODE.BASIC, - approver: deprecatedSessionEmail, + approver: currentUserEmail, harvesting: { enabled: false, }, @@ -3548,17 +3552,17 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF areConnectionsEnabled: false, areExpensifyCardsEnabled: false, employeeList: { - [deprecatedSessionEmail]: { - email: deprecatedSessionEmail, - submitsTo: deprecatedSessionEmail, + [currentUserEmail]: { + email: currentUserEmail, + submitsTo: currentUserEmail, role: CONST.POLICY.ROLE.ADMIN, errors: {}, }, - ...(employeeEmail + ...(iouReportOwnerEmail ? { - [employeeEmail]: { - email: employeeEmail, - submitsTo: deprecatedSessionEmail, + [iouReportOwnerEmail]: { + email: iouReportOwnerEmail, + submitsTo: currentUserEmail, role: CONST.POLICY.ROLE.USER, errors: {}, }, @@ -3741,9 +3745,9 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF // optimistically create the expense chat for them. const memberData = { accountID: Number(employeeAccountID), - email: employeeEmail, - workspaceChatReportID: employeeWorkspaceChat.reportCreationData[employeeEmail].reportID, - workspaceChatCreatedReportActionID: employeeWorkspaceChat.reportCreationData[employeeEmail].reportActionID, + email: iouReportOwnerEmail, + workspaceChatReportID: employeeWorkspaceChat.reportCreationData[iouReportOwnerEmail].reportID, + workspaceChatCreatedReportActionID: employeeWorkspaceChat.reportCreationData[iouReportOwnerEmail].reportActionID, }; const oldChatReportID = iouReport?.chatReportID; @@ -3800,21 +3804,16 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF value: transactionFailureData, }); - // We need to move the report preview action from the DM to the expense chat. - const parentReport = deprecatedAllReportActions?.[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${iouReport?.parentReportID}`]; - const parentReportActionID = iouReport?.parentReportActionID; - const reportPreview = iouReport?.parentReportID && parentReportActionID ? parentReport?.[parentReportActionID] : undefined; - - if (reportPreview?.reportActionID) { + if (reportPreviewAction?.reportActionID) { optimisticData.push({ onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${oldChatReportID}`, - value: {[reportPreview.reportActionID]: null}, + value: {[reportPreviewAction.reportActionID]: null}, }); failureData.push({ onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${oldChatReportID}`, - value: {[reportPreview.reportActionID]: reportPreview}, + value: {[reportPreviewAction.reportActionID]: reportPreviewAction}, }); } @@ -3834,14 +3833,14 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF }, }); - if (reportPreview?.reportActionID) { + if (reportPreviewAction?.reportActionID) { // Update the created timestamp of the report preview action to be after the expense chat created timestamp. optimisticData.push({ onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${memberData.workspaceChatReportID}`, value: { - [reportPreview.reportActionID]: { - ...reportPreview, + [reportPreviewAction.reportActionID]: { + ...reportPreviewAction, message: [ { type: CONST.REPORT.MESSAGE.TYPE.TEXT, @@ -3855,7 +3854,7 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF failureData.push({ onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${memberData.workspaceChatReportID}`, - value: {[reportPreview.reportActionID]: null}, + value: {[reportPreviewAction.reportActionID]: null}, }); } @@ -3949,7 +3948,7 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF API.write(WRITE_COMMANDS.CREATE_WORKSPACE_FROM_IOU_PAYMENT, params, {optimisticData, successData, failureData}); - return {policyID, workspaceChatReportID: memberData.workspaceChatReportID, reportPreviewReportActionID: reportPreview?.reportActionID, adminsChatReportID}; + return {policyID, workspaceChatReportID: memberData.workspaceChatReportID, reportPreviewReportActionID: reportPreviewAction?.reportActionID, adminsChatReportID}; } function enablePolicyConnections(policyID: string, enabled: boolean) {