From 96e0fd8a02583dd245d38016d25f9687827a50de Mon Sep 17 00:00:00 2001 From: cretadn22 Date: Sat, 11 May 2024 10:36:23 +0700 Subject: [PATCH 1/2] filter out rate with pending action --- .../distanceRates/PolicyDistanceRateDetailsPage.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx b/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx index a75fc74c33cc..942f802159ac 100644 --- a/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx +++ b/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx @@ -47,8 +47,9 @@ function PolicyDistanceRateDetailsPage({policy, route}: PolicyDistanceRateDetail const customUnit = customUnits[Object.keys(customUnits)[0]]; const rate = customUnit.rates[rateID]; const currency = rate.currency ?? CONST.CURRENCY.USD; - const canDeleteRate = Object.values(customUnit.rates).filter((distanceRate) => distanceRate.enabled).length > 1 || !rate.enabled; - const canDisableRate = Object.values(customUnit.rates).filter((distanceRate) => distanceRate.enabled).length > 1; + const canDisableorDeleteRate = Object.values(customUnit.rates).some( + (distanceRate: Rate) => distanceRate.enabled && rateID !== distanceRate.customUnitRateID && distanceRate.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE, + ); const errorFields = rate.errorFields; const editRateValue = () => { @@ -56,7 +57,7 @@ function PolicyDistanceRateDetailsPage({policy, route}: PolicyDistanceRateDetail }; const toggleRate = () => { - if (!rate.enabled || canDisableRate) { + if (!rate.enabled || canDisableorDeleteRate) { Policy.setPolicyDistanceRatesEnabled(policyID, customUnit, [{...rate, enabled: !rate.enabled}]); } else { setIsWarningModalVisible(true); @@ -77,7 +78,7 @@ function PolicyDistanceRateDetailsPage({policy, route}: PolicyDistanceRateDetail icon: Expensicons.Trashcan, text: translate('workspace.distanceRates.deleteDistanceRate'), onSelected: () => { - if (canDeleteRate) { + if (canDisableorDeleteRate) { setIsDeleteModalVisible(true); return; } From 8bcf840b87d70895efaa9e32541c04356cd1c655 Mon Sep 17 00:00:00 2001 From: cretadn22 Date: Tue, 14 May 2024 22:38:40 +0700 Subject: [PATCH 2/2] add a comment to explain logic --- .../distanceRates/PolicyDistanceRateDetailsPage.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx b/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx index e4be14063ba0..c81e5c6cfe8f 100644 --- a/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx +++ b/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx @@ -48,7 +48,9 @@ function PolicyDistanceRateDetailsPage({policy, route}: PolicyDistanceRateDetail const customUnit = customUnits[Object.keys(customUnits)[0]]; const rate = customUnit?.rates[rateID]; const currency = rate?.currency ?? CONST.CURRENCY.USD; - const canDisableorDeleteRate = Object.values(customUnit?.rates).some( + + // Rates can be disabled or deleted as long as in the remaining rates there is always at least one enabled rate and there are no pending delete action + const canDisableOrDeleteRate = Object.values(customUnit?.rates).some( (distanceRate: Rate) => distanceRate?.enabled && rateID !== distanceRate?.customUnitRateID && distanceRate?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE, ); const errorFields = rate?.errorFields; @@ -62,7 +64,7 @@ function PolicyDistanceRateDetailsPage({policy, route}: PolicyDistanceRateDetail }; const toggleRate = () => { - if (!rate?.enabled || canDisableorDeleteRate) { + if (!rate?.enabled || canDisableOrDeleteRate) { Policy.setPolicyDistanceRatesEnabled(policyID, customUnit, [{...rate, enabled: !rate?.enabled}]); } else { setIsWarningModalVisible(true); @@ -83,7 +85,7 @@ function PolicyDistanceRateDetailsPage({policy, route}: PolicyDistanceRateDetail icon: Expensicons.Trashcan, text: translate('workspace.distanceRates.deleteDistanceRate'), onSelected: () => { - if (canDisableorDeleteRate) { + if (canDisableOrDeleteRate) { setIsDeleteModalVisible(true); return; }