|
1 | 1 | import type {NullishDeep, OnyxCollection, OnyxEntry} from 'react-native-onyx';
|
2 | 2 | import Onyx from 'react-native-onyx';
|
3 | 3 | import * as API from '@libs/API';
|
4 |
| -import type {EnablePolicyTagsParams, OpenPolicyTagsPageParams, RenamePolicyTaglistParams, RenamePolicyTagsParams, SetPolicyTagsEnabled} from '@libs/API/parameters'; |
| 4 | +import type {EnablePolicyTagsParams, OpenPolicyTagsPageParams, RenamePolicyTaglistParams, RenamePolicyTagsParams, SetPolicyTagsEnabled, SetPolicyTagsRequired} from '@libs/API/parameters'; |
5 | 5 | import {READ_COMMANDS, WRITE_COMMANDS} from '@libs/API/types';
|
6 | 6 | import * as ErrorUtils from '@libs/ErrorUtils';
|
7 | 7 | import getIsNarrowLayout from '@libs/getIsNarrowLayout';
|
@@ -161,6 +161,7 @@ function createPolicyTag(policyID: string, tagName: string) {
|
161 | 161 | tags: {
|
162 | 162 | [newTagName]: {
|
163 | 163 | errors: ErrorUtils.getMicroSecondOnyxError('workspace.tags.genericFailureMessage'),
|
| 164 | + pendingAction: null, |
164 | 165 | },
|
165 | 166 | },
|
166 | 167 | },
|
@@ -329,8 +330,8 @@ function deletePolicyTags(policyID: string, tagsToDelete: string[]) {
|
329 | 330 | API.write(WRITE_COMMANDS.DELETE_POLICY_TAGS, parameters, onyxData);
|
330 | 331 | }
|
331 | 332 |
|
332 |
| -function clearPolicyTagErrors(policyID: string, tagName: string) { |
333 |
| - const tagListName = Object.keys(allPolicyTags?.[`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`] ?? {})[0]; |
| 333 | +function clearPolicyTagErrors(policyID: string, tagName: string, tagListIndex: number) { |
| 334 | + const tagListName = Object.keys(allPolicyTags?.[`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`] ?? {})[tagListIndex]; |
334 | 335 | const tag = allPolicyTags?.[`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`]?.[tagListName].tags?.[tagName];
|
335 | 336 | if (!tag) {
|
336 | 337 | return;
|
@@ -359,10 +360,25 @@ function clearPolicyTagErrors(policyID: string, tagName: string) {
|
359 | 360 | });
|
360 | 361 | }
|
361 | 362 |
|
| 363 | +function clearPolicyTagListError(policyID: string, tagListIndex: number, errorField: string) { |
| 364 | + const policyTag = PolicyUtils.getTagLists(allPolicyTags?.[`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`] ?? {})?.[tagListIndex] ?? {}; |
| 365 | + |
| 366 | + if (!policyTag.name) { |
| 367 | + return; |
| 368 | + } |
| 369 | + |
| 370 | + Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`, { |
| 371 | + [policyTag.name]: { |
| 372 | + errorFields: { |
| 373 | + [errorField]: null, |
| 374 | + }, |
| 375 | + }, |
| 376 | + }); |
| 377 | +} |
| 378 | + |
362 | 379 | function renamePolicyTag(policyID: string, policyTag: {oldName: string; newName: string}, tagListIndex: number) {
|
363 | 380 | const tagList = PolicyUtils.getTagLists(allPolicyTags?.[`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`] ?? {})?.[tagListIndex] ?? {};
|
364 | 381 | const tag = tagList.tags?.[policyTag.oldName];
|
365 |
| - |
366 | 382 | const oldTagName = policyTag.oldName;
|
367 | 383 | const newTagName = PolicyUtils.escapeTagName(policyTag.newName);
|
368 | 384 | const onyxData: OnyxData = {
|
@@ -611,15 +627,75 @@ function setPolicyRequiresTag(policyID: string, requiresTag: boolean) {
|
611 | 627 | API.write(WRITE_COMMANDS.SET_POLICY_REQUIRES_TAG, parameters, onyxData);
|
612 | 628 | }
|
613 | 629 |
|
| 630 | +function setPolicyTagsRequired(policyID: string, requiresTag: boolean, tagListIndex: number) { |
| 631 | + const policyTag = PolicyUtils.getTagLists(allPolicyTags?.[`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`] ?? {})?.[tagListIndex] ?? {}; |
| 632 | + |
| 633 | + if (!policyTag.name) { |
| 634 | + return; |
| 635 | + } |
| 636 | + |
| 637 | + const onyxData: OnyxData = { |
| 638 | + optimisticData: [ |
| 639 | + { |
| 640 | + onyxMethod: Onyx.METHOD.MERGE, |
| 641 | + key: `${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`, |
| 642 | + value: { |
| 643 | + [policyTag.name]: { |
| 644 | + required: requiresTag, |
| 645 | + pendingFields: {required: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE}, |
| 646 | + errorFields: {required: null}, |
| 647 | + }, |
| 648 | + }, |
| 649 | + }, |
| 650 | + ], |
| 651 | + successData: [ |
| 652 | + { |
| 653 | + onyxMethod: Onyx.METHOD.MERGE, |
| 654 | + key: `${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`, |
| 655 | + value: { |
| 656 | + [policyTag.name]: { |
| 657 | + pendingFields: {required: null}, |
| 658 | + }, |
| 659 | + }, |
| 660 | + }, |
| 661 | + ], |
| 662 | + failureData: [ |
| 663 | + { |
| 664 | + onyxMethod: Onyx.METHOD.MERGE, |
| 665 | + key: `${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`, |
| 666 | + value: { |
| 667 | + [policyTag.name]: { |
| 668 | + required: policyTag.required, |
| 669 | + pendingFields: {required: null}, |
| 670 | + errorFields: { |
| 671 | + required: ErrorUtils.getMicroSecondOnyxError('workspace.tags.genericFailureMessage'), |
| 672 | + }, |
| 673 | + }, |
| 674 | + }, |
| 675 | + }, |
| 676 | + ], |
| 677 | + }; |
| 678 | + |
| 679 | + const parameters: SetPolicyTagsRequired = { |
| 680 | + policyID, |
| 681 | + tagListIndex, |
| 682 | + requireTagList: requiresTag, |
| 683 | + }; |
| 684 | + |
| 685 | + API.write(WRITE_COMMANDS.SET_POLICY_TAGS_REQUIRED, parameters, onyxData); |
| 686 | +} |
| 687 | + |
614 | 688 | export {
|
615 | 689 | openPolicyTagsPage,
|
616 | 690 | buildOptimisticPolicyRecentlyUsedTags,
|
617 | 691 | setPolicyRequiresTag,
|
| 692 | + setPolicyTagsRequired, |
618 | 693 | renamePolicyTaglist,
|
619 | 694 | enablePolicyTags,
|
620 | 695 | createPolicyTag,
|
621 | 696 | renamePolicyTag,
|
622 | 697 | clearPolicyTagErrors,
|
| 698 | + clearPolicyTagListError, |
623 | 699 | deletePolicyTags,
|
624 | 700 | setWorkspaceTagEnabled,
|
625 | 701 | };
|
|
0 commit comments