diff --git a/src/libs/API/parameters/SetPolicyTagsEnabled.ts b/src/libs/API/parameters/SetPolicyTagsEnabled.ts index 86720b84bf8b..67928a3227e3 100644 --- a/src/libs/API/parameters/SetPolicyTagsEnabled.ts +++ b/src/libs/API/parameters/SetPolicyTagsEnabled.ts @@ -5,6 +5,11 @@ type SetPolicyTagsEnabled = { * Array<{name: string; enabled: boolean}> */ tags: string; + /** + * When the tags are imported as multi level tags, the index of the top + * most tag list item + */ + tagListIndex: number; }; export default SetPolicyTagsEnabled; diff --git a/src/libs/actions/Policy.ts b/src/libs/actions/Policy.ts index 3e09524e1dd1..08499edc7e5d 100644 --- a/src/libs/actions/Policy.ts +++ b/src/libs/actions/Policy.ts @@ -54,6 +54,7 @@ import type { UpdateWorkspaceGeneralSettingsParams, UpdateWorkspaceMembersRoleParams, } from '@libs/API/parameters'; +import type SetPolicyTagsEnabled from '@libs/API/parameters/SetPolicyTagsEnabled'; import type UpdatePolicyAddressParams from '@libs/API/parameters/UpdatePolicyAddressParams'; import {READ_COMMANDS, WRITE_COMMANDS} from '@libs/API/types'; import DateUtils from '@libs/DateUtils'; @@ -3466,8 +3467,8 @@ function createPolicyTag(policyID: string, tagName: string) { API.write(WRITE_COMMANDS.CREATE_POLICY_TAG, parameters, onyxData); } -function setWorkspaceTagEnabled(policyID: string, tagsToUpdate: Record) { - const policyTag = PolicyUtils.getTagLists(allPolicyTags?.[`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`] ?? {})?.[0] ?? {}; +function setWorkspaceTagEnabled(policyID: string, tagsToUpdate: Record, tagListIndex: number) { + const policyTag = PolicyUtils.getTagLists(allPolicyTags?.[`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`] ?? {})?.[tagListIndex] ?? {}; const onyxData: OnyxData = { optimisticData: [ @@ -3547,9 +3548,10 @@ function setWorkspaceTagEnabled(policyID: string, tagsToUpdate: Record tagsToUpdate[key])), + tagListIndex, }; API.write(WRITE_COMMANDS.SET_POLICY_TAGS_ENABLED, parameters, onyxData); diff --git a/src/pages/workspace/tags/TagSettingsPage.tsx b/src/pages/workspace/tags/TagSettingsPage.tsx index 1f9d440108ae..abbccc321827 100644 --- a/src/pages/workspace/tags/TagSettingsPage.tsx +++ b/src/pages/workspace/tags/TagSettingsPage.tsx @@ -66,7 +66,7 @@ function TagSettingsPage({route, policyTags, navigation}: TagSettingsPageProps) }; const updateWorkspaceTagEnabled = (value: boolean) => { - setWorkspaceTagEnabled(route.params.policyID, {[currentPolicyTag.name]: {name: currentPolicyTag.name, enabled: value}}); + setWorkspaceTagEnabled(route.params.policyID, {[currentPolicyTag.name]: {name: currentPolicyTag.name, enabled: value}}, policyTag.orderWeight); }; const navigateToEditTag = () => { diff --git a/src/pages/workspace/tags/WorkspaceTagsPage.tsx b/src/pages/workspace/tags/WorkspaceTagsPage.tsx index eca339be0fc4..a1299b6d4406 100644 --- a/src/pages/workspace/tags/WorkspaceTagsPage.tsx +++ b/src/pages/workspace/tags/WorkspaceTagsPage.tsx @@ -238,7 +238,7 @@ function WorkspaceTagsPage({route}: WorkspaceTagsPageProps) { value: CONST.POLICY.TAGS_BULK_ACTION_TYPES.DISABLE, onSelected: () => { setSelectedTags({}); - Policy.setWorkspaceTagEnabled(policyID, tagsToDisable); + Policy.setWorkspaceTagEnabled(policyID, tagsToDisable, 0); }, }); } @@ -250,7 +250,7 @@ function WorkspaceTagsPage({route}: WorkspaceTagsPageProps) { value: CONST.POLICY.TAGS_BULK_ACTION_TYPES.ENABLE, onSelected: () => { setSelectedTags({}); - Policy.setWorkspaceTagEnabled(policyID, tagsToEnable); + Policy.setWorkspaceTagEnabled(policyID, tagsToEnable, 0); }, }); } diff --git a/src/pages/workspace/tags/WorkspaceViewTagsPage.tsx b/src/pages/workspace/tags/WorkspaceViewTagsPage.tsx index 09ba086e3a14..39485f45f0a8 100644 --- a/src/pages/workspace/tags/WorkspaceViewTagsPage.tsx +++ b/src/pages/workspace/tags/WorkspaceViewTagsPage.tsx @@ -174,7 +174,7 @@ function WorkspaceViewTagsPage({route}: WorkspaceViewTagsProps) { value: CONST.POLICY.TAGS_BULK_ACTION_TYPES.DISABLE, onSelected: () => { setSelectedTags({}); - Policy.setWorkspaceTagEnabled(policyID, tagsToDisable); + Policy.setWorkspaceTagEnabled(policyID, tagsToDisable, route.params.orderWeight); }, }); } @@ -186,7 +186,7 @@ function WorkspaceViewTagsPage({route}: WorkspaceViewTagsProps) { value: CONST.POLICY.TAGS_BULK_ACTION_TYPES.ENABLE, onSelected: () => { setSelectedTags({}); - Policy.setWorkspaceTagEnabled(policyID, tagsToEnable); + Policy.setWorkspaceTagEnabled(policyID, tagsToEnable, route.params.orderWeight); }, }); } diff --git a/tests/actions/PolicyTagTest.ts b/tests/actions/PolicyTagTest.ts index 74ea13f3d139..a0982a78b70a 100644 --- a/tests/actions/PolicyTagTest.ts +++ b/tests/actions/PolicyTagTest.ts @@ -395,7 +395,7 @@ describe('actions/Policy', () => { Onyx.set(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${fakePolicy.id}`, fakePolicyTags); }) .then(() => { - Policy.setWorkspaceTagEnabled(fakePolicy.id, tagsToUpdate); + Policy.setWorkspaceTagEnabled(fakePolicy.id, tagsToUpdate, 0); return waitForBatchedUpdates(); }) .then( @@ -468,7 +468,7 @@ describe('actions/Policy', () => { .then(() => { mockFetch?.fail?.(); - Policy.setWorkspaceTagEnabled(fakePolicy.id, tagsToUpdate); + Policy.setWorkspaceTagEnabled(fakePolicy.id, tagsToUpdate, 0); return waitForBatchedUpdates(); }) .then(mockFetch?.resume)