diff --git a/src/libs/actions/Policy/DistanceRate.ts b/src/libs/actions/Policy/DistanceRate.ts index 6b0a9c5c3ee0..f3f8dfb4f3c7 100644 --- a/src/libs/actions/Policy/DistanceRate.ts +++ b/src/libs/actions/Policy/DistanceRate.ts @@ -530,12 +530,12 @@ function updateDistanceTaxClaimableValue(policyID: string, customUnit: CustomUni for (const rateID of Object.keys(customUnit.rates)) { if (rateIDs.includes(rateID)) { const foundRate = customUnitRates.find((rate) => rate.customUnitRateID === rateID); - optimisticRates[rateID] = {...foundRate, pendingFields: {rate: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE}}; - successRates[rateID] = {...foundRate, pendingFields: {rate: null}}; + optimisticRates[rateID] = {...foundRate, pendingFields: {taxClaimablePercentage: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE}}; + successRates[rateID] = {...foundRate, pendingFields: {taxClaimablePercentage: null}}; failureRates[rateID] = { ...currentRates[rateID], - pendingFields: {rate: null}, - errorFields: {rate: ErrorUtils.getMicroSecondOnyxError('common.genericErrorMessage')}, + pendingFields: {taxClaimablePercentage: null}, + errorFields: {taxClaimablePercentage: ErrorUtils.getMicroSecondOnyxError('common.genericErrorMessage')}, }; } } @@ -601,12 +601,12 @@ function updateDistanceTaxRate(policyID: string, customUnit: CustomUnit, customU for (const rateID of Object.keys(customUnit.rates)) { if (rateIDs.includes(rateID)) { const foundRate = customUnitRates.find((rate) => rate.customUnitRateID === rateID); - optimisticRates[rateID] = {...foundRate, pendingFields: {rate: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE}}; - successRates[rateID] = {...foundRate, pendingFields: {rate: null}}; + optimisticRates[rateID] = {...foundRate, pendingFields: {taxRateExternalID: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE}}; + successRates[rateID] = {...foundRate, pendingFields: {taxRateExternalID: null}}; failureRates[rateID] = { ...currentRates[rateID], - pendingFields: {rate: null}, - errorFields: {rate: ErrorUtils.getMicroSecondOnyxError('common.genericErrorMessage')}, + pendingFields: {taxRateExternalID: null}, + errorFields: {taxRateExternalID: ErrorUtils.getMicroSecondOnyxError('common.genericErrorMessage')}, }; } } diff --git a/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx b/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx index 360cd1537bb7..70b829d41159 100644 --- a/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx +++ b/src/pages/workspace/distanceRates/PolicyDistanceRateDetailsPage.tsx @@ -27,7 +27,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 {Rate} from '@src/types/onyx/Policy'; +import type {Rate, TaxRateAttributes} from '@src/types/onyx/Policy'; type PolicyDistanceRateDetailsPageOnyxProps = { /** Policy details */ @@ -90,7 +90,7 @@ function PolicyDistanceRateDetailsPage({policy, route}: PolicyDistanceRateDetail const taxClaimableValueToDisplay = taxClaimablePercentage && rate.rate ? CurrencyUtils.convertAmountToDisplayString(taxClaimablePercentage * rate.rate, currency) : ''; const unitToDisplay = translate(`common.${customUnit?.attributes?.unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES}`); - const clearErrorFields = (fieldName: keyof Rate) => { + const clearErrorFields = (fieldName: keyof Rate | keyof TaxRateAttributes) => { DistanceRate.clearPolicyDistanceRateErrorFields(policyID, customUnit.customUnitID, rateID, {...errorFields, [fieldName]: null}); }; @@ -138,10 +138,10 @@ function PolicyDistanceRateDetailsPage({policy, route}: PolicyDistanceRateDetail {isDistanceTrackTaxEnabled && ( clearErrorFields('attributes')} + onClose={() => clearErrorFields('taxRateExternalID')} > clearErrorFields('attributes')} + onClose={() => clearErrorFields('taxClaimablePercentage')} > ; @@ -41,6 +43,8 @@ function PolicyDistanceRateTaxRateEditPage({route, policy}: PolicyDistanceRateTa text: `${value.name} (${value.value})`, isSelected: taxRateExternalID === key, keyForList: key, + pendingAction: value.pendingAction, + isDisabled: value.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE, })); return result; }, [policy, taxRateExternalID]); diff --git a/src/pages/workspace/distanceRates/PolicyDistanceRatesSettingsPage.tsx b/src/pages/workspace/distanceRates/PolicyDistanceRatesSettingsPage.tsx index 21370f90a415..9080685d3080 100644 --- a/src/pages/workspace/distanceRates/PolicyDistanceRatesSettingsPage.tsx +++ b/src/pages/workspace/distanceRates/PolicyDistanceRatesSettingsPage.tsx @@ -123,7 +123,7 @@ function PolicyDistanceRatesSettingsPage({policy, policyCategories, route}: Poli )} - + {translate('workspace.distanceRates.trackTax')} {!isPolicyTrackTaxEnabled && ( - - + + {translate('workspace.distanceRates.taxFeatureNotEnabledMessage')} { Navigation.dismissModal(); Navigation.navigate(ROUTES.WORKSPACE_MORE_FEATURES.getRoute(policyID)); diff --git a/src/types/onyx/Policy.ts b/src/types/onyx/Policy.ts index 070803e2e2fd..0137f1f55bc5 100644 --- a/src/types/onyx/Policy.ts +++ b/src/types/onyx/Policy.ts @@ -12,16 +12,19 @@ type TaxRateAttributes = { taxRateExternalID?: string; }; -type Rate = OnyxCommon.OnyxValueWithOfflineFeedback<{ - name?: string; - rate?: number; - currency?: string; - customUnitRateID?: string; - enabled?: boolean; - errors?: OnyxCommon.Errors; - errorFields?: OnyxCommon.ErrorFields; - attributes?: TaxRateAttributes; -}>; +type Rate = OnyxCommon.OnyxValueWithOfflineFeedback< + { + name?: string; + rate?: number; + currency?: string; + customUnitRateID?: string; + enabled?: boolean; + errors?: OnyxCommon.Errors; + errorFields?: OnyxCommon.ErrorFields; + attributes?: TaxRateAttributes; + }, + keyof TaxRateAttributes +>; type Attributes = { unit: Unit; @@ -567,6 +570,7 @@ export type { CustomUnit, Attributes, Rate, + TaxRateAttributes, TaxRate, TaxRates, TaxRatesWithDefault,