diff --git a/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx b/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx index 964f9250f033..06ab0d0e98b9 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx +++ b/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx @@ -142,7 +142,7 @@ function MoneyRequestPreviewContent({ merchant, tag, category, - } = useMemo>(() => getTransactionDetails(transaction) ?? {}, [transaction]); + } = useMemo>(() => getTransactionDetails(transaction, undefined, policy) ?? {}, [transaction, policy]); const description = truncate(StringUtils.lineBreaksToSpaces(Parser.htmlToText(requestComment ?? '')), {length: CONST.REQUEST_PREVIEW.MAX_LENGTH}); const requestMerchant = truncate(merchant, {length: CONST.REQUEST_PREVIEW.MAX_LENGTH}); diff --git a/src/components/ReportActionItem/ReportPreview.tsx b/src/components/ReportActionItem/ReportPreview.tsx index 8abb8b93a58f..a3f16350e5b2 100644 --- a/src/components/ReportActionItem/ReportPreview.tsx +++ b/src/components/ReportActionItem/ReportPreview.tsx @@ -248,7 +248,7 @@ function ReportPreview({ const lastTransactionViolations = useTransactionViolations(lastTransaction?.transactionID); const showRTERViolationMessage = numberOfRequests === 1 && hasPendingUI(lastTransaction, lastTransactionViolations); const shouldShowBrokenConnectionViolation = numberOfRequests === 1 && shouldShowBrokenConnectionViolationForMultipleTransactions(transactionIDList, iouReport, policy, violations); - let formattedMerchant = numberOfRequests === 1 ? getMerchant(lastTransaction) : null; + let formattedMerchant = numberOfRequests === 1 ? getMerchant(lastTransaction, policy) : null; const formattedDescription = numberOfRequests === 1 ? Parser.htmlToMarkdown(getDescription(lastTransaction)) : null; if (isPartialMerchant(formattedMerchant ?? '')) { diff --git a/src/components/ReportActionItem/TransactionPreview/TransactionPreviewContent.tsx b/src/components/ReportActionItem/TransactionPreview/TransactionPreviewContent.tsx index 5b1f80c676e2..16e33d7f551c 100644 --- a/src/components/ReportActionItem/TransactionPreview/TransactionPreviewContent.tsx +++ b/src/components/ReportActionItem/TransactionPreview/TransactionPreviewContent.tsx @@ -11,6 +11,7 @@ import UserInfoCellsWithArrow from '@components/SelectionList/Search/UserInfoCel import Text from '@components/Text'; import TransactionPreviewSkeletonView from '@components/TransactionPreviewSkeletonView'; import useLocalize from '@hooks/useLocalize'; +import useOnyx from '@hooks/useOnyx'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import {convertToDisplayString} from '@libs/CurrencyUtils'; @@ -29,6 +30,7 @@ import {hasReceipt as hasReceiptTransactionUtils, isReceiptBeingScanned} from '@ import ViolationsUtils from '@libs/Violations/ViolationsUtils'; import variables from '@styles/variables'; import CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; import type {TransactionPreviewContentProps} from './types'; function TransactionPreviewContent({ @@ -55,7 +57,8 @@ function TransactionPreviewContent({ const styles = useThemeStyles(); const {translate} = useLocalize(); - const transactionDetails = useMemo>(() => getTransactionDetails(transaction) ?? {}, [transaction]); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${iouReport?.policyID}`, {canBeMissing: true}); + const transactionDetails = useMemo>(() => getTransactionDetails(transaction, undefined, policy) ?? {}, [transaction, policy]); const managerID = iouReport?.managerID ?? reportPreviewAction?.childManagerAccountID ?? CONST.DEFAULT_NUMBER_ID; const ownerAccountID = iouReport?.ownerAccountID ?? reportPreviewAction?.childOwnerAccountID ?? CONST.DEFAULT_NUMBER_ID; const isReportAPolicyExpenseChat = isPolicyExpenseChat(chatReport); diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index b2286d3a72ab..9c2548a6694e 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -231,7 +231,6 @@ import { getTag, getTaxAmount, getTaxCode, - getTransaction, getAmount as getTransactionAmount, getWaypoints, hasMissingSmartscanFields as hasMissingSmartscanFieldsTransactionUtils, @@ -2379,7 +2378,7 @@ function canDeleteTransaction(moneyRequestReport: OnyxEntry): boolean { * Checks whether the card transaction support deleting based on liability type */ function canDeleteCardTransactionByLiabilityType(iouTransactionID?: string): boolean { - const transaction = getTransaction(iouTransactionID ?? CONST.DEFAULT_NUMBER_ID); + const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${iouTransactionID}`]; const isCardTransaction = isCardTransactionTransactionUtils(transaction); if (!isCardTransaction) { return true; @@ -3715,7 +3714,11 @@ function getMoneyRequestReportName({ * into a flat object. Used for displaying transactions and sending them in API commands */ -function getTransactionDetails(transaction: OnyxInputOrEntry, createdDateFormat: string = CONST.DATE.FNS_FORMAT_STRING): TransactionDetails | undefined { +function getTransactionDetails( + transaction: OnyxInputOrEntry, + createdDateFormat: string = CONST.DATE.FNS_FORMAT_STRING, + policy: OnyxEntry = undefined, +): TransactionDetails | undefined { if (!transaction) { return; } @@ -3728,7 +3731,7 @@ function getTransactionDetails(transaction: OnyxInputOrEntry, creat taxCode: getTaxCode(transaction), currency: getCurrency(transaction), comment: getDescription(transaction), - merchant: getMerchant(transaction), + merchant: getMerchant(transaction, policy), waypoints: getWaypoints(transaction), customUnitRateID: getRateID(transaction), category: getCategory(transaction), diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts index af76f63264d7..711c7de0023d 100644 --- a/src/libs/SearchUIUtils.ts +++ b/src/libs/SearchUIUtils.ts @@ -134,6 +134,7 @@ function getTransactionItemCommonFormattedProperties( transactionItem: SearchTransaction, from: SearchPersonalDetails, to: SearchPersonalDetails, + policy: SearchPolicy, ): Pick { const isExpenseReport = transactionItem.reportType === CONST.REPORT.TYPE.EXPENSE; @@ -143,7 +144,7 @@ function getTransactionItemCommonFormattedProperties( const formattedTo = formatPhoneNumber(getDisplayNameOrDefault(to, '', false) || getDisplayNameOrDefault(getPersonalDetailsForAccountID(to?.accountID))); const formattedTotal = getTransactionAmount(transactionItem, isExpenseReport); const date = transactionItem?.modifiedCreated ? transactionItem.modifiedCreated : transactionItem?.created; - const merchant = getTransactionMerchant(transactionItem); + const merchant = getTransactionMerchant(transactionItem, policy as OnyxTypes.Policy); const formattedMerchant = merchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT ? '' : merchant; return { @@ -323,10 +324,11 @@ function getTransactionsSections(data: OnyxTypes.SearchResults['data'], metadata const transactionItem = data[key]; const report = data[`${ONYXKEYS.COLLECTION.REPORT}${transactionItem.reportID}`]; const shouldShowBlankTo = isOpenExpenseReport(report); + const policy = data[`${ONYXKEYS.COLLECTION.POLICY}${report?.policyID}`]; const from = data.personalDetailsList?.[transactionItem.accountID]; const to = transactionItem.managerID && !shouldShowBlankTo ? data.personalDetailsList?.[transactionItem.managerID] : emptyPersonalDetails; - const {formattedFrom, formattedTo, formattedTotal, formattedMerchant, date} = getTransactionItemCommonFormattedProperties(transactionItem, from, to); + const {formattedFrom, formattedTo, formattedTotal, formattedMerchant, date} = getTransactionItemCommonFormattedProperties(transactionItem, from, to, policy); return { ...transactionItem, @@ -598,12 +600,13 @@ function getReportSections(data: OnyxTypes.SearchResults['data'], metadata: Onyx const transactionItem = {...data[key]}; const reportKey = `${ONYXKEYS.COLLECTION.REPORT}${transactionItem.reportID}`; const report = data[`${ONYXKEYS.COLLECTION.REPORT}${transactionItem.reportID}`]; + const policy = data[`${ONYXKEYS.COLLECTION.POLICY}${report?.policyID}`]; const shouldShowBlankTo = isOpenExpenseReport(report); const from = data.personalDetailsList?.[transactionItem.accountID]; const to = transactionItem.managerID && !shouldShowBlankTo ? data.personalDetailsList?.[transactionItem.managerID] : emptyPersonalDetails; - const {formattedFrom, formattedTo, formattedTotal, formattedMerchant, date} = getTransactionItemCommonFormattedProperties(transactionItem, from, to); + const {formattedFrom, formattedTo, formattedTotal, formattedMerchant, date} = getTransactionItemCommonFormattedProperties(transactionItem, from, to, policy); const transaction = { ...transactionItem, diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index c09622992648..beba9b35c280 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -649,10 +649,10 @@ function isFetchingWaypointsFromServer(transaction: OnyxInputOrEntry): string { +function getMerchant(transaction: OnyxInputOrEntry, policyParam: OnyxEntry = undefined): string { if (transaction && isDistanceRequest(transaction)) { const report = getReportOrDraftReport(transaction.reportID); - const policy = getPolicy(report?.policyID); + const policy = policyParam ?? getPolicy(report?.policyID); const mileageRate = DistanceRequestUtils.getRate({transaction, policy}); const {unit, rate} = mileageRate; const distanceInMeters = getDistanceInMeters(transaction, unit); @@ -837,7 +837,7 @@ function hasMissingSmartscanFields(transaction: OnyxInputOrEntry): * Get all transaction violations of the transaction with given transactionID. */ function getTransactionViolations(transactionID: string | undefined, transactionViolations: OnyxCollection | undefined): TransactionViolations | undefined { - const transaction = getTransaction(transactionID); + const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`]; if (!transactionID || !transactionViolations) { return undefined; } @@ -1030,7 +1030,7 @@ function getRecentTransactions(transactions: Record, size = 2): * @param checkDismissed - whether to check if the violation has already been dismissed as well */ function isDuplicate(transactionID: string | undefined, checkDismissed = false): boolean { - const transaction = getTransaction(transactionID); + const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`]; if (!transaction) { return false; } @@ -1120,7 +1120,7 @@ function hasDuplicateTransactions(iouReportID?: string, allReportTransactions?: * Checks if any violations for the provided transaction are of type 'notice' */ function hasNoticeTypeViolation(transactionID: string | undefined, transactionViolations: TransactionViolation[] | OnyxCollection, showInReview?: boolean): boolean { - const transaction = getTransaction(transactionID); + const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`]; if (!doesTransactionSupportViolations(transaction)) { return false; } @@ -1138,7 +1138,7 @@ function hasNoticeTypeViolation(transactionID: string | undefined, transactionVi * Checks if any violations for the provided transaction are of type 'warning' */ function hasWarningTypeViolation(transactionID: string | undefined, transactionViolations: TransactionViolation[] | OnyxCollection, showInReview?: boolean): boolean { - const transaction = getTransaction(transactionID); + const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`]; if (!doesTransactionSupportViolations(transaction)) { return false; } @@ -1328,7 +1328,7 @@ function compareDuplicateTransactionFields( } const transactionViolations = allTransactionViolations?.[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${reviewingTransactionID}`]; const duplicates = transactionViolations?.find((violation) => violation.name === CONST.VIOLATIONS.DUPLICATED_TRANSACTION)?.data?.duplicates ?? []; - const transactions = removeSettledAndApprovedTransactions([reviewingTransactionID, ...duplicates]).map((item) => getTransaction(item)); + const transactions = removeSettledAndApprovedTransactions([reviewingTransactionID, ...duplicates]).map((item) => allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${item}`]); const fieldsToCompare: FieldsToCompare = { merchant: ['modifiedMerchant', 'merchant'],