From cbc981577094cb4a09a77cbf2ff83dcb7d8759d4 Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Wed, 14 Aug 2024 05:49:48 +0530 Subject: [PATCH 01/13] fix: [P2P Distance] Split - Participants amount displayed 0.00 briefly on confirmation screen. Signed-off-by: krishna2323 --- .../MoneyRequestConfirmationList.tsx | 4 +- .../step/IOURequestStepParticipants.tsx | 50 ++++++++++++++++++- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index dcd3fa4c2112..b9bae7243ab8 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -322,7 +322,7 @@ function MoneyRequestConfirmationList({ const isFirstUpdatedDistanceAmount = useRef(false); useEffect(() => { - if (isFirstUpdatedDistanceAmount.current) { + if (isFirstUpdatedDistanceAmount.current || iouAmount) { return; } if (!isDistanceRequest) { @@ -331,7 +331,7 @@ function MoneyRequestConfirmationList({ const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); IOU.setMoneyRequestAmount(transactionID, amount, currency ?? ''); isFirstUpdatedDistanceAmount.current = true; - }, [distance, rate, unit, transactionID, currency, isDistanceRequest]); + }, [distance, rate, unit, transactionID, currency, isDistanceRequest, iouAmount]); useEffect(() => { if (!shouldCalculateDistanceAmount) { diff --git a/src/pages/iou/request/step/IOURequestStepParticipants.tsx b/src/pages/iou/request/step/IOURequestStepParticipants.tsx index 7fbc8d260f8a..3598b32fdacd 100644 --- a/src/pages/iou/request/step/IOURequestStepParticipants.tsx +++ b/src/pages/iou/request/step/IOURequestStepParticipants.tsx @@ -3,13 +3,17 @@ import React, {useCallback, useEffect, useMemo, useRef} from 'react'; import type {OnyxEntry} from 'react-native-onyx'; import {withOnyx} from 'react-native-onyx'; import FormHelpMessage from '@components/FormHelpMessage'; +import {usePersonalDetails} from '@components/OnyxProvider'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import {READ_COMMANDS} from '@libs/API/types'; import DistanceRequestUtils from '@libs/DistanceRequestUtils'; +import type {MileageRate} from '@libs/DistanceRequestUtils'; import HttpUtils from '@libs/HttpUtils'; import * as IOUUtils from '@libs/IOUUtils'; import Navigation from '@libs/Navigation/Navigation'; +import * as OptionsListUtils from '@libs/OptionsListUtils'; +import * as PolicyUtils from '@libs/PolicyUtils'; import * as ReportUtils from '@libs/ReportUtils'; import * as TransactionUtils from '@libs/TransactionUtils'; import MoneyRequestParticipantsSelector from '@pages/iou/request/MoneyRequestParticipantsSelector'; @@ -40,17 +44,20 @@ function IOURequestStepParticipants({ }, transaction, skipConfirmation, + report, }: IOURequestStepParticipantsProps) { const participants = transaction?.participants; const {translate} = useLocalize(); const styles = useThemeStyles(); const isFocused = useIsFocused(); + const personalDetails = usePersonalDetails(); // We need to set selectedReportID if user has navigated back from confirmation page and navigates to confirmation page with already selected participant const selectedReportID = useRef(participants?.length === 1 ? participants[0]?.reportID ?? reportID : reportID); const numberOfParticipants = useRef(participants?.length ?? 0); const iouRequestType = TransactionUtils.getRequestType(transaction); const isSplitRequest = iouType === CONST.IOU.TYPE.SPLIT; + const isDistanceRequest = iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE; const headerTitle = useMemo(() => { if (action === CONST.IOU.ACTION.CATEGORIZE) { return translate('iou.categorize'); @@ -113,6 +120,43 @@ function IOURequestStepParticipants({ [iouType, reportID, transactionID], ); + // Sets `amount` and `split` share data before moving to the next step to avoid briefly showing `0.00` as the split share for participants + const setDistanceRequestData = useCallback(() => { + const isTypeSplit = iouType === CONST.IOU.TYPE.SPLIT; + + // Get policy report based on transaction participants + const policyReport = transaction?.participants?.[0] ? ReportUtils.getReport(transaction.participants[0].reportID ?? '') ?? report : report; + + const policyID = IOU.getIOURequestPolicyID(transaction, policyReport); + const policy = PolicyUtils.getPolicy(report?.policyID ?? policyID); + const policyCurrency = policy?.outputCurrency ?? PolicyUtils.getPersonalPolicy()?.outputCurrency ?? CONST.CURRENCY.USD; + + const customUnitRateID = TransactionUtils.getRateID(transaction) ?? '-1'; + const mileageRates = DistanceRequestUtils.getMileageRates(policy); + const defaultMileageRate = DistanceRequestUtils.getDefaultMileageRate(policy); + const mileageRate = TransactionUtils.isCustomUnitRateIDForP2P(transaction) + ? DistanceRequestUtils.getRateForP2P(policyCurrency) + : mileageRates?.[customUnitRateID] ?? defaultMileageRate; + + const {unit, rate} = mileageRate ?? {}; + const distance = TransactionUtils.getDistanceInMeters(transaction, unit); + const currency = (mileageRate as MileageRate)?.currency ?? policyCurrency; + const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); + IOU.setMoneyRequestAmount(transactionID, amount, currency ?? ''); + + const participantsMap = + transaction?.participants?.map((participant) => { + if (participant.isSender && iouType === CONST.IOU.TYPE.INVOICE) { + return participant; + } + return participant.accountID ? OptionsListUtils.getParticipantsOption(participant, personalDetails) : OptionsListUtils.getReportOption(participant); + }) ?? []; + const participantAccountIDs: number[] = participantsMap.map((participant) => participant.accountID ?? -1); + if (isTypeSplit && amount && transaction?.currency) { + IOU.setSplitShares(transaction, amount, currency, participantAccountIDs); + } + }, [iouType, personalDetails, report, transaction, transactionID]); + const goToNextStep = useCallback(() => { const isCategorizing = action === CONST.IOU.ACTION.CATEGORIZE; const isShareAction = action === CONST.IOU.ACTION.SHARE; @@ -123,6 +167,10 @@ function IOURequestStepParticipants({ IOU.setSplitShares(transaction, transaction.amount, transaction.currency, participantAccountIDs); } + if (isDistanceRequest) { + setDistanceRequestData(); + } + IOU.setMoneyRequestTag(transactionID, ''); IOU.setMoneyRequestCategory(transactionID, ''); if ((isCategorizing || isShareAction) && numberOfParticipants.current === 0) { @@ -136,7 +184,7 @@ function IOURequestStepParticipants({ } else { Navigation.navigate(iouConfirmationPageRoute); } - }, [iouType, transactionID, transaction, reportID, action, participants]); + }, [iouType, transactionID, transaction, reportID, action, participants, setDistanceRequestData, isDistanceRequest]); const navigateBack = useCallback(() => { IOUUtils.navigateToStartMoneyRequestStep(iouRequestType, iouType, transactionID, reportID, action); From 377be13ade1dd51ba2091028ae2589cfe6d964bf Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Fri, 16 Aug 2024 15:53:17 +0530 Subject: [PATCH 02/13] minor fixes. Signed-off-by: krishna2323 --- .../MoneyRequestConfirmationList.tsx | 2 +- .../step/IOURequestStepParticipants.tsx | 75 ++++++++++--------- 2 files changed, 40 insertions(+), 37 deletions(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index c26636cb4ae9..9b00420294bd 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -340,7 +340,7 @@ function MoneyRequestConfirmationList({ const isFirstUpdatedDistanceAmount = useRef(false); useEffect(() => { - if (isFirstUpdatedDistanceAmount.current || iouAmount) { + if (isFirstUpdatedDistanceAmount.current) { return; } if (!isDistanceRequest) { diff --git a/src/pages/iou/request/step/IOURequestStepParticipants.tsx b/src/pages/iou/request/step/IOURequestStepParticipants.tsx index 3598b32fdacd..1bd742196038 100644 --- a/src/pages/iou/request/step/IOURequestStepParticipants.tsx +++ b/src/pages/iou/request/step/IOURequestStepParticipants.tsx @@ -121,41 +121,44 @@ function IOURequestStepParticipants({ ); // Sets `amount` and `split` share data before moving to the next step to avoid briefly showing `0.00` as the split share for participants - const setDistanceRequestData = useCallback(() => { - const isTypeSplit = iouType === CONST.IOU.TYPE.SPLIT; - - // Get policy report based on transaction participants - const policyReport = transaction?.participants?.[0] ? ReportUtils.getReport(transaction.participants[0].reportID ?? '') ?? report : report; - - const policyID = IOU.getIOURequestPolicyID(transaction, policyReport); - const policy = PolicyUtils.getPolicy(report?.policyID ?? policyID); - const policyCurrency = policy?.outputCurrency ?? PolicyUtils.getPersonalPolicy()?.outputCurrency ?? CONST.CURRENCY.USD; - - const customUnitRateID = TransactionUtils.getRateID(transaction) ?? '-1'; - const mileageRates = DistanceRequestUtils.getMileageRates(policy); - const defaultMileageRate = DistanceRequestUtils.getDefaultMileageRate(policy); - const mileageRate = TransactionUtils.isCustomUnitRateIDForP2P(transaction) - ? DistanceRequestUtils.getRateForP2P(policyCurrency) - : mileageRates?.[customUnitRateID] ?? defaultMileageRate; - - const {unit, rate} = mileageRate ?? {}; - const distance = TransactionUtils.getDistanceInMeters(transaction, unit); - const currency = (mileageRate as MileageRate)?.currency ?? policyCurrency; - const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); - IOU.setMoneyRequestAmount(transactionID, amount, currency ?? ''); - - const participantsMap = - transaction?.participants?.map((participant) => { - if (participant.isSender && iouType === CONST.IOU.TYPE.INVOICE) { - return participant; - } - return participant.accountID ? OptionsListUtils.getParticipantsOption(participant, personalDetails) : OptionsListUtils.getReportOption(participant); - }) ?? []; - const participantAccountIDs: number[] = participantsMap.map((participant) => participant.accountID ?? -1); - if (isTypeSplit && amount && transaction?.currency) { - IOU.setSplitShares(transaction, amount, currency, participantAccountIDs); - } - }, [iouType, personalDetails, report, transaction, transactionID]); + const setDistanceRequestData = useCallback( + (isPolicyExpenseChat: boolean) => { + const isTypeSplit = iouType === CONST.IOU.TYPE.SPLIT; + + // Get policy report based on transaction participants + const policyReport = transaction?.participants?.[0] ? ReportUtils.getReport(transaction.participants[0].reportID ?? '') ?? report : report; + + const policyID = IOU.getIOURequestPolicyID(transaction, policyReport); + const policy = PolicyUtils.getPolicy(report?.policyID ?? policyID); + const policyCurrency = policy?.outputCurrency ?? PolicyUtils.getPersonalPolicy()?.outputCurrency ?? CONST.CURRENCY.USD; + + const customUnitRateID = TransactionUtils.getRateID(transaction) ?? '-1'; + const mileageRates = DistanceRequestUtils.getMileageRates(policy); + const defaultMileageRate = DistanceRequestUtils.getDefaultMileageRate(policy); + const mileageRate = TransactionUtils.isCustomUnitRateIDForP2P(transaction) + ? DistanceRequestUtils.getRateForP2P(policyCurrency) + : mileageRates?.[customUnitRateID] ?? defaultMileageRate; + + const {unit, rate} = mileageRate ?? {}; + const distance = TransactionUtils.getDistanceInMeters(transaction, unit); + const currency = (mileageRate as MileageRate)?.currency ?? policyCurrency; + const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); + IOU.setMoneyRequestAmount(transactionID, amount, currency ?? ''); + + const participantsMap = + transaction?.participants?.map((participant) => { + if (participant.isSender && iouType === CONST.IOU.TYPE.INVOICE) { + return participant; + } + return participant.accountID ? OptionsListUtils.getParticipantsOption(participant, personalDetails) : OptionsListUtils.getReportOption(participant); + }) ?? []; + const participantAccountIDs: number[] = participantsMap.map((participant) => participant.accountID ?? -1); + if (isTypeSplit && amount && transaction?.currency && !isPolicyExpenseChat) { + IOU.setSplitShares(transaction, amount, currency ?? '', participantAccountIDs); + } + }, + [iouType, personalDetails, report, transaction, transactionID], + ); const goToNextStep = useCallback(() => { const isCategorizing = action === CONST.IOU.ACTION.CATEGORIZE; @@ -168,7 +171,7 @@ function IOURequestStepParticipants({ } if (isDistanceRequest) { - setDistanceRequestData(); + setDistanceRequestData(!!isPolicyExpenseChat); } IOU.setMoneyRequestTag(transactionID, ''); From 932a839ff5792945f34b468336d566c6f01c0c1d Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Fri, 16 Aug 2024 15:55:23 +0530 Subject: [PATCH 03/13] minor update. Signed-off-by: krishna2323 --- src/pages/iou/request/step/IOURequestStepParticipants.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepParticipants.tsx b/src/pages/iou/request/step/IOURequestStepParticipants.tsx index 1bd742196038..7a53d169d05b 100644 --- a/src/pages/iou/request/step/IOURequestStepParticipants.tsx +++ b/src/pages/iou/request/step/IOURequestStepParticipants.tsx @@ -143,7 +143,7 @@ function IOURequestStepParticipants({ const distance = TransactionUtils.getDistanceInMeters(transaction, unit); const currency = (mileageRate as MileageRate)?.currency ?? policyCurrency; const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); - IOU.setMoneyRequestAmount(transactionID, amount, currency ?? ''); + IOU.setMoneyRequestAmount(transactionID, amount, currency); const participantsMap = transaction?.participants?.map((participant) => { @@ -153,7 +153,7 @@ function IOURequestStepParticipants({ return participant.accountID ? OptionsListUtils.getParticipantsOption(participant, personalDetails) : OptionsListUtils.getReportOption(participant); }) ?? []; const participantAccountIDs: number[] = participantsMap.map((participant) => participant.accountID ?? -1); - if (isTypeSplit && amount && transaction?.currency && !isPolicyExpenseChat) { + if (isTypeSplit && amount && currency && !isPolicyExpenseChat) { IOU.setSplitShares(transaction, amount, currency ?? '', participantAccountIDs); } }, From 99f37b36d66d54ec7dd48ff60c961e835071e898 Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Fri, 16 Aug 2024 16:03:29 +0530 Subject: [PATCH 04/13] remove extra dependency. Signed-off-by: krishna2323 --- src/components/MoneyRequestConfirmationList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index 9b00420294bd..80587998d9bb 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -349,7 +349,7 @@ function MoneyRequestConfirmationList({ const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); IOU.setMoneyRequestAmount(transactionID, amount, currency ?? ''); isFirstUpdatedDistanceAmount.current = true; - }, [distance, rate, unit, transactionID, currency, isDistanceRequest, iouAmount]); + }, [distance, rate, unit, transactionID, currency, isDistanceRequest]); useEffect(() => { if (!shouldCalculateDistanceAmount) { From 5e894bd5e1d709008b4c91b51a76bfe292522048 Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Sun, 18 Aug 2024 16:07:45 +0530 Subject: [PATCH 05/13] add suggested changes. Signed-off-by: krishna2323 --- .../step/IOURequestStepParticipants.tsx | 22 +++++-------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepParticipants.tsx b/src/pages/iou/request/step/IOURequestStepParticipants.tsx index 7a53d169d05b..4e75fb7f7067 100644 --- a/src/pages/iou/request/step/IOURequestStepParticipants.tsx +++ b/src/pages/iou/request/step/IOURequestStepParticipants.tsx @@ -3,7 +3,6 @@ import React, {useCallback, useEffect, useMemo, useRef} from 'react'; import type {OnyxEntry} from 'react-native-onyx'; import {withOnyx} from 'react-native-onyx'; import FormHelpMessage from '@components/FormHelpMessage'; -import {usePersonalDetails} from '@components/OnyxProvider'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import {READ_COMMANDS} from '@libs/API/types'; @@ -12,7 +11,6 @@ import type {MileageRate} from '@libs/DistanceRequestUtils'; import HttpUtils from '@libs/HttpUtils'; import * as IOUUtils from '@libs/IOUUtils'; import Navigation from '@libs/Navigation/Navigation'; -import * as OptionsListUtils from '@libs/OptionsListUtils'; import * as PolicyUtils from '@libs/PolicyUtils'; import * as ReportUtils from '@libs/ReportUtils'; import * as TransactionUtils from '@libs/TransactionUtils'; @@ -50,7 +48,6 @@ function IOURequestStepParticipants({ const {translate} = useLocalize(); const styles = useThemeStyles(); const isFocused = useIsFocused(); - const personalDetails = usePersonalDetails(); // We need to set selectedReportID if user has navigated back from confirmation page and navigates to confirmation page with already selected participant const selectedReportID = useRef(participants?.length === 1 ? participants[0]?.reportID ?? reportID : reportID); @@ -123,10 +120,8 @@ function IOURequestStepParticipants({ // Sets `amount` and `split` share data before moving to the next step to avoid briefly showing `0.00` as the split share for participants const setDistanceRequestData = useCallback( (isPolicyExpenseChat: boolean) => { - const isTypeSplit = iouType === CONST.IOU.TYPE.SPLIT; - // Get policy report based on transaction participants - const policyReport = transaction?.participants?.[0] ? ReportUtils.getReport(transaction.participants[0].reportID ?? '') ?? report : report; + const policyReport = transaction?.participants?.[0] ? ReportUtils.getReport(selectedReportID.current) : report; const policyID = IOU.getIOURequestPolicyID(transaction, policyReport); const policy = PolicyUtils.getPolicy(report?.policyID ?? policyID); @@ -145,19 +140,12 @@ function IOURequestStepParticipants({ const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); IOU.setMoneyRequestAmount(transactionID, amount, currency); - const participantsMap = - transaction?.participants?.map((participant) => { - if (participant.isSender && iouType === CONST.IOU.TYPE.INVOICE) { - return participant; - } - return participant.accountID ? OptionsListUtils.getParticipantsOption(participant, personalDetails) : OptionsListUtils.getReportOption(participant); - }) ?? []; - const participantAccountIDs: number[] = participantsMap.map((participant) => participant.accountID ?? -1); - if (isTypeSplit && amount && currency && !isPolicyExpenseChat) { - IOU.setSplitShares(transaction, amount, currency ?? '', participantAccountIDs); + const participantAccountIDs: number[] | undefined = transaction?.participants?.map((participant) => participant.accountID ?? -1); + if (isSplitRequest && amount && currency && !isPolicyExpenseChat) { + IOU.setSplitShares(transaction, amount, currency ?? '', participantAccountIDs ?? []); } }, - [iouType, personalDetails, report, transaction, transactionID], + [report, transaction, transactionID, isSplitRequest], ); const goToNextStep = useCallback(() => { From 30e13cc4244c5cb499d550bb2691d8199851b524 Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Sun, 18 Aug 2024 16:48:13 +0530 Subject: [PATCH 06/13] define type for mileageRate. Signed-off-by: krishna2323 --- src/pages/iou/request/step/IOURequestStepParticipants.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepParticipants.tsx b/src/pages/iou/request/step/IOURequestStepParticipants.tsx index 4e75fb7f7067..c6010fa108a2 100644 --- a/src/pages/iou/request/step/IOURequestStepParticipants.tsx +++ b/src/pages/iou/request/step/IOURequestStepParticipants.tsx @@ -130,13 +130,13 @@ function IOURequestStepParticipants({ const customUnitRateID = TransactionUtils.getRateID(transaction) ?? '-1'; const mileageRates = DistanceRequestUtils.getMileageRates(policy); const defaultMileageRate = DistanceRequestUtils.getDefaultMileageRate(policy); - const mileageRate = TransactionUtils.isCustomUnitRateIDForP2P(transaction) + const mileageRate: MileageRate = TransactionUtils.isCustomUnitRateIDForP2P(transaction) ? DistanceRequestUtils.getRateForP2P(policyCurrency) : mileageRates?.[customUnitRateID] ?? defaultMileageRate; const {unit, rate} = mileageRate ?? {}; const distance = TransactionUtils.getDistanceInMeters(transaction, unit); - const currency = (mileageRate as MileageRate)?.currency ?? policyCurrency; + const currency = mileageRate?.currency ?? policyCurrency; const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); IOU.setMoneyRequestAmount(transactionID, amount, currency); From 1d7dab0bb3725dc2f4a073ebb37392cc6c3a55e4 Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Mon, 9 Sep 2024 19:23:56 +0530 Subject: [PATCH 07/13] remove redundant code. Signed-off-by: krishna2323 --- src/components/MoneyRequestConfirmationList.tsx | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index 20aa62c2a951..f86e5cf92ae9 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -343,20 +343,6 @@ function MoneyRequestConfirmationList({ // eslint-disable-next-line react-compiler/react-compiler, react-hooks/exhaustive-deps -- we don't want this effect to run if it's just setFormError that changes }, [isFocused, transaction, shouldDisplayFieldError, hasSmartScanFailed, didConfirmSplit]); - const isFirstUpdatedDistanceAmount = useRef(false); - - useEffect(() => { - if (isFirstUpdatedDistanceAmount.current) { - return; - } - if (!isDistanceRequest) { - return; - } - const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); - IOU.setMoneyRequestAmount(transactionID, amount, currency ?? ''); - isFirstUpdatedDistanceAmount.current = true; - }, [distance, rate, unit, transactionID, currency, isDistanceRequest]); - useEffect(() => { if (!shouldCalculateDistanceAmount) { return; From b2fcb63b1720a40573ef82de800a9b7ffd559569 Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Sun, 15 Sep 2024 18:12:59 +0530 Subject: [PATCH 08/13] revert useEffect to update the amount. Signed-off-by: krishna2323 --- src/components/MoneyRequestConfirmationList.tsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index 8672ae7dde24..743a5b276c98 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -347,6 +347,20 @@ function MoneyRequestConfirmationList({ // eslint-disable-next-line react-compiler/react-compiler, react-hooks/exhaustive-deps -- we don't want this effect to run if it's just setFormError that changes }, [isFocused, transaction, shouldDisplayFieldError, hasSmartScanFailed, didConfirmSplit]); + const isFirstUpdatedDistanceAmount = useRef(false); + + useEffect(() => { + if (isFirstUpdatedDistanceAmount.current) { + return; + } + if (!isDistanceRequest) { + return; + } + const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); + IOU.setMoneyRequestAmount(transactionID, amount, currency ?? ''); + isFirstUpdatedDistanceAmount.current = true; + }, [distance, rate, unit, transactionID, currency, isDistanceRequest]); + useEffect(() => { if (!shouldCalculateDistanceAmount) { return; From b5293d1caaf219242a06fbc2516558c4d7296931 Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Wed, 2 Oct 2024 06:17:45 +0530 Subject: [PATCH 09/13] move the logic to update amount for split in IOURequestStepDistance. Signed-off-by: krishna2323 --- .../request/step/IOURequestStepDistance.tsx | 37 ++++++++++++++++- .../step/IOURequestStepParticipants.tsx | 41 +------------------ 2 files changed, 37 insertions(+), 41 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepDistance.tsx b/src/pages/iou/request/step/IOURequestStepDistance.tsx index 14597df8e313..4deac6e7ab10 100644 --- a/src/pages/iou/request/step/IOURequestStepDistance.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistance.tsx @@ -20,10 +20,12 @@ import useNetwork from '@hooks/useNetwork'; import usePrevious from '@hooks/usePrevious'; import useThemeStyles from '@hooks/useThemeStyles'; import DistanceRequestUtils from '@libs/DistanceRequestUtils'; +import type {MileageRate} from '@libs/DistanceRequestUtils'; import * as ErrorUtils from '@libs/ErrorUtils'; import * as IOUUtils from '@libs/IOUUtils'; import Navigation from '@libs/Navigation/Navigation'; import * as OptionsListUtils from '@libs/OptionsListUtils'; +import * as PolicyUtils from '@libs/PolicyUtils'; import * as ReportUtils from '@libs/ReportUtils'; import * as TransactionUtils from '@libs/TransactionUtils'; import * as IOU from '@userActions/IOU'; @@ -98,6 +100,7 @@ function IOURequestStepDistance({ const scrollViewRef = useRef(null); const isLoadingRoute = transaction?.comment?.isLoading ?? false; const isLoading = transaction?.isLoading ?? false; + const isSplitRequest = iouType === CONST.IOU.TYPE.SPLIT; const hasRouteError = !!transaction?.errorFields?.route; const [shouldShowAtLeastTwoDifferentWaypointsError, setShouldShowAtLeastTwoDifferentWaypointsError] = useState(false); const isWaypointEmpty = (waypoint?: Waypoint) => { @@ -119,7 +122,37 @@ function IOURequestStepDistance({ const isCreatingNewRequest = !(backTo || isEditing); const [recentWaypoints, {status: recentWaypointsStatus}] = useOnyx(ONYXKEYS.NVP_RECENT_WAYPOINTS); const iouRequestType = TransactionUtils.getRequestType(transaction); - const customUnitRateID = TransactionUtils.getRateID(transaction); + const customUnitRateID = TransactionUtils.getRateID(transaction) ?? '-1'; + + // Sets `amount` and `split` share data before moving to the next step to avoid briefly showing `0.00` as the split share for participants + const setDistanceRequestData = useCallback(() => { + // Get policy report based on transaction participants + const participants = transaction?.participants; + const isPolicyExpenseChat = participants?.some((participant) => participant.isPolicyExpenseChat); + const selectedReportID = participants?.length === 1 ? participants[0]?.reportID ?? reportID : reportID; + const policyReport = transaction?.participants?.[0] ? ReportUtils.getReport(selectedReportID) : report; + + const policyID2 = IOU.getIOURequestPolicyID(transaction, policyReport); + const policy2 = PolicyUtils.getPolicy(report?.policyID ?? policyID2); + const policyCurrency = policy?.outputCurrency ?? PolicyUtils.getPersonalPolicy()?.outputCurrency ?? CONST.CURRENCY.USD; + + const mileageRates = DistanceRequestUtils.getMileageRates(policy2); + const defaultMileageRate = DistanceRequestUtils.getDefaultMileageRate(policy2); + const mileageRate: MileageRate = TransactionUtils.isCustomUnitRateIDForP2P(transaction) + ? DistanceRequestUtils.getRateForP2P(policyCurrency) + : mileageRates?.[customUnitRateID] ?? defaultMileageRate; + + const {unit, rate} = mileageRate ?? {}; + const distance = TransactionUtils.getDistanceInMeters(transaction, unit); + const currency = mileageRate?.currency ?? policyCurrency; + const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); + IOU.setMoneyRequestAmount(transactionID, amount, currency); + + const participantAccountIDs: number[] | undefined = transaction?.participants?.map((participant) => participant.accountID ?? -1); + if (isSplitRequest && amount && currency && !isPolicyExpenseChat) { + IOU.setSplitShares(transaction, amount, currency ?? '', participantAccountIDs ?? []); + } + }, [report, transaction, transactionID, isSplitRequest, policy?.outputCurrency, reportID, customUnitRateID]); // For quick button actions, we'll skip the confirmation page unless the report is archived or this is a workspace // request and the workspace requires a category or a tag @@ -404,6 +437,7 @@ function IOURequestStepDistance({ ); const submitWaypoints = useCallback(() => { + setDistanceRequestData(); // If there is any error or loading state, don't let user go to next page. if (duplicateWaypointsError || atLeastTwoDifferentWaypointsError || hasRouteError || isLoadingRoute || (!isEditing && isLoading)) { setShouldShowAtLeastTwoDifferentWaypointsError(true); @@ -451,6 +485,7 @@ function IOURequestStepDistance({ transaction?.routes, report?.reportID, policy, + setDistanceRequestData, ]); const renderItem = useCallback( diff --git a/src/pages/iou/request/step/IOURequestStepParticipants.tsx b/src/pages/iou/request/step/IOURequestStepParticipants.tsx index b37fb8c93881..552ad4d54e39 100644 --- a/src/pages/iou/request/step/IOURequestStepParticipants.tsx +++ b/src/pages/iou/request/step/IOURequestStepParticipants.tsx @@ -8,11 +8,9 @@ import usePermissions from '@hooks/usePermissions'; import useThemeStyles from '@hooks/useThemeStyles'; import {READ_COMMANDS} from '@libs/API/types'; import DistanceRequestUtils from '@libs/DistanceRequestUtils'; -import type {MileageRate} from '@libs/DistanceRequestUtils'; import HttpUtils from '@libs/HttpUtils'; import * as IOUUtils from '@libs/IOUUtils'; import Navigation from '@libs/Navigation/Navigation'; -import * as PolicyUtils from '@libs/PolicyUtils'; import * as ReportUtils from '@libs/ReportUtils'; import * as TransactionUtils from '@libs/TransactionUtils'; import MoneyRequestParticipantsSelector from '@pages/iou/request/MoneyRequestParticipantsSelector'; @@ -43,7 +41,6 @@ function IOURequestStepParticipants({ }, transaction, skipConfirmation, - report, }: IOURequestStepParticipantsProps) { const participants = transaction?.participants; const {translate} = useLocalize(); @@ -56,7 +53,6 @@ function IOURequestStepParticipants({ const numberOfParticipants = useRef(participants?.length ?? 0); const iouRequestType = TransactionUtils.getRequestType(transaction); const isSplitRequest = iouType === CONST.IOU.TYPE.SPLIT; - const isDistanceRequest = iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE; const headerTitle = useMemo(() => { if (action === CONST.IOU.ACTION.CATEGORIZE) { return translate('iou.categorize'); @@ -119,37 +115,6 @@ function IOURequestStepParticipants({ [iouType, reportID, transactionID, canUseP2PDistanceRequests], ); - // Sets `amount` and `split` share data before moving to the next step to avoid briefly showing `0.00` as the split share for participants - const setDistanceRequestData = useCallback( - (isPolicyExpenseChat: boolean) => { - // Get policy report based on transaction participants - const policyReport = transaction?.participants?.[0] ? ReportUtils.getReport(selectedReportID.current) : report; - - const policyID = IOU.getIOURequestPolicyID(transaction, policyReport); - const policy = PolicyUtils.getPolicy(report?.policyID ?? policyID); - const policyCurrency = policy?.outputCurrency ?? PolicyUtils.getPersonalPolicy()?.outputCurrency ?? CONST.CURRENCY.USD; - - const customUnitRateID = TransactionUtils.getRateID(transaction) ?? '-1'; - const mileageRates = DistanceRequestUtils.getMileageRates(policy); - const defaultMileageRate = DistanceRequestUtils.getDefaultMileageRate(policy); - const mileageRate: MileageRate = TransactionUtils.isCustomUnitRateIDForP2P(transaction) - ? DistanceRequestUtils.getRateForP2P(policyCurrency) - : mileageRates?.[customUnitRateID] ?? defaultMileageRate; - - const {unit, rate} = mileageRate ?? {}; - const distance = TransactionUtils.getDistanceInMeters(transaction, unit); - const currency = mileageRate?.currency ?? policyCurrency; - const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); - IOU.setMoneyRequestAmount(transactionID, amount, currency); - - const participantAccountIDs: number[] | undefined = transaction?.participants?.map((participant) => participant.accountID ?? -1); - if (isSplitRequest && amount && currency && !isPolicyExpenseChat) { - IOU.setSplitShares(transaction, amount, currency ?? '', participantAccountIDs ?? []); - } - }, - [report, transaction, transactionID, isSplitRequest], - ); - const goToNextStep = useCallback(() => { const isCategorizing = action === CONST.IOU.ACTION.CATEGORIZE; const isShareAction = action === CONST.IOU.ACTION.SHARE; @@ -160,10 +125,6 @@ function IOURequestStepParticipants({ IOU.setSplitShares(transaction, transaction.amount, transaction.currency, participantAccountIDs); } - if (isDistanceRequest) { - setDistanceRequestData(!!isPolicyExpenseChat); - } - IOU.setMoneyRequestTag(transactionID, ''); IOU.setMoneyRequestCategory(transactionID, ''); if ((isCategorizing || isShareAction) && numberOfParticipants.current === 0) { @@ -177,7 +138,7 @@ function IOURequestStepParticipants({ } else { Navigation.navigate(iouConfirmationPageRoute); } - }, [iouType, transactionID, transaction, reportID, action, participants, setDistanceRequestData, isDistanceRequest]); + }, [iouType, transactionID, transaction, reportID, action, participants]); const navigateBack = useCallback(() => { IOUUtils.navigateToStartMoneyRequestStep(iouRequestType, iouType, transactionID, reportID, action); From 35af9ce56471e5dbc21c4916010067230525e9a9 Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Wed, 2 Oct 2024 06:44:42 +0530 Subject: [PATCH 10/13] fix: empty participants issue. Signed-off-by: krishna2323 --- .../request/step/IOURequestStepDistance.tsx | 64 ++++++++++--------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepDistance.tsx b/src/pages/iou/request/step/IOURequestStepDistance.tsx index 4deac6e7ab10..ee6a0cd2c528 100644 --- a/src/pages/iou/request/step/IOURequestStepDistance.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistance.tsx @@ -37,6 +37,7 @@ import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import type * as OnyxTypes from '@src/types/onyx'; +import type {Participant} from '@src/types/onyx/IOU'; import type {Errors} from '@src/types/onyx/OnyxCommon'; import type {Waypoint, WaypointCollection} from '@src/types/onyx/Transaction'; import StepScreenWrapper from './StepScreenWrapper'; @@ -125,34 +126,37 @@ function IOURequestStepDistance({ const customUnitRateID = TransactionUtils.getRateID(transaction) ?? '-1'; // Sets `amount` and `split` share data before moving to the next step to avoid briefly showing `0.00` as the split share for participants - const setDistanceRequestData = useCallback(() => { - // Get policy report based on transaction participants - const participants = transaction?.participants; - const isPolicyExpenseChat = participants?.some((participant) => participant.isPolicyExpenseChat); - const selectedReportID = participants?.length === 1 ? participants[0]?.reportID ?? reportID : reportID; - const policyReport = transaction?.participants?.[0] ? ReportUtils.getReport(selectedReportID) : report; - - const policyID2 = IOU.getIOURequestPolicyID(transaction, policyReport); - const policy2 = PolicyUtils.getPolicy(report?.policyID ?? policyID2); - const policyCurrency = policy?.outputCurrency ?? PolicyUtils.getPersonalPolicy()?.outputCurrency ?? CONST.CURRENCY.USD; - - const mileageRates = DistanceRequestUtils.getMileageRates(policy2); - const defaultMileageRate = DistanceRequestUtils.getDefaultMileageRate(policy2); - const mileageRate: MileageRate = TransactionUtils.isCustomUnitRateIDForP2P(transaction) - ? DistanceRequestUtils.getRateForP2P(policyCurrency) - : mileageRates?.[customUnitRateID] ?? defaultMileageRate; - - const {unit, rate} = mileageRate ?? {}; - const distance = TransactionUtils.getDistanceInMeters(transaction, unit); - const currency = mileageRate?.currency ?? policyCurrency; - const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); - IOU.setMoneyRequestAmount(transactionID, amount, currency); - - const participantAccountIDs: number[] | undefined = transaction?.participants?.map((participant) => participant.accountID ?? -1); - if (isSplitRequest && amount && currency && !isPolicyExpenseChat) { - IOU.setSplitShares(transaction, amount, currency ?? '', participantAccountIDs ?? []); - } - }, [report, transaction, transactionID, isSplitRequest, policy?.outputCurrency, reportID, customUnitRateID]); + const setDistanceRequestData = useCallback( + (participants: Participant[]) => { + // Get policy report based on transaction participants + const isPolicyExpenseChat = participants?.some((participant) => participant.isPolicyExpenseChat); + const selectedReportID = participants?.length === 1 ? participants[0]?.reportID ?? reportID : reportID; + const policyReport = participants?.[0] ? ReportUtils.getReport(selectedReportID) : report; + + const policyID2 = IOU.getIOURequestPolicyID(transaction, policyReport); + const policy2 = PolicyUtils.getPolicy(report?.policyID ?? policyID2); + const policyCurrency = policy?.outputCurrency ?? PolicyUtils.getPersonalPolicy()?.outputCurrency ?? CONST.CURRENCY.USD; + + const mileageRates = DistanceRequestUtils.getMileageRates(policy2); + const defaultMileageRate = DistanceRequestUtils.getDefaultMileageRate(policy2); + const mileageRate: MileageRate = TransactionUtils.isCustomUnitRateIDForP2P(transaction) + ? DistanceRequestUtils.getRateForP2P(policyCurrency) + : mileageRates?.[customUnitRateID] ?? defaultMileageRate; + + const {unit, rate} = mileageRate ?? {}; + const distance = TransactionUtils.getDistanceInMeters(transaction, unit); + const currency = mileageRate?.currency ?? policyCurrency; + const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); + IOU.setMoneyRequestAmount(transactionID, amount, currency); + + const participantAccountIDs: number[] | undefined = participants?.map((participant) => Number(participant.accountID ?? -1)); + if (isSplitRequest && amount && currency && !isPolicyExpenseChat) { + console.log('TRUE', transaction, amount, currency ?? '', participantAccountIDs ?? []); + IOU.setSplitShares(transaction, amount, currency ?? '', participantAccountIDs ?? []); + } + }, + [report, transaction, transactionID, isSplitRequest, policy?.outputCurrency, reportID, customUnitRateID], + ); // For quick button actions, we'll skip the confirmation page unless the report is archived or this is a workspace // request and the workspace requires a category or a tag @@ -287,6 +291,7 @@ function IOURequestStepDistance({ const participantAccountID = participant?.accountID ?? -1; return participantAccountID ? OptionsListUtils.getParticipantsOption(participant, personalDetails) : OptionsListUtils.getReportOption(participant); }); + setDistanceRequestData(participants); if (shouldSkipConfirmation) { if (iouType === CONST.IOU.TYPE.SPLIT) { IOU.splitBill({ @@ -389,6 +394,7 @@ function IOURequestStepDistance({ iouRequestType, reportNameValuePairs, customUnitRateID, + setDistanceRequestData, ]); const getError = () => { @@ -437,7 +443,6 @@ function IOURequestStepDistance({ ); const submitWaypoints = useCallback(() => { - setDistanceRequestData(); // If there is any error or loading state, don't let user go to next page. if (duplicateWaypointsError || atLeastTwoDifferentWaypointsError || hasRouteError || isLoadingRoute || (!isEditing && isLoading)) { setShouldShowAtLeastTwoDifferentWaypointsError(true); @@ -485,7 +490,6 @@ function IOURequestStepDistance({ transaction?.routes, report?.reportID, policy, - setDistanceRequestData, ]); const renderItem = useCallback( From 98ca6ac74b02b7217ea1f6b316dfe6a868a690fd Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Wed, 2 Oct 2024 06:46:34 +0530 Subject: [PATCH 11/13] remove console log. Signed-off-by: krishna2323 --- src/pages/iou/request/step/IOURequestStepDistance.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/iou/request/step/IOURequestStepDistance.tsx b/src/pages/iou/request/step/IOURequestStepDistance.tsx index ee6a0cd2c528..63af4a7fcfe7 100644 --- a/src/pages/iou/request/step/IOURequestStepDistance.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistance.tsx @@ -151,7 +151,6 @@ function IOURequestStepDistance({ const participantAccountIDs: number[] | undefined = participants?.map((participant) => Number(participant.accountID ?? -1)); if (isSplitRequest && amount && currency && !isPolicyExpenseChat) { - console.log('TRUE', transaction, amount, currency ?? '', participantAccountIDs ?? []); IOU.setSplitShares(transaction, amount, currency ?? '', participantAccountIDs ?? []); } }, From 3caf9791a2ccc50beecb52160a8da7ee3bebeb0f Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Wed, 2 Oct 2024 06:52:57 +0530 Subject: [PATCH 12/13] fix: lint issues. Signed-off-by: krishna2323 --- src/pages/iou/request/step/IOURequestStepConfirmation.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx index b08f9a6ced5f..8555c99d1bfb 100644 --- a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx +++ b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx @@ -87,11 +87,11 @@ function IOURequestStepConfirmation({ const isSubmittingFromTrackExpense = action === CONST.IOU.ACTION.SUBMIT; const isMovingTransactionFromTrackExpense = IOUUtils.isMovingTransactionFromTrackExpense(action); const payeePersonalDetails = useMemo(() => { - if (personalDetails?.[transaction?.splitPayerAccountIDs?.[0] ?? -1]) { - return personalDetails?.[transaction?.splitPayerAccountIDs?.[0] ?? -1]; + if (personalDetails?.[transaction?.splitPayerAccountIDs?.at(0) ?? -1]) { + return personalDetails?.[transaction?.splitPayerAccountIDs?.at(0) ?? -1]; } - const participant = transaction?.participants?.find((val) => val.accountID === (transaction?.splitPayerAccountIDs?.[0] ?? -1)); + const participant = transaction?.participants?.find((val) => val.accountID === (transaction?.splitPayerAccountIDs?.at(0) ?? -1)); return { login: participant?.login ?? '', From 22ada28aa634965c27fe21c765e4ebc5b93c834e Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Wed, 16 Oct 2024 02:12:16 +0530 Subject: [PATCH 13/13] minor updates. Signed-off-by: krishna2323 --- .../iou/request/step/IOURequestStepDistance.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepDistance.tsx b/src/pages/iou/request/step/IOURequestStepDistance.tsx index 25708e713128..47f11942cd7d 100644 --- a/src/pages/iou/request/step/IOURequestStepDistance.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistance.tsx @@ -115,15 +115,15 @@ function IOURequestStepDistance({ (participants: Participant[]) => { // Get policy report based on transaction participants const isPolicyExpenseChat = participants?.some((participant) => participant.isPolicyExpenseChat); - const selectedReportID = participants?.length === 1 ? participants[0]?.reportID ?? reportID : reportID; - const policyReport = participants?.[0] ? ReportUtils.getReport(selectedReportID) : report; + const selectedReportID = participants?.length === 1 ? participants.at(0)?.reportID ?? reportID : reportID; + const policyReport = participants.at(0) ? ReportUtils.getReport(selectedReportID) : report; - const policyID2 = IOU.getIOURequestPolicyID(transaction, policyReport); - const policy2 = PolicyUtils.getPolicy(report?.policyID ?? policyID2); + const IOUpolicyID = IOU.getIOURequestPolicyID(transaction, policyReport); + const IOUpolicy = PolicyUtils.getPolicy(report?.policyID ?? IOUpolicyID); const policyCurrency = policy?.outputCurrency ?? PolicyUtils.getPersonalPolicy()?.outputCurrency ?? CONST.CURRENCY.USD; - const mileageRates = DistanceRequestUtils.getMileageRates(policy2); - const defaultMileageRate = DistanceRequestUtils.getDefaultMileageRate(policy2); + const mileageRates = DistanceRequestUtils.getMileageRates(IOUpolicy); + const defaultMileageRate = DistanceRequestUtils.getDefaultMileageRate(IOUpolicy); const mileageRate: MileageRate = TransactionUtils.isCustomUnitRateIDForP2P(transaction) ? DistanceRequestUtils.getRateForP2P(policyCurrency) : mileageRates?.[customUnitRateID] ?? defaultMileageRate;