Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 18 additions & 31 deletions src/components/MoneyRequestConfirmationList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import {
setCustomUnitRateID,
setMoneyRequestAmount,
setMoneyRequestCategory,
setMoneyRequestDistance,
setMoneyRequestMerchant,
setMoneyRequestPendingFields,
setMoneyRequestTag,
Expand All @@ -34,7 +33,6 @@ import {getIsMissingAttendeesViolation} from '@libs/AttendeeUtils';
import {isCategoryDescriptionRequired} from '@libs/CategoryUtils';
import {convertToBackendAmount, convertToDisplayString, convertToDisplayStringWithoutCurrency} from '@libs/CurrencyUtils';
import DistanceRequestUtils from '@libs/DistanceRequestUtils';
import {calculateGPSDistance} from '@libs/GPSDraftDetailsUtils';
import {calculateAmount, insertTagIntoTransactionTagsString, isMovingTransactionFromTrackExpense as isMovingTransactionFromTrackExpenseUtil} from '@libs/IOUUtils';
import Log from '@libs/Log';
import {validateAmount} from '@libs/MoneyRequestUtils';
Expand Down Expand Up @@ -338,21 +336,6 @@ function MoneyRequestConfirmationList({
const defaultRate = defaultMileageRate?.customUnitRateID;
const lastSelectedRate = policy?.id ? (lastSelectedDistanceRates?.[policy.id] ?? defaultRate) : defaultRate;

useEffect(() => {
if (
!['-1', CONST.CUSTOM_UNITS.FAKE_P2P_ID].includes(customUnitRateID) ||
!isDistanceRequest ||
!isPolicyExpenseChat ||
!transactionID ||
!lastSelectedRate ||
isMovingTransactionFromTrackExpense
) {
return;
}

setCustomUnitRateID(transactionID, lastSelectedRate);
}, [customUnitRateID, transactionID, lastSelectedRate, isDistanceRequest, isPolicyExpenseChat, isMovingTransactionFromTrackExpense]);

const mileageRate = DistanceRequestUtils.getRate({transaction, policy, policyDraft});
const rate = mileageRate.rate;
const prevRate = usePrevious(rate);
Expand Down Expand Up @@ -398,19 +381,6 @@ function MoneyRequestConfirmationList({

const distanceRequestAmount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0);

// Update GPS distance whenever the current distance unit differs from the one that was used
// to calculate the distance stored in transaction.comment.customUnit.quantity
const gpsDistance = transaction?.comment?.customUnit?.quantity;
const gpsDistanceWithCurrentDistanceUnit = calculateGPSDistance(distance, unit);
const shouldUpdateGpsDistance = isGPSDistanceRequest && gpsDistance !== gpsDistanceWithCurrentDistanceUnit;
useEffect(() => {
if (!shouldUpdateGpsDistance || !transactionID || isReadOnly) {
return;
}

setMoneyRequestDistance(transactionID, gpsDistanceWithCurrentDistanceUnit, true);
}, [shouldUpdateGpsDistance, transactionID, isReadOnly, gpsDistanceWithCurrentDistanceUnit]);

let amountToBeUsed = iouAmount;

if (shouldCalculateDistanceAmount) {
Expand Down Expand Up @@ -517,7 +487,7 @@ function MoneyRequestConfirmationList({
// If there is a distance rate in the policy that matches the rate and unit of the currently selected mileage rate, select it automatically
const matchingRate = Object.values(policyRates).find((policyRate) => policyRate.rate === mileageRate.rate && policyRate.unit === mileageRate.unit);
if (matchingRate?.customUnitRateID) {
setCustomUnitRateID(transactionID, matchingRate.customUnitRateID);
setCustomUnitRateID(transactionID, matchingRate.customUnitRateID, transaction, policy);
return;
}

Expand All @@ -534,6 +504,7 @@ function MoneyRequestConfirmationList({
isMovingTransactionFromTrackExpense,
setFormError,
clearFormErrors,
transaction,
]);

const routeError = Object.values(transaction?.errorFields?.route ?? {}).at(0);
Expand Down Expand Up @@ -700,6 +671,22 @@ function MoneyRequestConfirmationList({
const payeePersonalDetails = useMemo(() => payeePersonalDetailsProp ?? currentUserPersonalDetails, [payeePersonalDetailsProp, currentUserPersonalDetails]);
const shouldShowReadOnlySplits = useMemo(() => isPolicyExpenseChat || isReadOnly || isScanRequest, [isPolicyExpenseChat, isReadOnly, isScanRequest]);

useEffect(() => {
if (
!['-1', CONST.CUSTOM_UNITS.FAKE_P2P_ID].includes(customUnitRateID) ||
!isDistanceRequest ||
!isPolicyExpenseChat ||
!transactionID ||
!lastSelectedRate ||
isMovingTransactionFromTrackExpense ||
!selectedParticipants.some((participant) => participant.policyID === policy?.id)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only change added to this hook. This prevents situations where setCustomUnitRateID is called for a policy that is not a participant of the current transaction (was being called for example when for selfDM user tried to change rate and IOURequestStepUpgrade logic was used and updated transactions participants to the new workspace)

) {
return;
}

setCustomUnitRateID(transactionID, lastSelectedRate, transaction, policy);
}, [customUnitRateID, transactionID, lastSelectedRate, isDistanceRequest, isPolicyExpenseChat, isMovingTransactionFromTrackExpense, transaction, policy, selectedParticipants]);

const splitParticipants = useMemo(() => {
if (!isTypeSplit) {
return [];
Expand Down
2 changes: 1 addition & 1 deletion src/libs/GPSDraftDetailsUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ function getGPSCoordinates(gpsDraftDetails: GpsDraftDetails | undefined): string
}

function calculateGPSDistance(distanceInMeters: number, unit: Unit): number {
return roundToTwoDecimalPlaces(DistanceRequestUtils.convertDistanceUnit(distanceInMeters, unit));
return DistanceRequestUtils.convertDistanceUnit(distanceInMeters, unit);
}

function getGPSConvertedDistance(gpsDraftDetails: GpsDraftDetails | undefined, unit: Unit): number {
Expand Down
5 changes: 4 additions & 1 deletion src/libs/actions/IOU/MoneyRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -660,7 +660,10 @@ function handleMoneyRequestStepDistanceNavigation({
lastSelectedDistanceRates,
});
setTransactionReport(transactionID, {reportID: transactionReportID}, true);
setCustomUnitRateID(transactionID, rateID);
// Do not pass transaction and policy so it only updates customUnitRateID without changing distance and distance unit
// as it is set for Manual requests before this function is called and transaction may have
// obsolete customUnit values
setCustomUnitRateID(transactionID, rateID, undefined, undefined);
setMoneyRequestParticipantsFromReport(transactionID, targetReport, currentUserAccountID).then(() => {
Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(CONST.IOU.ACTION.CREATE, iouTypeTrackOrSubmit, transactionID, targetReport?.reportID));
});
Expand Down
57 changes: 47 additions & 10 deletions src/libs/actions/IOU/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
import {isOffline} from '@libs/Network/NetworkStore';
// eslint-disable-next-line @typescript-eslint/no-deprecated
import {buildNextStepNew, buildOptimisticNextStep} from '@libs/NextStepUtils';
import {roundToTwoDecimalPlaces} from '@libs/NumberUtils';
import * as NumberUtils from '@libs/NumberUtils';
import {getManagerMcTestParticipant, getPersonalDetailsForAccountIDs} from '@libs/OptionsListUtils';
import Parser from '@libs/Parser';
Expand Down Expand Up @@ -251,6 +252,7 @@
import type {ErrorFields, Errors, PendingAction, PendingFields} from '@src/types/onyx/OnyxCommon';
import type {PaymentMethodType} from '@src/types/onyx/OriginalMessage';
import type {CurrentUserPersonalDetails} from '@src/types/onyx/PersonalDetails';
import type {Unit} from '@src/types/onyx/Policy';
import type {QuickActionName} from '@src/types/onyx/QuickAction';
import type RecentlyUsedTags from '@src/types/onyx/RecentlyUsedTags';
import type {ReportNextStep} from '@src/types/onyx/Report';
Expand Down Expand Up @@ -790,7 +792,7 @@
};

let allPersonalDetails: OnyxTypes.PersonalDetailsList = {};
Onyx.connect({

Check warning on line 795 in src/libs/actions/IOU/index.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
callback: (value) => {
allPersonalDetails = value ?? {};
Expand Down Expand Up @@ -883,7 +885,7 @@
};

let allTransactions: NonNullable<OnyxCollection<OnyxTypes.Transaction>> = {};
Onyx.connect({

Check warning on line 888 in src/libs/actions/IOU/index.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.TRANSACTION,
waitForCollectionCallback: true,
callback: (value) => {
Expand All @@ -897,7 +899,7 @@
});

let allTransactionDrafts: NonNullable<OnyxCollection<OnyxTypes.Transaction>> = {};
Onyx.connect({

Check warning on line 902 in src/libs/actions/IOU/index.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.TRANSACTION_DRAFT,
waitForCollectionCallback: true,
callback: (value) => {
Expand All @@ -906,7 +908,7 @@
});

let allTransactionViolations: NonNullable<OnyxCollection<OnyxTypes.TransactionViolations>> = {};
Onyx.connect({

Check warning on line 911 in src/libs/actions/IOU/index.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS,
waitForCollectionCallback: true,
callback: (value) => {
Expand All @@ -920,7 +922,7 @@
});

let allPolicyTags: OnyxCollection<OnyxTypes.PolicyTagLists> = {};
Onyx.connect({

Check warning on line 925 in src/libs/actions/IOU/index.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.POLICY_TAGS,
waitForCollectionCallback: true,
callback: (value) => {
Expand All @@ -933,7 +935,7 @@
});

let allReports: OnyxCollection<OnyxTypes.Report>;
Onyx.connect({

Check warning on line 938 in src/libs/actions/IOU/index.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT,
waitForCollectionCallback: true,
callback: (value) => {
Expand All @@ -942,7 +944,7 @@
});

let allReportNameValuePairs: OnyxCollection<OnyxTypes.ReportNameValuePairs>;
Onyx.connect({

Check warning on line 947 in src/libs/actions/IOU/index.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS,
waitForCollectionCallback: true,
callback: (value) => {
Expand All @@ -952,7 +954,7 @@

let userAccountID = -1;
let currentUserEmail = '';
Onyx.connect({

Check warning on line 957 in src/libs/actions/IOU/index.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.SESSION,
callback: (value) => {
currentUserEmail = value?.email ?? '';
Expand All @@ -961,7 +963,7 @@
});

let deprecatedCurrentUserPersonalDetails: OnyxEntry<OnyxTypes.PersonalDetails>;
Onyx.connect({

Check warning on line 966 in src/libs/actions/IOU/index.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
callback: (value) => {
deprecatedCurrentUserPersonalDetails = value?.[userAccountID] ?? undefined;
Expand All @@ -969,7 +971,7 @@
});

let allReportActions: OnyxCollection<OnyxTypes.ReportActions>;
Onyx.connect({

Check warning on line 974 in src/libs/actions/IOU/index.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT_ACTIONS,
waitForCollectionCallback: true,
callback: (actions) => {
Expand Down Expand Up @@ -1506,15 +1508,48 @@
}

/**
* Set custom unit rateID for the transaction draft
* Set custom unit rateID for the transaction draft, also updates quantity and distanceUnit
* if passed transaction previously had it to make sure that transaction does not have inconsistent
* states (for example distanceUnit not matching distance unit of the new customUnitRateID)
*/
function setCustomUnitRateID(transactionID: string, customUnitRateID: string | undefined) {
function setCustomUnitRateID(transactionID: string, customUnitRateID: string | undefined, transaction: OnyxEntry<OnyxTypes.Transaction>, policy: OnyxEntry<OnyxTypes.Policy>) {
const isFakeP2PRate = customUnitRateID === CONST.CUSTOM_UNITS.FAKE_P2P_ID;

let newDistanceUnit: Unit | undefined;
let newQuantity: number | undefined;

if (customUnitRateID && transaction) {
const distanceRate = isFakeP2PRate
? DistanceRequestUtils.getRate({transaction, useTransactionDistanceUnit: false, policy})
: DistanceRequestUtils.getRateByCustomUnitRateID({policy, customUnitRateID});

const transactionDistanceUnit = transaction.comment?.customUnit?.distanceUnit;
const transactionQuantity = transaction.comment?.customUnit?.quantity;

const shouldUpdateDistanceUnit = !!transactionDistanceUnit && !!distanceRate?.unit;
const shouldUpdateQuantity = transactionQuantity !== null && transactionQuantity !== undefined;

if (shouldUpdateDistanceUnit) {
newDistanceUnit = distanceRate.unit;
}
if (shouldUpdateQuantity && !!distanceRate?.unit) {
const newQuantityInMeters = getDistanceInMeters(transaction, transactionDistanceUnit);

// getDistanceInMeters returns 0 only if there was not enough input to get the correct
// distance in meters or if the current transaction distance is 0
if (newQuantityInMeters !== 0) {
newQuantity = DistanceRequestUtils.convertDistanceUnit(newQuantityInMeters, distanceRate.unit);
}
}
}

Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transactionID}`, {
comment: {
customUnit: {
customUnitRateID,
...(!isFakeP2PRate && {defaultP2PRate: null}),
distanceUnit: newDistanceUnit,
quantity: newQuantity,
},
},
});
Expand Down Expand Up @@ -1662,8 +1697,8 @@
Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transaction?.transactionID}`, newTransaction);
}

function setMoneyRequestDistance(transactionID: string, distanceAsFloat: number, isDraft: boolean) {
Onyx.merge(`${isDraft ? ONYXKEYS.COLLECTION.TRANSACTION_DRAFT : ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, {comment: {customUnit: {quantity: distanceAsFloat}}});
function setMoneyRequestDistance(transactionID: string, distanceAsFloat: number, isDraft: boolean, distanceUnit: Unit) {
Onyx.merge(`${isDraft ? ONYXKEYS.COLLECTION.TRANSACTION_DRAFT : ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, {comment: {customUnit: {quantity: distanceAsFloat, distanceUnit}}});
}

/**
Expand Down Expand Up @@ -1719,18 +1754,20 @@
Onyx.merge(ONYXKEYS.NVP_LAST_SELECTED_DISTANCE_RATES, {[policy.id]: customUnitRateID});
}

const distanceRate = DistanceRequestUtils.getRateByCustomUnitRateID({policy, customUnitRateID});
const newDistanceUnit = getDistanceRateCustomUnit(policy)?.attributes?.unit;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DistanceRequestUtils.getRateByCustomUnitRateID() was basically using this function under the hood, but by using it directly we do not require the transaction to have the passed customUnitRateID to be present in the transaction at the moment, which is crucial for when this function is called from CreateDistanceRatePage component immediately after customUnitRate is created (so policy object does not have it persisted yet)

const transaction = isDraft ? allTransactionDrafts[`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transactionID}`] : allTransactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];

let newDistance;
if (distanceRate?.unit && distanceRate?.unit !== transaction?.comment?.customUnit?.distanceUnit) {
newDistance = DistanceRequestUtils.convertDistanceUnit(getDistanceInMeters(transaction, transaction?.comment?.customUnit?.distanceUnit), distanceRate.unit);
if (newDistanceUnit && newDistanceUnit !== transaction?.comment?.customUnit?.distanceUnit) {
newDistance = DistanceRequestUtils.convertDistanceUnit(getDistanceInMeters(transaction, transaction?.comment?.customUnit?.distanceUnit), newDistanceUnit);
}

Onyx.merge(`${isDraft ? ONYXKEYS.COLLECTION.TRANSACTION_DRAFT : ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, {
comment: {
customUnit: {
customUnitRateID,
...(!!policy && {defaultP2PRate: null}),
...(distanceRate && {distanceUnit: distanceRate.unit}),
...(newDistanceUnit && {distanceUnit: newDistanceUnit}),
...(newDistance && {quantity: newDistance}),
},
},
Expand Down Expand Up @@ -7529,7 +7566,7 @@
attendees: attendees ? JSON.stringify(attendees) : undefined,
currency,
comment,
distance,
distance: distance !== undefined ? roundToTwoDecimalPlaces(distance) : undefined,
created,
merchant,
iouReportID: iouReport?.reportID,
Expand Down Expand Up @@ -8374,7 +8411,7 @@
createdIOUReportActionID,
reportPreviewReportActionID: reportPreviewAction.reportActionID,
waypoints: JSON.stringify(sanitizedWaypoints),
distance,
distance: distance !== undefined ? roundToTwoDecimalPlaces(distance) : undefined,
receipt,
odometerStart,
odometerEnd,
Expand Down
2 changes: 1 addition & 1 deletion src/pages/iou/request/step/IOURequestStepDestination.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ function IOURequestStepDestination({
setCustomUnitID(transactionID, customUnit.customUnitID);
setMoneyRequestCategory(transactionID, customUnit?.defaultCategory ?? '', undefined);
}
setCustomUnitRateID(transactionID, destination.keyForList ?? '');
setCustomUnitRateID(transactionID, destination.keyForList ?? '', transaction, policy);
setMoneyRequestCurrency(transactionID, destination.currency);
clearSubrates(transactionID);
}
Expand Down
27 changes: 21 additions & 6 deletions src/pages/iou/request/step/IOURequestStepDistanceManual.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import useSelfDMReport from '@hooks/useSelfDMReport';
import useThemeStyles from '@hooks/useThemeStyles';
import {getMoneyRequestParticipantsFromReport, setMoneyRequestDistance, updateMoneyRequestDistance} from '@libs/actions/IOU';
import {handleMoneyRequestStepDistanceNavigation} from '@libs/actions/IOU/MoneyRequest';
import {setDraftSplitTransaction} from '@libs/actions/IOU/Split';
import {canUseTouchScreen} from '@libs/DeviceCapabilities';
import DistanceRequestUtils from '@libs/DistanceRequestUtils';
import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID';
Expand All @@ -30,7 +29,7 @@ import Navigation from '@libs/Navigation/Navigation';
import {roundToTwoDecimalPlaces} from '@libs/NumberUtils';
import {isArchivedReport, isPolicyExpenseChat as isPolicyExpenseChatUtils} from '@libs/ReportUtils';
import shouldUseDefaultExpensePolicyUtil from '@libs/shouldUseDefaultExpensePolicy';
import {getRateID} from '@libs/TransactionUtils';
import {getDistanceInMeters, getRateID} from '@libs/TransactionUtils';
import variables from '@styles/variables';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
Expand Down Expand Up @@ -102,8 +101,16 @@ function IOURequestStepDistanceManual({
const shouldUseDefaultExpensePolicy = useMemo(() => shouldUseDefaultExpensePolicyUtil(iouType, defaultExpensePolicy), [iouType, defaultExpensePolicy]);

const customUnitRateID = getRateID(transaction);
const unit = DistanceRequestUtils.getRate({transaction, policy: shouldUseDefaultExpensePolicy ? defaultExpensePolicy : policy}).unit;
const distance = typeof transaction?.comment?.customUnit?.quantity === 'number' ? roundToTwoDecimalPlaces(transaction.comment.customUnit.quantity) : undefined;
// to make sure the correct distance amount and unit will be shown we use distance unit
// from defaultExpensePolicy or current report's policy instead of from transaction and
// then we use transaction data (distanceUnit and quantity) for conversions
const unit = DistanceRequestUtils.getRate({
transaction,
policy: shouldUseDefaultExpensePolicy ? defaultExpensePolicy : policy,
useTransactionDistanceUnit: false,
}).unit;
const distanceInMeters = getDistanceInMeters(transaction, transaction?.comment?.customUnit?.distanceUnit ? transaction.comment.customUnit.distanceUnit : unit);
const distance = typeof transaction?.comment?.customUnit?.quantity === 'number' ? roundToTwoDecimalPlaces(DistanceRequestUtils.convertDistanceUnit(distanceInMeters, unit)) : undefined;
const isASAPSubmitBetaEnabled = isBetaEnabled(CONST.BETAS.ASAP_SUBMIT);

useEffect(() => {
Expand Down Expand Up @@ -150,10 +157,17 @@ function IOURequestStepDistanceManual({
const navigateToNextPage = useCallback(
(amount: string) => {
const distanceAsFloat = roundToTwoDecimalPlaces(parseFloat(amount));
setMoneyRequestDistance(transactionID, distanceAsFloat, isTransactionDraft);
setMoneyRequestDistance(transactionID, distanceAsFloat, isTransactionDraft, unit);

if (action === CONST.IOU.ACTION.EDIT) {
if (distance !== distanceAsFloat) {
const transactionDistanceUnit = transaction?.comment?.customUnit?.distanceUnit;

const isDistanceChanged = distance !== distanceAsFloat;
const isDistanceUnitChanged = transactionDistanceUnit && transactionDistanceUnit !== unit;

const shouldUpdateTransaction = isDistanceChanged || isDistanceUnitChanged;

if (shouldUpdateTransaction) {
updateMoneyRequestDistance({
transactionID: transaction?.transactionID,
transactionThreadReport: report,
Expand Down Expand Up @@ -244,6 +258,7 @@ function IOURequestStepDistanceManual({
policyCategories,
parentReportNextStep,
recentWaypoints,
unit,
selfDMReport,
betas,
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ function IOURequestStepDistanceOdometer({
const calculatedDistance = roundToTwoDecimalPlaces(distance);

// Store total distance in transaction.comment.customUnit.quantity
setMoneyRequestDistance(transactionID, calculatedDistance, isTransactionDraft);
setMoneyRequestDistance(transactionID, calculatedDistance, isTransactionDraft, unit);

if (isEditing) {
// Update existing transaction
Expand Down Expand Up @@ -509,7 +509,7 @@ function IOURequestStepDistanceOdometer({
lastSelectedDistanceRates,
});
setTransactionReport(transactionID, {reportID: transactionReportID}, true);
setCustomUnitRateID(transactionID, rateID);
setCustomUnitRateID(transactionID, rateID, transaction, policy);
setMoneyRequestParticipantsFromReport(transactionID, activePolicyExpenseChat, currentUserPersonalDetails.accountID).then(() => {
Navigation.navigate(
ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(
Expand Down
Loading
Loading