Skip to content

Commit

Permalink
fix: update distance rates when changing currency offline
Browse files Browse the repository at this point in the history
  • Loading branch information
MrMuzyk committed Mar 27, 2024
1 parent 43f8b39 commit a8dd248
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 27 deletions.
66 changes: 41 additions & 25 deletions src/libs/actions/Policy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1499,13 +1499,35 @@ function clearAvatarErrors(policyID: string) {
*/
function updateGeneralSettings(policyID: string, name: string, currency: string) {
const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${policyID}`];
const distanceUnit = Object.values(policy?.customUnits ?? {}).find((unit) => unit.name === CONST.CUSTOM_UNITS.NAME_DISTANCE);
const customUnitID = distanceUnit?.customUnitID;

if (!policy) {
if (!policy || !customUnitID) {
return;
}

const distanceUnit = Object.values(policy?.customUnits ?? {}).find((unit) => unit.name === CONST.CUSTOM_UNITS.NAME_DISTANCE);
const distanceRate = Object.values(distanceUnit?.rates ?? {}).find((rate) => rate.name === CONST.CUSTOM_UNITS.DEFAULT_RATE);
const currentRates = distanceUnit?.rates ?? {};
const optimisticRates: Record<string, Rate> = {};
const finallyRates: Record<string, Rate> = {};
const failureRates: Record<string, Rate> = {};

for (const rateID of Object.keys(currentRates)) {
optimisticRates[rateID] = {
...currentRates[rateID],
pendingFields: {currency: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE},
currency,
};
finallyRates[rateID] = {
...currentRates[rateID],
pendingFields: {currency: null},
currency,
};
failureRates[rateID] = {
...currentRates[rateID],
pendingFields: {currency: null},
errorFields: {currency: ErrorUtils.getMicroSecondOnyxError('common.genericErrorMessage')},
};
}

const optimisticData: OnyxUpdate[] = [
{
Expand All @@ -1526,21 +1548,12 @@ function updateGeneralSettings(policyID: string, name: string, currency: string)
},
name,
outputCurrency: currency,
...(distanceUnit?.customUnitID && distanceRate?.customUnitRateID
? {
customUnits: {
[distanceUnit?.customUnitID]: {
...distanceUnit,
rates: {
[distanceRate?.customUnitRateID]: {
...distanceRate,
currency,
},
},
},
},
}
: {}),
customUnits: {
[customUnitID]: {
...distanceUnit,
rates: optimisticRates,
},
},
},
},
];
Expand All @@ -1552,6 +1565,11 @@ function updateGeneralSettings(policyID: string, name: string, currency: string)
pendingFields: {
generalSettings: null,
},
customUnits: {
[customUnitID]: {
rates: finallyRates,
},
},
},
},
];
Expand All @@ -1564,13 +1582,11 @@ function updateGeneralSettings(policyID: string, name: string, currency: string)
errorFields: {
generalSettings: ErrorUtils.getMicroSecondOnyxError('workspace.editor.genericFailureMessage'),
},
...(distanceUnit?.customUnitID
? {
customUnits: {
[distanceUnit.customUnitID]: distanceUnit,
},
}
: {}),
customUnits: {
[customUnitID]: {
rates: failureRates,
},
},
},
},
];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ function PolicyDistanceRateDetailsPage({policy, route}: PolicyDistanceRateDetail
</OfflineWithFeedback>
<OfflineWithFeedback
errors={ErrorUtils.getLatestErrorField(rate, 'rate')}
pendingAction={rate?.pendingFields?.rate}
pendingAction={rate?.pendingFields?.rate ?? rate?.pendingFields?.currency}
errorRowStyles={styles.mh5}
onClose={() => clearErrorFields('rate')}
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ function PolicyDistanceRatesPage({policy, route}: PolicyDistanceRatesPageProps)
keyForList: value.customUnitRateID ?? '',
isSelected: selectedDistanceRates.find((rate) => rate.customUnitRateID === value.customUnitRateID) !== undefined,
isDisabled: value.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE,
pendingAction: value.pendingAction ?? value.pendingFields?.rate ?? value.pendingFields?.enabled,
pendingAction: value.pendingAction ?? value.pendingFields?.rate ?? value.pendingFields?.enabled ?? value.pendingFields?.currency,
errors: value.errors ?? undefined,
rightElement: (
<View style={styles.flexRow}>
Expand Down

0 comments on commit a8dd248

Please sign in to comment.