@webitel/ui-sdk 24.4.19 → 24.4.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/img/sprite/custom-chat-gateway.svg +5 -0
- package/dist/img/sprite/index.js +1 -0
- package/dist/ui-sdk.mjs +1069 -1069
- package/dist/ui-sdk.umd.js +9 -9
- package/package.json +3 -2
- package/src/api/clients/agents/agents.js +292 -0
- package/src/api/clients/buckets/buckets.js +138 -0
- package/src/api/clients/calendars/calendars.js +248 -0
- package/src/api/clients/chatGateways/chatGateways.js +309 -0
- package/src/api/clients/chatGateways/defaults/defaultChatGateway.js +18 -0
- package/src/api/clients/chatGateways/defaults/webChatGateway.js +73 -0
- package/src/api/clients/chatGateways/enums/WebchatAlternativeChannel.enum.js +14 -0
- package/src/api/clients/chatGateways/scripts/generateUri.js +9 -0
- package/src/api/clients/communications/communications.js +162 -0
- package/src/api/clients/flows/flow.js +256 -0
- package/src/api/clients/gateways/defaults/defaultGateway.js +9 -0
- package/src/api/clients/gateways/defaults/registerGateway.js +12 -0
- package/src/api/clients/gateways/defaults/trunkingGateway.js +16 -0
- package/src/api/clients/gateways/gateways.js +204 -0
- package/src/api/clients/index.js +27 -0
- package/src/api/clients/lists/blacklists.js +144 -0
- package/src/api/clients/media/media.js +136 -0
- package/src/api/clients/queues/defaults/processing.js +10 -0
- package/src/api/clients/queues/queues.js +275 -0
- package/src/api/clients/roles/roles.js +213 -0
- package/src/api/clients/users/__tests__/users.spec.js +200 -0
- package/src/api/clients/users/users.js +254 -0
- package/src/api/defaults/getDefaultInstance/getDefaultInstance.js +14 -0
- package/src/api/defaults/getDefaultOpenAPIConfig/getDefaultOpenAPIConfig.js +9 -0
- package/src/api/defaults/index.js +4 -0
- package/src/enums/ChatGatewayProvider/ChatGatewayProvider.enum.js +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webitel/ui-sdk",
|
|
3
|
-
"version": "24.4.
|
|
3
|
+
"version": "24.4.21",
|
|
4
4
|
"private": false,
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "vite",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"@vuelidate/validators": "^2.0.4",
|
|
40
40
|
"@vuepic/vue-datepicker": "^4.4.0",
|
|
41
41
|
"@vueuse/components": "^10.7.2",
|
|
42
|
+
"axios": "^1.6.8",
|
|
42
43
|
"clipboard-copy": "^4.0.1",
|
|
43
44
|
"csv-stringify": "^5.5.3",
|
|
44
45
|
"deep-copy": "^1.4.2",
|
|
@@ -57,7 +58,7 @@
|
|
|
57
58
|
"vue-multiselect": "^3.0.0-beta.3",
|
|
58
59
|
"vue-observe-visibility": "^2.0.0-alpha.1",
|
|
59
60
|
"vue-router": "^4.1.6",
|
|
60
|
-
"webitel-sdk": "^
|
|
61
|
+
"webitel-sdk": "^24.2.6"
|
|
61
62
|
},
|
|
62
63
|
"devDependencies": {
|
|
63
64
|
"@vitejs/plugin-vue": "5.0.4",
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { AgentServiceApiFactory } from 'webitel-sdk';
|
|
2
|
+
import convertDuration from '../../../scripts/convertDuration';
|
|
3
|
+
import {
|
|
4
|
+
getDefaultGetListResponse,
|
|
5
|
+
getDefaultGetParams,
|
|
6
|
+
getDefaultOpenAPIConfig,
|
|
7
|
+
getDefaultInstance,
|
|
8
|
+
} from '../../defaults';
|
|
9
|
+
import applyTransform, {
|
|
10
|
+
camelToSnake,
|
|
11
|
+
merge,
|
|
12
|
+
notify,
|
|
13
|
+
sanitize,
|
|
14
|
+
snakeToCamel,
|
|
15
|
+
starToSearch,
|
|
16
|
+
} from '../../transformers';
|
|
17
|
+
|
|
18
|
+
const instance = getDefaultInstance();
|
|
19
|
+
const configuration = getDefaultOpenAPIConfig();
|
|
20
|
+
|
|
21
|
+
const agentService = new AgentServiceApiFactory(configuration, '', instance);
|
|
22
|
+
|
|
23
|
+
const convertStatusDuration = (value) => {
|
|
24
|
+
if (value > 60 * 60 * 24) return '>24:00:00';
|
|
25
|
+
return convertDuration(value);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const getAgentsList = async (params) => {
|
|
29
|
+
const listResponseHandler = (items) => {
|
|
30
|
+
return items.map((item) => ({
|
|
31
|
+
...item,
|
|
32
|
+
statusDuration: convertStatusDuration(item.statusDuration),
|
|
33
|
+
}));
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const {
|
|
37
|
+
page,
|
|
38
|
+
size,
|
|
39
|
+
search,
|
|
40
|
+
sort,
|
|
41
|
+
fields,
|
|
42
|
+
id,
|
|
43
|
+
team,
|
|
44
|
+
skill,
|
|
45
|
+
isSupervisor,
|
|
46
|
+
isNotSupervisor,
|
|
47
|
+
notTeamId,
|
|
48
|
+
supervisorId,
|
|
49
|
+
notSkillId,
|
|
50
|
+
} = applyTransform(params, [
|
|
51
|
+
merge(getDefaultGetParams()),
|
|
52
|
+
starToSearch('search'),
|
|
53
|
+
]);
|
|
54
|
+
|
|
55
|
+
try {
|
|
56
|
+
const response = await agentService.searchAgent(
|
|
57
|
+
page,
|
|
58
|
+
size,
|
|
59
|
+
search,
|
|
60
|
+
sort,
|
|
61
|
+
fields,
|
|
62
|
+
id,
|
|
63
|
+
undefined,
|
|
64
|
+
supervisorId,
|
|
65
|
+
team,
|
|
66
|
+
undefined,
|
|
67
|
+
undefined,
|
|
68
|
+
isSupervisor,
|
|
69
|
+
skill,
|
|
70
|
+
undefined,
|
|
71
|
+
isNotSupervisor,
|
|
72
|
+
undefined,
|
|
73
|
+
undefined,
|
|
74
|
+
notTeamId,
|
|
75
|
+
notSkillId,
|
|
76
|
+
);
|
|
77
|
+
const { items, next } = applyTransform(response.data, [
|
|
78
|
+
snakeToCamel(),
|
|
79
|
+
merge(getDefaultGetListResponse()),
|
|
80
|
+
]);
|
|
81
|
+
return {
|
|
82
|
+
items: applyTransform(items, [
|
|
83
|
+
listResponseHandler,
|
|
84
|
+
]),
|
|
85
|
+
next,
|
|
86
|
+
};
|
|
87
|
+
} catch (err) {
|
|
88
|
+
throw applyTransform(err, [
|
|
89
|
+
notify,
|
|
90
|
+
]);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const getAgent = async ({ itemId: id }) => {
|
|
95
|
+
const defaultObject = {
|
|
96
|
+
user: {},
|
|
97
|
+
team: {},
|
|
98
|
+
supervisor: [],
|
|
99
|
+
auditor: [],
|
|
100
|
+
region: {},
|
|
101
|
+
progressiveCount: 0,
|
|
102
|
+
chatCount: 0,
|
|
103
|
+
taskCount: 0,
|
|
104
|
+
isSupervisor: false,
|
|
105
|
+
description: '',
|
|
106
|
+
greetingMedia: {},
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
try {
|
|
110
|
+
const response = await agentService.readAgent(id);
|
|
111
|
+
return applyTransform(response.data, [
|
|
112
|
+
snakeToCamel(),
|
|
113
|
+
merge(defaultObject),
|
|
114
|
+
]);
|
|
115
|
+
} catch (err) {
|
|
116
|
+
throw applyTransform(err, [
|
|
117
|
+
notify,
|
|
118
|
+
]);
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
const fieldsToSend = [
|
|
123
|
+
'user',
|
|
124
|
+
'team',
|
|
125
|
+
'supervisor',
|
|
126
|
+
'auditor',
|
|
127
|
+
'region',
|
|
128
|
+
'greetingMedia',
|
|
129
|
+
'progressiveCount',
|
|
130
|
+
'chatCount',
|
|
131
|
+
'taskCount',
|
|
132
|
+
'isSupervisor',
|
|
133
|
+
];
|
|
134
|
+
|
|
135
|
+
const addAgent = async ({ itemInstance }) => {
|
|
136
|
+
const item = applyTransform(itemInstance, [
|
|
137
|
+
sanitize(fieldsToSend),
|
|
138
|
+
camelToSnake(),
|
|
139
|
+
]);
|
|
140
|
+
try {
|
|
141
|
+
const response = await agentService.createAgent(item);
|
|
142
|
+
return applyTransform(response.data, [
|
|
143
|
+
snakeToCamel(),
|
|
144
|
+
]);
|
|
145
|
+
} catch (err) {
|
|
146
|
+
throw applyTransform(err, [
|
|
147
|
+
notify,
|
|
148
|
+
]);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
const patchAgent = async ({ changes, id }) => {
|
|
153
|
+
const body = applyTransform(changes, [
|
|
154
|
+
sanitize(fieldsToSend),
|
|
155
|
+
camelToSnake(),
|
|
156
|
+
]);
|
|
157
|
+
try {
|
|
158
|
+
const response = await agentService.patchAgent(id, body);
|
|
159
|
+
return applyTransform(response.data, [
|
|
160
|
+
snakeToCamel(),
|
|
161
|
+
]);
|
|
162
|
+
} catch (err) {
|
|
163
|
+
throw applyTransform(err, [
|
|
164
|
+
notify,
|
|
165
|
+
]);
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
const updateAgent = async ({ itemInstance, itemId: id }) => {
|
|
170
|
+
const item = applyTransform(itemInstance, [
|
|
171
|
+
sanitize(fieldsToSend),
|
|
172
|
+
camelToSnake(),
|
|
173
|
+
]);
|
|
174
|
+
try {
|
|
175
|
+
const response = await agentService.updateAgent(id, item);
|
|
176
|
+
return applyTransform(response.data, [
|
|
177
|
+
snakeToCamel(),
|
|
178
|
+
]);
|
|
179
|
+
} catch (err) {
|
|
180
|
+
throw applyTransform(err, [
|
|
181
|
+
notify,
|
|
182
|
+
]);
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
const deleteAgent = async ({ id }) => {
|
|
187
|
+
try {
|
|
188
|
+
const response = await agentService.deleteAgent(id);
|
|
189
|
+
return applyTransform(response.data, []);
|
|
190
|
+
} catch (err) {
|
|
191
|
+
throw applyTransform(err, [
|
|
192
|
+
notify,
|
|
193
|
+
]);
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
const getAgentsLookup = (params) => getAgentsList({
|
|
198
|
+
...params,
|
|
199
|
+
fields: params.fields || ['id', 'name'],
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
const getAgentHistory = async (params) => {
|
|
203
|
+
const {
|
|
204
|
+
parentId,
|
|
205
|
+
from,
|
|
206
|
+
to,
|
|
207
|
+
page,
|
|
208
|
+
size,
|
|
209
|
+
sort = '-joined_at',
|
|
210
|
+
} = applyTransform(params, [
|
|
211
|
+
merge(getDefaultGetParams()),
|
|
212
|
+
starToSearch('search'),
|
|
213
|
+
]);
|
|
214
|
+
|
|
215
|
+
try {
|
|
216
|
+
const response = await agentService.searchAgentStateHistory(
|
|
217
|
+
page, size, from, to, parentId, sort,
|
|
218
|
+
);
|
|
219
|
+
const { items, next } = applyTransform(response.data, [
|
|
220
|
+
snakeToCamel(),
|
|
221
|
+
merge(getDefaultGetListResponse()),
|
|
222
|
+
]);
|
|
223
|
+
return {
|
|
224
|
+
items,
|
|
225
|
+
next,
|
|
226
|
+
};
|
|
227
|
+
} catch (err) {
|
|
228
|
+
throw applyTransform(err, [
|
|
229
|
+
notify,
|
|
230
|
+
]);
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
const getAgentUsersOptions = async (params) => {
|
|
235
|
+
const {
|
|
236
|
+
page,
|
|
237
|
+
size,
|
|
238
|
+
search,
|
|
239
|
+
sort,
|
|
240
|
+
fields,
|
|
241
|
+
id,
|
|
242
|
+
} = applyTransform(params, [
|
|
243
|
+
merge(getDefaultGetParams()),
|
|
244
|
+
starToSearch('search'),
|
|
245
|
+
]);
|
|
246
|
+
|
|
247
|
+
try {
|
|
248
|
+
const response = await agentService.searchLookupUsersAgentNotExists(
|
|
249
|
+
page,
|
|
250
|
+
size,
|
|
251
|
+
search,
|
|
252
|
+
);
|
|
253
|
+
const { items, next } = applyTransform(response.data, [
|
|
254
|
+
snakeToCamel(),
|
|
255
|
+
merge(getDefaultGetListResponse()),
|
|
256
|
+
]);
|
|
257
|
+
return {
|
|
258
|
+
items,
|
|
259
|
+
next,
|
|
260
|
+
};
|
|
261
|
+
} catch (err) {
|
|
262
|
+
throw applyTransform(err, [
|
|
263
|
+
notify,
|
|
264
|
+
]);
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
const getSupervisorOptions = async (params) => {
|
|
268
|
+
const isSupervisor = true;
|
|
269
|
+
return getAgentsList({ ...params, isSupervisor });
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
const getRegularAgentsOptions = async (params) => {
|
|
273
|
+
const isNotSupervisor = true;
|
|
274
|
+
return getAgentsList({ ...params, isNotSupervisor });
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
const AgentsAPI = {
|
|
278
|
+
getList: getAgentsList,
|
|
279
|
+
get: getAgent,
|
|
280
|
+
add: addAgent,
|
|
281
|
+
patch: patchAgent,
|
|
282
|
+
update: updateAgent,
|
|
283
|
+
delete: deleteAgent,
|
|
284
|
+
getLookup: getAgentsLookup,
|
|
285
|
+
|
|
286
|
+
getAgentHistory,
|
|
287
|
+
getRegularAgentsOptions,
|
|
288
|
+
getAgentUsersOptions,
|
|
289
|
+
getSupervisorOptions,
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
export default AgentsAPI;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { BucketServiceApiFactory } from 'webitel-sdk';
|
|
2
|
+
import {
|
|
3
|
+
getDefaultGetListResponse,
|
|
4
|
+
getDefaultGetParams,
|
|
5
|
+
getDefaultOpenAPIConfig,
|
|
6
|
+
getDefaultInstance,
|
|
7
|
+
} from '../../defaults';
|
|
8
|
+
import applyTransform, {
|
|
9
|
+
camelToSnake,
|
|
10
|
+
merge,
|
|
11
|
+
notify,
|
|
12
|
+
sanitize,
|
|
13
|
+
snakeToCamel,
|
|
14
|
+
starToSearch,
|
|
15
|
+
} from '../../transformers';
|
|
16
|
+
|
|
17
|
+
const instance = getDefaultInstance();
|
|
18
|
+
const configuration = getDefaultOpenAPIConfig();
|
|
19
|
+
|
|
20
|
+
const bucketService = new BucketServiceApiFactory(configuration, '', instance);
|
|
21
|
+
|
|
22
|
+
const getBucketsList = async (params) => {
|
|
23
|
+
const {
|
|
24
|
+
page,
|
|
25
|
+
size,
|
|
26
|
+
search,
|
|
27
|
+
sort,
|
|
28
|
+
fields,
|
|
29
|
+
id,
|
|
30
|
+
} = applyTransform(params, [
|
|
31
|
+
merge(getDefaultGetParams()),
|
|
32
|
+
starToSearch('search'),
|
|
33
|
+
]);
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
const response = await bucketService.searchBucket(
|
|
37
|
+
page,
|
|
38
|
+
size,
|
|
39
|
+
search,
|
|
40
|
+
sort,
|
|
41
|
+
fields,
|
|
42
|
+
id,
|
|
43
|
+
);
|
|
44
|
+
const { items, next } = applyTransform(response.data, [
|
|
45
|
+
snakeToCamel(),
|
|
46
|
+
merge(getDefaultGetListResponse()),
|
|
47
|
+
]);
|
|
48
|
+
return {
|
|
49
|
+
items,
|
|
50
|
+
next,
|
|
51
|
+
};
|
|
52
|
+
} catch (err) {
|
|
53
|
+
throw applyTransform(err, [
|
|
54
|
+
|
|
55
|
+
notify,
|
|
56
|
+
]);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const getBucket = async ({ itemId: id }) => {
|
|
61
|
+
try {
|
|
62
|
+
const response = await bucketService.readBucket(id);
|
|
63
|
+
return applyTransform(response.data, [
|
|
64
|
+
snakeToCamel(),
|
|
65
|
+
]);
|
|
66
|
+
} catch (err) {
|
|
67
|
+
throw applyTransform(err, [
|
|
68
|
+
|
|
69
|
+
notify,
|
|
70
|
+
]);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const fieldsToSend = ['name', 'description'];
|
|
75
|
+
|
|
76
|
+
const addBucket = async ({ itemInstance }) => {
|
|
77
|
+
const item = applyTransform(itemInstance, [
|
|
78
|
+
sanitize(fieldsToSend),
|
|
79
|
+
camelToSnake(),
|
|
80
|
+
]);
|
|
81
|
+
try {
|
|
82
|
+
const response = await bucketService.createBucket(item);
|
|
83
|
+
return applyTransform(response.data, [
|
|
84
|
+
snakeToCamel(),
|
|
85
|
+
]);
|
|
86
|
+
} catch (err) {
|
|
87
|
+
throw applyTransform(err, [
|
|
88
|
+
|
|
89
|
+
notify,
|
|
90
|
+
]);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const updateBucket = async ({ itemInstance, itemId: id }) => {
|
|
95
|
+
const item = applyTransform(itemInstance, [
|
|
96
|
+
sanitize(fieldsToSend),
|
|
97
|
+
camelToSnake(),
|
|
98
|
+
]);
|
|
99
|
+
try {
|
|
100
|
+
const response = await bucketService.updateBucket(id, item);
|
|
101
|
+
return applyTransform(response.data, [
|
|
102
|
+
snakeToCamel(),
|
|
103
|
+
]);
|
|
104
|
+
} catch (err) {
|
|
105
|
+
throw applyTransform(err, [
|
|
106
|
+
|
|
107
|
+
notify,
|
|
108
|
+
]);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
const deleteBucket = async ({ id }) => {
|
|
113
|
+
try {
|
|
114
|
+
const response = await bucketService.deleteBucket(id);
|
|
115
|
+
return applyTransform(response.data, []);
|
|
116
|
+
} catch (err) {
|
|
117
|
+
throw applyTransform(err, [
|
|
118
|
+
|
|
119
|
+
notify,
|
|
120
|
+
]);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const getBucketsLookup = (params) => getBucketsList({
|
|
125
|
+
...params,
|
|
126
|
+
fields: params.fields || ['id', 'name'],
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
const BucketsAPI = {
|
|
130
|
+
getList: getBucketsList,
|
|
131
|
+
get: getBucket,
|
|
132
|
+
add: addBucket,
|
|
133
|
+
update: updateBucket,
|
|
134
|
+
delete: deleteBucket,
|
|
135
|
+
getLookup: getBucketsLookup,
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export default BucketsAPI;
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import deepCopy from 'deep-copy';
|
|
2
|
+
import { CalendarServiceApiFactory } from 'webitel-sdk';
|
|
3
|
+
import {
|
|
4
|
+
getDefaultGetListResponse,
|
|
5
|
+
getDefaultGetParams,
|
|
6
|
+
getDefaultOpenAPIConfig,
|
|
7
|
+
getDefaultInstance,
|
|
8
|
+
} from '../../defaults';
|
|
9
|
+
import applyTransform, {
|
|
10
|
+
camelToSnake,
|
|
11
|
+
merge,
|
|
12
|
+
notify,
|
|
13
|
+
sanitize,
|
|
14
|
+
snakeToCamel,
|
|
15
|
+
starToSearch,
|
|
16
|
+
} from '../../transformers';
|
|
17
|
+
|
|
18
|
+
const instance = getDefaultInstance();
|
|
19
|
+
const configuration = getDefaultOpenAPIConfig();
|
|
20
|
+
|
|
21
|
+
const calendarService = new CalendarServiceApiFactory(configuration, '', instance);
|
|
22
|
+
|
|
23
|
+
const getCalendarList = async (params) => {
|
|
24
|
+
const {
|
|
25
|
+
page,
|
|
26
|
+
size,
|
|
27
|
+
search,
|
|
28
|
+
sort,
|
|
29
|
+
fields,
|
|
30
|
+
id,
|
|
31
|
+
} = applyTransform(params, [
|
|
32
|
+
merge(getDefaultGetParams()),
|
|
33
|
+
starToSearch('search'),
|
|
34
|
+
]);
|
|
35
|
+
|
|
36
|
+
try {
|
|
37
|
+
const response = await calendarService.searchCalendar(
|
|
38
|
+
page,
|
|
39
|
+
size,
|
|
40
|
+
search,
|
|
41
|
+
sort,
|
|
42
|
+
fields,
|
|
43
|
+
id,
|
|
44
|
+
);
|
|
45
|
+
const { items, next } = applyTransform(response.data, [
|
|
46
|
+
snakeToCamel(),
|
|
47
|
+
merge(getDefaultGetListResponse()),
|
|
48
|
+
]);
|
|
49
|
+
return {
|
|
50
|
+
items,
|
|
51
|
+
next,
|
|
52
|
+
};
|
|
53
|
+
} catch (err) {
|
|
54
|
+
throw applyTransform(err, [
|
|
55
|
+
|
|
56
|
+
notify,
|
|
57
|
+
]);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const getCalendar = async ({ itemId: id }) => {
|
|
62
|
+
const itemResponseHandler = (item) => {
|
|
63
|
+
const copy = deepCopy(item);
|
|
64
|
+
const defaultSingleObject = {
|
|
65
|
+
name: '',
|
|
66
|
+
timezone: {},
|
|
67
|
+
description: '',
|
|
68
|
+
startAt: Date.now(),
|
|
69
|
+
endAt: Date.now(),
|
|
70
|
+
expires: !!(copy.startAt || copy.endAt),
|
|
71
|
+
accepts: [],
|
|
72
|
+
excepts: [],
|
|
73
|
+
};
|
|
74
|
+
// eslint-disable-next-line no-param-reassign
|
|
75
|
+
copy.accepts = copy.accepts.map((accept) => ({
|
|
76
|
+
day: accept.day || 0,
|
|
77
|
+
disabled: accept.disabled || false,
|
|
78
|
+
start: accept.startTimeOfDay || 0,
|
|
79
|
+
end: accept.endTimeOfDay || 0,
|
|
80
|
+
}));
|
|
81
|
+
if (copy.excepts) {
|
|
82
|
+
// eslint-disable-next-line no-param-reassign
|
|
83
|
+
copy.excepts = copy.excepts.map((except) => ({
|
|
84
|
+
name: except.name || '',
|
|
85
|
+
date: except.date || 0,
|
|
86
|
+
repeat: except.repeat || false,
|
|
87
|
+
working: except.working || false,
|
|
88
|
+
workStart: except.workStart || null,
|
|
89
|
+
workStop: except.workStop || null,
|
|
90
|
+
}));
|
|
91
|
+
}
|
|
92
|
+
return { ...defaultSingleObject, ...copy };
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
try {
|
|
96
|
+
const response = await calendarService.readCalendar(id);
|
|
97
|
+
return applyTransform(response.data, [
|
|
98
|
+
snakeToCamel(),
|
|
99
|
+
itemResponseHandler,
|
|
100
|
+
]);
|
|
101
|
+
} catch (err) {
|
|
102
|
+
throw applyTransform(err, [
|
|
103
|
+
|
|
104
|
+
notify,
|
|
105
|
+
]);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const fieldsToSend = [
|
|
110
|
+
'name',
|
|
111
|
+
'description',
|
|
112
|
+
'timezone',
|
|
113
|
+
'startAt',
|
|
114
|
+
'endAt',
|
|
115
|
+
'day',
|
|
116
|
+
'accepts',
|
|
117
|
+
'excepts',
|
|
118
|
+
'startTimeOfDay',
|
|
119
|
+
'endTimeOfDay',
|
|
120
|
+
'disabled',
|
|
121
|
+
'date',
|
|
122
|
+
'repeat',
|
|
123
|
+
'working',
|
|
124
|
+
'workStart',
|
|
125
|
+
'workStop',
|
|
126
|
+
];
|
|
127
|
+
|
|
128
|
+
const preRequestHandler = (item) => {
|
|
129
|
+
const copy = deepCopy(item);
|
|
130
|
+
delete copy.timezone.offset;
|
|
131
|
+
if (!copy.expires) {
|
|
132
|
+
delete copy.startAt;
|
|
133
|
+
delete copy.endAt;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
copy.accepts = copy.accepts.map((accept) => ({
|
|
137
|
+
day: accept.day,
|
|
138
|
+
disabled: accept.disabled,
|
|
139
|
+
startTimeOfDay: accept.start,
|
|
140
|
+
endTimeOfDay: accept.end,
|
|
141
|
+
}));
|
|
142
|
+
return copy;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
const addCalendar = async ({ itemInstance }) => {
|
|
146
|
+
const item = applyTransform(itemInstance, [
|
|
147
|
+
preRequestHandler,
|
|
148
|
+
sanitize(fieldsToSend),
|
|
149
|
+
camelToSnake(),
|
|
150
|
+
]);
|
|
151
|
+
try {
|
|
152
|
+
const response = await calendarService.createCalendar(item);
|
|
153
|
+
return applyTransform(response.data, [
|
|
154
|
+
snakeToCamel(),
|
|
155
|
+
]);
|
|
156
|
+
} catch (err) {
|
|
157
|
+
throw applyTransform(err, [
|
|
158
|
+
|
|
159
|
+
notify,
|
|
160
|
+
]);
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
const updateCalendar = async ({ itemInstance, itemId: id }) => {
|
|
165
|
+
const item = applyTransform(itemInstance, [
|
|
166
|
+
preRequestHandler,
|
|
167
|
+
sanitize(fieldsToSend),
|
|
168
|
+
camelToSnake(),
|
|
169
|
+
]);
|
|
170
|
+
try {
|
|
171
|
+
const response = await calendarService.updateCalendar(id, item);
|
|
172
|
+
return applyTransform(response.data, [
|
|
173
|
+
snakeToCamel(),
|
|
174
|
+
]);
|
|
175
|
+
} catch (err) {
|
|
176
|
+
throw applyTransform(err, [
|
|
177
|
+
|
|
178
|
+
notify,
|
|
179
|
+
]);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
const deleteCalendar = async ({ id }) => {
|
|
184
|
+
try {
|
|
185
|
+
const response = await calendarService.deleteCalendar(id);
|
|
186
|
+
return applyTransform(response.data, []);
|
|
187
|
+
} catch (err) {
|
|
188
|
+
throw applyTransform(err, [
|
|
189
|
+
|
|
190
|
+
notify,
|
|
191
|
+
]);
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
const getCalendarsLookup = (params) => getCalendarList({
|
|
196
|
+
...params,
|
|
197
|
+
fields: params.fields || ['id', 'name'],
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
const getTimezonesLookup = async (params) => {
|
|
201
|
+
const {
|
|
202
|
+
page,
|
|
203
|
+
size,
|
|
204
|
+
search,
|
|
205
|
+
sort,
|
|
206
|
+
fields,
|
|
207
|
+
id,
|
|
208
|
+
} = applyTransform(params, [
|
|
209
|
+
merge(getDefaultGetParams()),
|
|
210
|
+
starToSearch('search'),
|
|
211
|
+
]);
|
|
212
|
+
|
|
213
|
+
try {
|
|
214
|
+
const response = await calendarService.searchTimezones(
|
|
215
|
+
page,
|
|
216
|
+
size,
|
|
217
|
+
search,
|
|
218
|
+
sort,
|
|
219
|
+
fields,
|
|
220
|
+
id,
|
|
221
|
+
);
|
|
222
|
+
const { items, next } = applyTransform(response.data, [
|
|
223
|
+
snakeToCamel(),
|
|
224
|
+
merge(getDefaultGetListResponse()),
|
|
225
|
+
]);
|
|
226
|
+
return {
|
|
227
|
+
items,
|
|
228
|
+
next,
|
|
229
|
+
};
|
|
230
|
+
} catch (err) {
|
|
231
|
+
throw applyTransform(err, [
|
|
232
|
+
|
|
233
|
+
notify,
|
|
234
|
+
]);
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
const CalendarsAPI = {
|
|
239
|
+
getList: getCalendarList,
|
|
240
|
+
get: getCalendar,
|
|
241
|
+
add: addCalendar,
|
|
242
|
+
update: updateCalendar,
|
|
243
|
+
delete: deleteCalendar,
|
|
244
|
+
getLookup: getCalendarsLookup,
|
|
245
|
+
getTimezonesLookup,
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
export default CalendarsAPI;
|