From 50add7d41e8d4e5373e9a85002363cd82a08b030 Mon Sep 17 00:00:00 2001 From: dukenv0307 Date: Mon, 23 Oct 2023 11:23:12 +0700 Subject: [PATCH 1/2] update optimistic data for unit currency --- src/libs/actions/Policy.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/libs/actions/Policy.js b/src/libs/actions/Policy.js index 89324dd3548..f4df88c0258 100644 --- a/src/libs/actions/Policy.js +++ b/src/libs/actions/Policy.js @@ -583,6 +583,9 @@ function clearAvatarErrors(policyID) { * @param {String} currency */ function updateGeneralSettings(policyID, name, currency) { + const policy = allPolicies[`${ONYXKEYS.COLLECTION.POLICY}${policyID}`]; + const distanceUnit = _.find(_.values(policy.customUnits), (unit) => unit.name === CONST.CUSTOM_UNITS.NAME_DISTANCE); + const distanceRate = _.find(_.values(distanceUnit.rates), (rate) => rate.name === CONST.CUSTOM_UNITS.DEFAULT_RATE); const optimisticData = [ { // We use SET because it's faster than merge and avoids a race condition when setting the currency and navigating the user to the Bank account page in confirmCurrencyChangeAndHideModal @@ -601,6 +604,17 @@ function updateGeneralSettings(policyID, name, currency) { }, name, outputCurrency: currency, + customUnits: { + [distanceUnit.customUnitID]: { + ...distanceUnit, + rates: { + [distanceRate.customUnitRateID]: { + ...distanceRate, + currency, + }, + }, + }, + }, }, }, ]; @@ -626,6 +640,9 @@ function updateGeneralSettings(policyID, name, currency) { errorFields: { generalSettings: ErrorUtils.getMicroSecondOnyxError('workspace.editor.genericFailureMessage'), }, + customUnits: { + [distanceUnit.customUnitID]: distanceUnit, + }, }, }, ]; From 5fffb48f2c18b47d2e2bda0075b7c0bd8bbb71b9 Mon Sep 17 00:00:00 2001 From: dukenv0307 Date: Mon, 23 Oct 2023 11:52:49 +0700 Subject: [PATCH 2/2] safely check --- src/libs/actions/Policy.js | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/libs/actions/Policy.js b/src/libs/actions/Policy.js index f4df88c0258..f0a24f7756d 100644 --- a/src/libs/actions/Policy.js +++ b/src/libs/actions/Policy.js @@ -585,7 +585,7 @@ function clearAvatarErrors(policyID) { function updateGeneralSettings(policyID, name, currency) { const policy = allPolicies[`${ONYXKEYS.COLLECTION.POLICY}${policyID}`]; const distanceUnit = _.find(_.values(policy.customUnits), (unit) => unit.name === CONST.CUSTOM_UNITS.NAME_DISTANCE); - const distanceRate = _.find(_.values(distanceUnit.rates), (rate) => rate.name === CONST.CUSTOM_UNITS.DEFAULT_RATE); + const distanceRate = _.find(_.values(distanceUnit ? distanceUnit.rates : {}), (rate) => rate.name === CONST.CUSTOM_UNITS.DEFAULT_RATE); const optimisticData = [ { // We use SET because it's faster than merge and avoids a race condition when setting the currency and navigating the user to the Bank account page in confirmCurrencyChangeAndHideModal @@ -604,17 +604,21 @@ function updateGeneralSettings(policyID, name, currency) { }, name, outputCurrency: currency, - customUnits: { - [distanceUnit.customUnitID]: { - ...distanceUnit, - rates: { - [distanceRate.customUnitRateID]: { - ...distanceRate, - currency, - }, - }, - }, - }, + ...(distanceUnit + ? { + customUnits: { + [distanceUnit.customUnitID]: { + ...distanceUnit, + rates: { + [distanceRate.customUnitRateID]: { + ...distanceRate, + currency, + }, + }, + }, + }, + } + : {}), }, }, ]; @@ -640,9 +644,13 @@ function updateGeneralSettings(policyID, name, currency) { errorFields: { generalSettings: ErrorUtils.getMicroSecondOnyxError('workspace.editor.genericFailureMessage'), }, - customUnits: { - [distanceUnit.customUnitID]: distanceUnit, - }, + ...(distanceUnit + ? { + customUnits: { + [distanceUnit.customUnitID]: distanceUnit, + }, + } + : {}), }, }, ];