diff --git a/src/hooks/useBulkPayOptions.ts b/src/hooks/useBulkPayOptions.ts index f403e81bf1128..982478ed38999 100644 --- a/src/hooks/useBulkPayOptions.ts +++ b/src/hooks/useBulkPayOptions.ts @@ -37,6 +37,7 @@ type UseBulkPayOptionProps = { isCurrencySupportedWallet?: boolean; currency: string | undefined; formattedAmount: string; + onlyShowPayElsewhere: boolean; }; type UseBulkPayOptionReturnType = { @@ -54,6 +55,7 @@ function useBulkPayOptions({ isCurrencySupportedWallet, currency, formattedAmount, + onlyShowPayElsewhere, }: UseBulkPayOptionProps): UseBulkPayOptionReturnType { const icons = useMemoizedLazyExpensifyIcons(['Building', 'User'] as const); const {translate} = useLocalize(); @@ -137,6 +139,10 @@ function useBulkPayOptions({ return undefined; } + if (onlyShowPayElsewhere) { + return [paymentMethods[CONST.IOU.PAYMENT_TYPE.ELSEWHERE]]; + } + if (shouldShowBusinessBankAccountOptions) { buttonOptions.push(paymentMethods[CONST.PAYMENT_METHODS.BUSINESS_BANK_ACCOUNT]); } @@ -238,6 +244,7 @@ function useBulkPayOptions({ chatReport, getPaymentSubitems, formattedAmount, + onlyShowPayElsewhere, ]); return { diff --git a/src/pages/Search/SearchPage.tsx b/src/pages/Search/SearchPage.tsx index a7f431047902b..0b3e8c0ddf145 100644 --- a/src/pages/Search/SearchPage.tsx +++ b/src/pages/Search/SearchPage.tsx @@ -78,7 +78,7 @@ import {shouldRestrictUserBillableActions} from '@libs/SubscriptionUtils'; import {hasTransactionBeenRejected} from '@libs/TransactionUtils'; import type {ReceiptFile} from '@pages/iou/request/step/IOURequestStepScan/types'; import variables from '@styles/variables'; -import {dismissRejectUseExplanation, initMoneyRequest, initSplitExpense, setMoneyRequestParticipantsFromReport, setMoneyRequestReceipt} from '@userActions/IOU'; +import {canIOUBePaid, dismissRejectUseExplanation, initMoneyRequest, initSplitExpense, setMoneyRequestParticipantsFromReport, setMoneyRequestReceipt} from '@userActions/IOU'; import {openOldDotLink} from '@userActions/Link'; import {buildOptimisticTransactionAndCreateDraft} from '@userActions/TransactionEdit'; import CONST from '@src/CONST'; @@ -172,6 +172,15 @@ function SearchPage({route}: SearchPageProps) { const selectedBulkCurrency = selectedReports.at(0)?.currency ?? Object.values(selectedTransactions).at(0)?.currency; const totalFormattedAmount = getTotalFormattedAmount(selectedReports, selectedTransactions, selectedBulkCurrency); + const onlyShowPayElsewhere = useMemo(() => { + const selectedPolicy = currentSearchResults?.data?.[`${ONYXKEYS.COLLECTION.POLICY}${selectedPolicyIDs.at(0)}`]; + return (selectedTransactionReportIDs ?? selectedReportIDs).some((reportID) => { + const report = currentSearchResults?.data?.[`${ONYXKEYS.COLLECTION.REPORT}${reportID}`]; + const chatReport = currentSearchResults?.data?.[`${ONYXKEYS.COLLECTION.REPORT}${report?.chatReportID}`]; + return report && !canIOUBePaid(report, chatReport, selectedPolicy, undefined, false) && canIOUBePaid(report, chatReport, selectedPolicy, undefined, true); + }); + }, [currentSearchResults?.data, selectedPolicyIDs, selectedReportIDs, selectedTransactionReportIDs]); + const {bulkPayButtonOptions, latestBankItems} = useBulkPayOptions({ selectedPolicyID: selectedPolicyIDs.at(0), selectedReportID: selectedTransactionReportIDs.at(0) ?? selectedReportIDs.at(0), @@ -179,6 +188,7 @@ function SearchPage({route}: SearchPageProps) { isCurrencySupportedWallet: isCurrencySupportedBulkWallet, currency: selectedBulkCurrency, formattedAmount: totalFormattedAmount, + onlyShowPayElsewhere, }); useEffect(() => {