From f0eed42ce7e9354c96afa0c02f8a6596106c909b Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Fri, 4 Apr 2025 15:53:58 +0700 Subject: [PATCH 1/6] Remove the X pending --- .../MoneyRequestReportPreviewContent.tsx | 2 -- src/components/ReportActionItem/ReportPreview.tsx | 2 -- src/languages/en.ts | 14 +++----------- src/languages/es.ts | 14 +++----------- src/languages/params.ts | 6 ------ 5 files changed, 6 insertions(+), 32 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx index 6f11b89f10a6..4b4fb2fe0f80 100644 --- a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx +++ b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx @@ -334,8 +334,6 @@ function MoneyRequestReportPreviewContent({ } return { supportText: translate('iou.expenseCount', { - scanningReceipts: numberOfScanningReceipts, - pendingReceipts: numberOfPendingRequests, count: numberOfRequests, }), }; diff --git a/src/components/ReportActionItem/ReportPreview.tsx b/src/components/ReportActionItem/ReportPreview.tsx index fc7d43e2a2cc..67ef19593e94 100644 --- a/src/components/ReportActionItem/ReportPreview.tsx +++ b/src/components/ReportActionItem/ReportPreview.tsx @@ -457,8 +457,6 @@ function ReportPreview({ } return { supportText: translate('iou.expenseCount', { - scanningReceipts: numberOfScanningReceipts, - pendingReceipts: numberOfPendingRequests, count: numberOfRequests, }), }; diff --git a/src/languages/en.ts b/src/languages/en.ts index abc6e1cde737..43f80aac3d28 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -140,7 +140,6 @@ import type { ReportArchiveReasonsRemovedFromPolicyParams, ReportPolicyNameParams, RequestAmountParams, - RequestCountParams, RequestedAmountMessageParams, RequiredFieldParams, ResolutionConstraintsParams, @@ -952,17 +951,10 @@ const translations = { yourCompanyWebsiteNote: "If you don't have a website, you can provide your company's LinkedIn or social media profile instead.", invalidDomainError: 'You have entered an invalid domain. To continue, please enter a valid domain.', publicDomainError: 'You have entered a public domain. To continue, please enter a private domain.', - expenseCount: ({scanningReceipts = 0, pendingReceipts = 0}: RequestCountParams) => { - const statusText: string[] = []; - if (scanningReceipts > 0) { - statusText.push(`${scanningReceipts} scanning`); - } - if (pendingReceipts > 0) { - statusText.push(`${pendingReceipts} pending`); - } + expenseCount: () => { return { - one: statusText.length > 0 ? `1 expense (${statusText.join(', ')})` : `1 expense`, - other: (count: number) => (statusText.length > 0 ? `${count} expenses (${statusText.join(', ')})` : `${count} expenses`), + one: '1 expense', + other: (count: number) => `${count} expenses`, }; }, deleteExpense: () => ({ diff --git a/src/languages/es.ts b/src/languages/es.ts index 131ede19005d..ced818bd54e1 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -139,7 +139,6 @@ import type { ReportArchiveReasonsRemovedFromPolicyParams, ReportPolicyNameParams, RequestAmountParams, - RequestCountParams, RequestedAmountMessageParams, RequiredFieldParams, ResolutionConstraintsParams, @@ -947,17 +946,10 @@ const translations = { yourCompanyWebsiteNote: 'Si no tiene un sitio web, puede proporcionar el perfil de LinkedIn o de las redes sociales de su empresa.', invalidDomainError: 'Ha introducido un dominio no válido. Para continuar, introduzca un dominio válido.', publicDomainError: 'Ha introducido un dominio público. Para continuar, introduzca un dominio privado.', - expenseCount: ({scanningReceipts = 0, pendingReceipts = 0}: RequestCountParams) => { - const statusText: string[] = []; - if (scanningReceipts > 0) { - statusText.push(`${scanningReceipts} escaneando`); - } - if (pendingReceipts > 0) { - statusText.push(`${pendingReceipts} pendiente`); - } + expenseCount: () => { return { - one: statusText.length > 0 ? `1 gasto (${statusText.join(', ')})` : `1 gasto`, - other: (count: number) => (statusText.length > 0 ? `${count} gastos (${statusText.join(', ')})` : `${count} gastos`), + one: '1 gasto', + other: (count: number) => `${count} gastos`, }; }, deleteExpense: () => ({ diff --git a/src/languages/params.ts b/src/languages/params.ts index b452aae2e998..b5519666a8f0 100644 --- a/src/languages/params.ts +++ b/src/languages/params.ts @@ -110,11 +110,6 @@ type ReportArchiveReasonsInvoiceReceiverPolicyDeletedParams = { policyName: string; }; -type RequestCountParams = { - scanningReceipts: number; - pendingReceipts: number; -}; - type DeleteTransactionParams = { amount: string; merchant: string; @@ -788,7 +783,6 @@ export type { ReportArchiveReasonsInvoiceReceiverPolicyDeletedParams, ReportArchiveReasonsRemovedFromPolicyParams, RequestAmountParams, - RequestCountParams, DeleteTransactionParams, RequestedAmountMessageParams, ResolutionConstraintsParams, From c58c9e7a404fc3aa0dcf0b439e5569df7dc99564 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Fri, 4 Apr 2025 16:10:26 +0700 Subject: [PATCH 2/6] remove unused dependencies --- .../MoneyRequestReportPreviewContent.tsx | 2 +- src/components/ReportActionItem/ReportPreview.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx index 4b4fb2fe0f80..e828505bc9cc 100644 --- a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx +++ b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx @@ -337,7 +337,7 @@ function MoneyRequestReportPreviewContent({ count: numberOfRequests, }), }; - }, [translate, numberOfRequests, numberOfScanningReceipts, numberOfPendingRequests]); + }, [translate, numberOfRequests]); /* * Manual export diff --git a/src/components/ReportActionItem/ReportPreview.tsx b/src/components/ReportActionItem/ReportPreview.tsx index 67ef19593e94..c7f8d151e051 100644 --- a/src/components/ReportActionItem/ReportPreview.tsx +++ b/src/components/ReportActionItem/ReportPreview.tsx @@ -460,7 +460,7 @@ function ReportPreview({ count: numberOfRequests, }), }; - }, [formattedMerchant, formattedDescription, moneyRequestComment, translate, numberOfRequests, numberOfScanningReceipts, numberOfPendingRequests]); + }, [formattedMerchant, formattedDescription, moneyRequestComment, translate, numberOfRequests]); /* * Manual export From fbe121f87a7be9dcb7328265286f6979454d2db4 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Fri, 4 Apr 2025 16:21:28 +0700 Subject: [PATCH 3/6] fix lint --- .../MoneyRequestReportPreviewContent.tsx | 2 -- src/components/ReportActionItem/ReportPreview.tsx | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx index e828505bc9cc..08b2bc655973 100644 --- a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx +++ b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx @@ -67,7 +67,6 @@ import { isCardTransaction, isPartialMerchant, isPending, - isReceiptBeingScanned, shouldShowBrokenConnectionViolationForMultipleTransactions, } from '@libs/TransactionUtils'; import colors from '@styles/theme/colors'; @@ -181,7 +180,6 @@ function MoneyRequestReportPreviewContent({ const canAllowSettlement = hasUpdatedTotal(iouReport, policy); const numberOfRequests = transactions?.length ?? 0; const transactionsWithReceipts = getTransactionsWithReceipts(iouReportID); - const numberOfScanningReceipts = transactionsWithReceipts.filter((transaction) => isReceiptBeingScanned(transaction)).length; const numberOfPendingRequests = transactionsWithReceipts.filter((transaction) => isPending(transaction) && isCardTransaction(transaction)).length; const hasReceipts = transactionsWithReceipts.length > 0; diff --git a/src/components/ReportActionItem/ReportPreview.tsx b/src/components/ReportActionItem/ReportPreview.tsx index c7f8d151e051..0ecde4f0e27c 100644 --- a/src/components/ReportActionItem/ReportPreview.tsx +++ b/src/components/ReportActionItem/ReportPreview.tsx @@ -80,7 +80,6 @@ import { isCardTransaction, isPartialMerchant, isPending, - isReceiptBeingScanned, shouldShowBrokenConnectionViolationForMultipleTransactions, } from '@libs/TransactionUtils'; import {contextMenuRef} from '@pages/home/report/ContextMenu/ReportActionContextMenu'; @@ -223,7 +222,6 @@ function ReportPreview({ const canAllowSettlement = hasUpdatedTotal(iouReport, policy); const numberOfRequests = transactions?.length ?? 0; const transactionsWithReceipts = getTransactionsWithReceipts(iouReportID); - const numberOfScanningReceipts = transactionsWithReceipts.filter((transaction) => isReceiptBeingScanned(transaction)).length; const numberOfPendingRequests = transactionsWithReceipts.filter((transaction) => isPending(transaction) && isCardTransaction(transaction)).length; const hasReceipts = transactionsWithReceipts.length > 0; From d3dab3782a4c43a1b3b4c197934a52f820cb7bda Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Fri, 4 Apr 2025 22:24:00 +0700 Subject: [PATCH 4/6] add new key for deprecated code --- src/components/ReportActionItem/ReportPreview.tsx | 10 +++++++--- src/languages/en.ts | 15 +++++++++++++++ src/languages/es.ts | 15 +++++++++++++++ src/languages/params.ts | 6 ++++++ 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/components/ReportActionItem/ReportPreview.tsx b/src/components/ReportActionItem/ReportPreview.tsx index 0ecde4f0e27c..1e628662dadb 100644 --- a/src/components/ReportActionItem/ReportPreview.tsx +++ b/src/components/ReportActionItem/ReportPreview.tsx @@ -80,6 +80,7 @@ import { isCardTransaction, isPartialMerchant, isPending, + isReceiptBeingScanned, shouldShowBrokenConnectionViolationForMultipleTransactions, } from '@libs/TransactionUtils'; import {contextMenuRef} from '@pages/home/report/ContextMenu/ReportActionContextMenu'; @@ -222,6 +223,7 @@ function ReportPreview({ const canAllowSettlement = hasUpdatedTotal(iouReport, policy); const numberOfRequests = transactions?.length ?? 0; const transactionsWithReceipts = getTransactionsWithReceipts(iouReportID); + const numberOfScanningReceipts = transactionsWithReceipts.filter((transaction) => isReceiptBeingScanned(transaction)).length; const numberOfPendingRequests = transactionsWithReceipts.filter((transaction) => isPending(transaction) && isCardTransaction(transaction)).length; const hasReceipts = transactionsWithReceipts.length > 0; @@ -454,11 +456,13 @@ function ReportPreview({ }; } return { - supportText: translate('iou.expenseCount', { + supportText: translate('iou.expenseCountWithStatus', { + scanningReceipts: numberOfScanningReceipts, + pendingReceipts: numberOfPendingRequests, count: numberOfRequests, }), }; - }, [formattedMerchant, formattedDescription, moneyRequestComment, translate, numberOfRequests]); + }, [formattedMerchant, formattedDescription, moneyRequestComment, translate, numberOfRequests, numberOfScanningReceipts, numberOfPendingRequests]); /* * Manual export @@ -690,4 +694,4 @@ function ReportPreview({ ReportPreview.displayName = 'ReportPreview'; -export default ReportPreview; +export default ReportPreview; \ No newline at end of file diff --git a/src/languages/en.ts b/src/languages/en.ts index 43f80aac3d28..1a589d19a9b5 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -140,6 +140,7 @@ import type { ReportArchiveReasonsRemovedFromPolicyParams, ReportPolicyNameParams, RequestAmountParams, + RequestCountParams, RequestedAmountMessageParams, RequiredFieldParams, ResolutionConstraintsParams, @@ -951,6 +952,20 @@ const translations = { yourCompanyWebsiteNote: "If you don't have a website, you can provide your company's LinkedIn or social media profile instead.", invalidDomainError: 'You have entered an invalid domain. To continue, please enter a valid domain.', publicDomainError: 'You have entered a public domain. To continue, please enter a private domain.', + // TODO: This key should be deprecated + expenseCountWithStatus: ({scanningReceipts = 0, pendingReceipts = 0}: RequestCountParams) => { + const statusText: string[] = []; + if (scanningReceipts > 0) { + statusText.push(`${scanningReceipts} scanning`); + } + if (pendingReceipts > 0) { + statusText.push(`${pendingReceipts} pending`); + } + return { + one: statusText.length > 0 ? `1 expense (${statusText.join(', ')})` : `1 expense`, + other: (count: number) => (statusText.length > 0 ? `${count} expenses (${statusText.join(', ')})` : `${count} expenses`), + }; + }, expenseCount: () => { return { one: '1 expense', diff --git a/src/languages/es.ts b/src/languages/es.ts index ced818bd54e1..d6d5959dcf35 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -139,6 +139,7 @@ import type { ReportArchiveReasonsRemovedFromPolicyParams, ReportPolicyNameParams, RequestAmountParams, + RequestCountParams, RequestedAmountMessageParams, RequiredFieldParams, ResolutionConstraintsParams, @@ -946,6 +947,20 @@ const translations = { yourCompanyWebsiteNote: 'Si no tiene un sitio web, puede proporcionar el perfil de LinkedIn o de las redes sociales de su empresa.', invalidDomainError: 'Ha introducido un dominio no válido. Para continuar, introduzca un dominio válido.', publicDomainError: 'Ha introducido un dominio público. Para continuar, introduzca un dominio privado.', + // TODO: This key should be deprecated + expenseCountWithStatus: ({scanningReceipts = 0, pendingReceipts = 0}: RequestCountParams) => { + const statusText: string[] = []; + if (scanningReceipts > 0) { + statusText.push(`${scanningReceipts} escaneando`); + } + if (pendingReceipts > 0) { + statusText.push(`${pendingReceipts} pendiente`); + } + return { + one: statusText.length > 0 ? `1 gasto (${statusText.join(', ')})` : `1 gasto`, + other: (count: number) => (statusText.length > 0 ? `${count} gastos (${statusText.join(', ')})` : `${count} gastos`), + }; + }, expenseCount: () => { return { one: '1 gasto', diff --git a/src/languages/params.ts b/src/languages/params.ts index b5519666a8f0..b452aae2e998 100644 --- a/src/languages/params.ts +++ b/src/languages/params.ts @@ -110,6 +110,11 @@ type ReportArchiveReasonsInvoiceReceiverPolicyDeletedParams = { policyName: string; }; +type RequestCountParams = { + scanningReceipts: number; + pendingReceipts: number; +}; + type DeleteTransactionParams = { amount: string; merchant: string; @@ -783,6 +788,7 @@ export type { ReportArchiveReasonsInvoiceReceiverPolicyDeletedParams, ReportArchiveReasonsRemovedFromPolicyParams, RequestAmountParams, + RequestCountParams, DeleteTransactionParams, RequestedAmountMessageParams, ResolutionConstraintsParams, From d56b42e72264370e135fc11ec87a0814ed158e02 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Fri, 4 Apr 2025 22:27:03 +0700 Subject: [PATCH 5/6] prettier --- .../MoneyRequestReportPreviewContent.tsx | 9 +-------- src/components/ReportActionItem/ReportPreview.tsx | 2 +- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx index 08b2bc655973..17aad4b4887d 100644 --- a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx +++ b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx @@ -61,14 +61,7 @@ import { isTripRoom as isTripRoomReportUtils, isWaitingForSubmissionFromCurrentUser as isWaitingForSubmissionFromCurrentUserReportUtils, } from '@libs/ReportUtils'; -import { - getMerchant, - hasPendingUI, - isCardTransaction, - isPartialMerchant, - isPending, - shouldShowBrokenConnectionViolationForMultipleTransactions, -} from '@libs/TransactionUtils'; +import {getMerchant, hasPendingUI, isCardTransaction, isPartialMerchant, isPending, shouldShowBrokenConnectionViolationForMultipleTransactions} 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'; diff --git a/src/components/ReportActionItem/ReportPreview.tsx b/src/components/ReportActionItem/ReportPreview.tsx index 1e628662dadb..047f8f3717f9 100644 --- a/src/components/ReportActionItem/ReportPreview.tsx +++ b/src/components/ReportActionItem/ReportPreview.tsx @@ -694,4 +694,4 @@ function ReportPreview({ ReportPreview.displayName = 'ReportPreview'; -export default ReportPreview; \ No newline at end of file +export default ReportPreview; From fef6813d3ac3452a7f09c3c8afe22e6c4617ae60 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Fri, 4 Apr 2025 22:28:57 +0700 Subject: [PATCH 6/6] add more details --- src/languages/en.ts | 2 +- src/languages/es.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index 1a589d19a9b5..a146e49476b6 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -952,7 +952,7 @@ const translations = { yourCompanyWebsiteNote: "If you don't have a website, you can provide your company's LinkedIn or social media profile instead.", invalidDomainError: 'You have entered an invalid domain. To continue, please enter a valid domain.', publicDomainError: 'You have entered a public domain. To continue, please enter a private domain.', - // TODO: This key should be deprecated + // TODO: This key should be deprecated. More details: https://github.com/Expensify/App/pull/59653#discussion_r2028653252 expenseCountWithStatus: ({scanningReceipts = 0, pendingReceipts = 0}: RequestCountParams) => { const statusText: string[] = []; if (scanningReceipts > 0) { diff --git a/src/languages/es.ts b/src/languages/es.ts index d6d5959dcf35..8dc31f2af238 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -947,7 +947,7 @@ const translations = { yourCompanyWebsiteNote: 'Si no tiene un sitio web, puede proporcionar el perfil de LinkedIn o de las redes sociales de su empresa.', invalidDomainError: 'Ha introducido un dominio no válido. Para continuar, introduzca un dominio válido.', publicDomainError: 'Ha introducido un dominio público. Para continuar, introduzca un dominio privado.', - // TODO: This key should be deprecated + // TODO: This key should be deprecated. More details: https://github.com/Expensify/App/pull/59653#discussion_r2028653252 expenseCountWithStatus: ({scanningReceipts = 0, pendingReceipts = 0}: RequestCountParams) => { const statusText: string[] = []; if (scanningReceipts > 0) {