1import { validateConditions } from "@/utils";
2import { ref } from "vue";
3
4const defaultAssignmentDays = [
5 "Monday",
6 "Tuesday",
7 "Wednesday",
8 "Thursday",
9 "Friday",
10 "Saturday",
11 "Sunday",
12];
13
14export const assignmentRuleData = ref<Record<string, any> | null>({
15 assignCondition: "",
16 unassignCondition: "",
17 assignConditionJson: [],
18 unassignConditionJson: [],
19 rule: "Round Robin",
20 priority: 1,
21 users: [],
22 disabled: false,
23 description: "",
24 name: "",
25 assignmentRuleName: "",
26 assignmentDays: defaultAssignmentDays,
27});
28
29export const resetAssignmentRuleData = () => {
30 assignmentRuleData.value = {
31 assignCondition: "",
32 unassignCondition: "",
33 assignConditionJson: [],
34 unassignConditionJson: [],
35 rule: "Round Robin",
36 priority: 1,
37 users: [],
38 disabled: false,
39 description: "",
40 name: "",
41 assignmentRuleName: "",
42 assignmentDays: defaultAssignmentDays,
43 };
44};
45
46export const assignmentRulesActiveScreen = ref<{
47 screen: "list" | "view";
48 data: Record<string, any> | null;
49}>({ screen: "list", data: null });
50
51export const validateAssignmentRule = (
52 key?: string,
53 skipAssignConditionCheck = false,
54 skipUnAssignConditionCheck = false
55) => {
56 const validateField = (field: string) => {
57 if (key && field !== key) return;
58
59 switch (field) {
60 case "assignmentRuleName":
61 if (assignmentRuleData.value.assignmentRuleName?.length == 0) {
62 assignmentRulesErrors.value.assignmentRuleName = "Name is required";
63 } else {
64 assignmentRulesErrors.value.assignmentRuleName = "";
65 }
66 break;
67 case "description":
68 assignmentRulesErrors.value.description =
69 assignmentRuleData.value.description?.length > 0
70 ? ""
71 : "Description is required";
72 break;
73 case "assignCondition":
74 if (skipAssignConditionCheck) {
75 break;
76 }
77 assignmentRulesErrors.value.assignCondition =
78 assignmentRuleData.value.assignConditionJson?.length > 0
79 ? ""
80 : "Assign condition is required";
81
82 if (!validateConditions(assignmentRuleData.value.assignConditionJson)) {
83 assignmentRulesErrors.value.assignConditionError =
84 "Assign conditions are invalid";
85 } else {
86 assignmentRulesErrors.value.assignConditionError = "";
87 }
88
89 break;
90 case "unassignCondition":
91 if (skipUnAssignConditionCheck) {
92 break;
93 }
94 if (
95 assignmentRuleData.value.unassignConditionJson?.length > 0 &&
96 !validateConditions(assignmentRuleData.value.unassignConditionJson)
97 ) {
98 assignmentRulesErrors.value.unassignConditionError =
99 "Unassign conditions are invalid";
100 } else {
101 assignmentRulesErrors.value.unassignConditionError = "";
102 }
103 break;
104 case "users":
105 assignmentRulesErrors.value.users =
106 assignmentRuleData.value.users?.length > 0
107 ? ""
108 : "Users are required";
109 break;
110 case "assignmentDays":
111 assignmentRulesErrors.value.assignmentDays =
112 assignmentRuleData.value.assignmentDays?.length > 0
113 ? ""
114 : "Assignment days are required";
115 break;
116 default:
117 break;
118 }
119 };
120
121 if (key) {
122 validateField(key);
123 } else {
124 (Object.keys(assignmentRulesErrors.value) as string[]).forEach(
125 validateField
126 );
127 }
128
129 return assignmentRulesErrors.value;
130};
131
132export const assignmentRulesErrors = ref<Record<string, any> | null>({
133 assignmentRuleName: "",
134 assignCondition: "",
135 assignConditionError: "",
136 unassignConditionError: "",
137 users: "",
138 description: "",
139 assignmentDays: "",
140});
141
142export const resetAssignmentRuleErrors = () => {
143 (Object.keys(assignmentRulesErrors.value) as string[]).forEach((key) => {
144 assignmentRulesErrors.value[key] = "";
145 });
146};
147