diff --git a/src/libs/actions/Policy/Category.ts b/src/libs/actions/Policy/Category.ts index d639c68216df..4f32eb0b81ba 100644 --- a/src/libs/actions/Policy/Category.ts +++ b/src/libs/actions/Policy/Category.ts @@ -482,6 +482,30 @@ function deleteWorkspaceCategories(policyID: string, categoryNamesToDelete: stri } function enablePolicyCategories(policyID: string, enabled: boolean) { + const onyxUpdatesToDisableCategories: OnyxUpdate[] = []; + if (!enabled) { + onyxUpdatesToDisableCategories.push( + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyID}`, + value: Object.fromEntries( + Object.entries(allPolicyCategories?.[`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyID}`] ?? {}).map(([categoryName]) => [ + categoryName, + { + enabled: false, + }, + ]), + ), + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, + value: { + requiresCategory: false, + }, + }, + ); + } const onyxData: OnyxData = { optimisticData: [ { @@ -520,6 +544,10 @@ function enablePolicyCategories(policyID: string, enabled: boolean) { ], }; + if (onyxUpdatesToDisableCategories.length > 0) { + onyxData.optimisticData?.push(...onyxUpdatesToDisableCategories); + } + const parameters: EnablePolicyCategoriesParams = {policyID, enabled}; API.write(WRITE_COMMANDS.ENABLE_POLICY_CATEGORIES, parameters, onyxData); diff --git a/src/libs/actions/Policy/DistanceRate.ts b/src/libs/actions/Policy/DistanceRate.ts index d22299e9e2fc..c10e4d87484c 100644 --- a/src/libs/actions/Policy/DistanceRate.ts +++ b/src/libs/actions/Policy/DistanceRate.ts @@ -126,6 +126,39 @@ function enablePolicyDistanceRates(policyID: string, enabled: boolean) { ], }; + if (!enabled) { + const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${policyID}`]; + const customUnitID = Object.keys(policy?.customUnits ?? {})[0]; + const customUnit = customUnitID ? policy?.customUnits?.[customUnitID] : undefined; + + const rateEntries = Object.entries(customUnit?.rates ?? {}); + // find the rate to be enabled after disabling the distance rate feature + const rateEntryToBeEnabled = rateEntries[0]; + + onyxData.optimisticData?.push({ + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, + value: { + customUnits: { + [customUnitID]: { + rates: Object.fromEntries( + rateEntries.map((rateEntry) => { + const [rateID, rate] = rateEntry; + return [ + rateID, + { + ...rate, + enabled: rateID === rateEntryToBeEnabled[0], + }, + ]; + }), + ), + }, + }, + }, + }); + } + const parameters: EnablePolicyDistanceRatesParams = {policyID, enabled}; API.write(WRITE_COMMANDS.ENABLE_POLICY_DISTANCE_RATES, parameters, onyxData); diff --git a/src/libs/actions/Policy/Tag.ts b/src/libs/actions/Policy/Tag.ts index d8cb0ef8b028..dfb41b2d9015 100644 --- a/src/libs/actions/Policy/Tag.ts +++ b/src/libs/actions/Policy/Tag.ts @@ -500,7 +500,8 @@ function enablePolicyTags(policyID: string, enabled: boolean) { }, ], }; - const policyTagList = allPolicyTags?.[policyID]; + + const policyTagList = allPolicyTags?.[`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`]; if (!policyTagList) { const defaultTagList: PolicyTagList = { Tag: { @@ -520,6 +521,33 @@ function enablePolicyTags(policyID: string, enabled: boolean) { key: `${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`, value: null, }); + } else if (!enabled) { + const policyTag = PolicyUtils.getTagLists(policyTagList)[0]; + onyxData.optimisticData?.push( + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`, + value: { + [policyTag.name]: { + tags: Object.fromEntries( + Object.keys(policyTag.tags).map((tagName) => [ + tagName, + { + enabled: false, + }, + ]), + ), + }, + }, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, + value: { + requiresTag: false, + }, + }, + ); } const parameters: EnablePolicyTagsParams = {policyID, enabled}; @@ -692,17 +720,17 @@ function setPolicyTagsRequired(policyID: string, requiresTag: boolean, tagListIn } export { - openPolicyTagsPage, buildOptimisticPolicyRecentlyUsedTags, setPolicyRequiresTag, setPolicyTagsRequired, - renamePolicyTaglist, - enablePolicyTags, createPolicyTag, - renamePolicyTag, clearPolicyTagErrors, clearPolicyTagListError, deletePolicyTags, + enablePolicyTags, + openPolicyTagsPage, + renamePolicyTag, + renamePolicyTaglist, setWorkspaceTagEnabled, };