diff --git a/src/CONST.ts b/src/CONST.ts
index de902931ffd8..be29aef15ebf 100755
--- a/src/CONST.ts
+++ b/src/CONST.ts
@@ -1331,6 +1331,8 @@ const CONST = {
SPECIAL_CHAR: /[,/?"{}[\]()&^%;`$=#<>!*]/g,
+ FIRST_SPACE: /.+?(?=\s)/,
+
get SPECIAL_CHAR_OR_EMOJI() {
return new RegExp(`[~\\n\\s]|(_\\b(?!$))|${this.SPECIAL_CHAR.source}|${this.EMOJI.source}`, 'gu');
},
diff --git a/src/components/ReportActionItem/MoneyRequestPreview.js b/src/components/ReportActionItem/MoneyRequestPreview.js
index 3d696747de3d..f05f678eb6ed 100644
--- a/src/components/ReportActionItem/MoneyRequestPreview.js
+++ b/src/components/ReportActionItem/MoneyRequestPreview.js
@@ -175,6 +175,8 @@ function MoneyRequestPreview(props) {
const receiptImages = hasReceipt ? [ReceiptUtils.getThumbnailAndImageURIs(props.transaction)] : [];
+ const hasPendingWaypoints = lodashGet(props.transaction, 'pendingFields.waypoints', null);
+
const getSettledMessage = () => {
if (isExpensifyCardTransaction) {
return props.translate('common.done');
@@ -223,7 +225,7 @@ function MoneyRequestPreview(props) {
const getDisplayAmountText = () => {
if (isDistanceRequest) {
- return requestAmount ? CurrencyUtils.convertToDisplayString(requestAmount, props.transaction.currency) : props.translate('common.tbd');
+ return requestAmount && !hasPendingWaypoints ? CurrencyUtils.convertToDisplayString(requestAmount, props.transaction.currency) : props.translate('common.tbd');
}
if (isScanning) {
@@ -319,7 +321,9 @@ function MoneyRequestPreview(props) {
{shouldShowMerchant && (
- {requestMerchant}
+
+ {hasPendingWaypoints ? requestMerchant.replace(CONST.REGEX.FIRST_SPACE, props.translate('common.tbd')) : requestMerchant}
+
)}
diff --git a/src/components/ReportActionItem/MoneyRequestView.js b/src/components/ReportActionItem/MoneyRequestView.js
index aa1813fa6e4d..7c5ffe88ef0a 100644
--- a/src/components/ReportActionItem/MoneyRequestView.js
+++ b/src/components/ReportActionItem/MoneyRequestView.js
@@ -99,7 +99,8 @@ function MoneyRequestView({report, betas, parentReport, policyCategories, should
transactionMerchant === '' || transactionMerchant === CONST.TRANSACTION.UNKNOWN_MERCHANT || transactionMerchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT;
const isDistanceRequest = TransactionUtils.isDistanceRequest(transaction);
let formattedTransactionAmount = transactionAmount ? CurrencyUtils.convertToDisplayString(transactionAmount, transactionCurrency) : '';
- if (isDistanceRequest && !formattedTransactionAmount) {
+ const hasPendingWaypoints = lodashGet(transaction, 'pendingFields.waypoints', null);
+ if (isDistanceRequest && (!formattedTransactionAmount || hasPendingWaypoints)) {
formattedTransactionAmount = translate('common.tbd');
}
const formattedOriginalAmount = transactionOriginalAmount && transactionOriginalCurrency && CurrencyUtils.convertToDisplayString(transactionOriginalAmount, transactionOriginalCurrency);
@@ -206,7 +207,7 @@ function MoneyRequestView({report, betas, parentReport, policyCategories, should
ReceiptUtils.getThumbnailAndImageURIs(transaction));
const hasNonReimbursableTransactions = ReportUtils.hasNonReimbursableTransactions(props.iouReportID);
- const hasOnlyOneReceiptRequest = numberOfRequests === 1 && hasReceipts;
- const previewSubtitle = hasOnlyOneReceiptRequest
- ? TransactionUtils.getMerchant(transactionsWithReceipts[0])
- : props.translate('iou.requestCount', {
- count: numberOfRequests,
- scanningReceipts: numberOfScanningReceipts,
- });
+ let formattedMerchant = numberOfRequests === 1 && hasReceipts ? TransactionUtils.getMerchant(transactionsWithReceipts[0]) : null;
+ const hasPendingWaypoints = formattedMerchant && hasOnlyDistanceRequests && _.every(transactionsWithReceipts, (transaction) => lodashGet(transaction, 'pendingFields.waypoints', null));
+ if (hasPendingWaypoints) {
+ formattedMerchant = formattedMerchant.replace(CONST.REGEX.FIRST_SPACE, props.translate('common.tbd'));
+ }
+ const previewSubtitle =
+ formattedMerchant ||
+ props.translate('iou.requestCount', {
+ count: numberOfRequests,
+ scanningReceipts: numberOfScanningReceipts,
+ });
const shouldShowSubmitButton = isReportDraft && reimbursableSpend !== 0;
const getDisplayAmount = () => {
+ if (hasPendingWaypoints) {
+ return props.translate('common.tbd');
+ }
if (totalDisplaySpend) {
return CurrencyUtils.convertToDisplayString(totalDisplaySpend, props.iouReport.currency);
}
diff --git a/src/libs/ReceiptUtils.ts b/src/libs/ReceiptUtils.ts
index 38b4823d54c6..5ee177b8f831 100644
--- a/src/libs/ReceiptUtils.ts
+++ b/src/libs/ReceiptUtils.ts
@@ -36,17 +36,19 @@ function getThumbnailAndImageURIs(transaction: Transaction, receiptPath: string
const hasEReceipt = transaction?.hasEReceipt;
- if (hasEReceipt) {
- return {thumbnail: null, image: ROUTES.ERECEIPT.getRoute(transaction.transactionID), transaction};
- }
+ if (!Object.hasOwn(transaction?.pendingFields ?? {}, 'waypoints')) {
+ if (hasEReceipt) {
+ return {thumbnail: null, image: ROUTES.ERECEIPT.getRoute(transaction.transactionID), transaction};
+ }
- // For local files, we won't have a thumbnail yet
- if (isReceiptImage && (path.startsWith('blob:') || path.startsWith('file:'))) {
- return {thumbnail: null, image: path};
- }
+ // For local files, we won't have a thumbnail yet
+ if (isReceiptImage && (path.startsWith('blob:') || path.startsWith('file:'))) {
+ return {thumbnail: null, image: path};
+ }
- if (isReceiptImage) {
- return {thumbnail: `${path}.1024.jpg`, image: path};
+ if (isReceiptImage) {
+ return {thumbnail: `${path}.1024.jpg`, image: path};
+ }
}
const {fileExtension} = FileUtils.splitExtensionFromFileName(filename) as FileNameAndExtension;