@alexsab-ru/scripts 0.4.4 → 0.5.0
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/lib/analytics.js +7 -19
- package/lib/calltouch.js +24 -10
- package/lib/form.js +14 -9
- package/package.json +1 -1
package/lib/analytics.js
CHANGED
|
@@ -47,39 +47,27 @@ export function ymPage(pageName,goalParams) {
|
|
|
47
47
|
ym(me.id, "hit", pageName, goalParams||{})
|
|
48
48
|
})
|
|
49
49
|
} catch (err) {
|
|
50
|
-
console.error(
|
|
50
|
+
console.error(pageName + ' - error send page to Metrika');
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
export function
|
|
54
|
+
export function addClickCopyContextmenuGoals(item, prefix) {
|
|
55
55
|
item.addEventListener('click', function(evt) {
|
|
56
|
-
reachGoal('
|
|
56
|
+
reachGoal(prefix + '_click');
|
|
57
57
|
});
|
|
58
58
|
item.addEventListener('copy', function(evt) {
|
|
59
|
-
reachGoal('
|
|
59
|
+
reachGoal(prefix + '_copy');
|
|
60
60
|
});
|
|
61
61
|
item.addEventListener('contextmenu', function(evt) {
|
|
62
|
-
reachGoal('
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export function addEmailGoals(item) {
|
|
67
|
-
item.addEventListener('click', function(evt) {
|
|
68
|
-
reachGoal('email_click');
|
|
69
|
-
});
|
|
70
|
-
item.addEventListener('copy', function(evt) {
|
|
71
|
-
reachGoal('email_copy');
|
|
72
|
-
});
|
|
73
|
-
item.addEventListener('contextmenu', function(evt) {
|
|
74
|
-
reachGoal('email_contextmenu');
|
|
62
|
+
reachGoal(prefix + '_contextmenu');
|
|
75
63
|
});
|
|
76
64
|
}
|
|
77
65
|
|
|
78
66
|
document.querySelectorAll('a[href^\="tel:"]').forEach((tel)=>{
|
|
79
|
-
|
|
67
|
+
addClickCopyContextmenuGoals(tel, "phone");
|
|
80
68
|
});
|
|
81
69
|
document.querySelectorAll('a[href^\="mailto:"]').forEach((tel)=>{
|
|
82
|
-
|
|
70
|
+
addClickCopyContextmenuGoals(tel, "email");
|
|
83
71
|
});
|
|
84
72
|
|
|
85
73
|
let goals = [
|
package/lib/calltouch.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export const createRequest = (routeKey, phoneValue, verbose = false) => {
|
|
2
|
-
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
let errorText = '';
|
|
3
4
|
if(window.ctw) {
|
|
4
5
|
window.ctw.getRouteKeyData(routeKey, function(success, data){
|
|
5
6
|
verbose && console.log(success, data);
|
|
6
|
-
if (success
|
|
7
|
+
if (success) {
|
|
7
8
|
if (data.widgetFound) {
|
|
8
9
|
if (data.widgetData.callCenterWorkingMode == 'working_hours') {
|
|
9
10
|
verbose && console.log('колл-центр работает, отображение виджета');
|
|
@@ -27,34 +28,47 @@ export const createRequest = (routeKey, phoneValue, verbose = false) => {
|
|
|
27
28
|
function (success, data) {
|
|
28
29
|
verbose && console.log(success, data)
|
|
29
30
|
if (success) {
|
|
30
|
-
verbose && console.log('Создана заявка на колбек, идентификатор: ' + data.callbackRequestId)
|
|
31
|
+
verbose && console.log('Создана заявка на колбек, идентификатор: ' + data.callbackRequestId);
|
|
32
|
+
resolve(data); // Разрешаем Promise данными от createRequest
|
|
31
33
|
}
|
|
32
34
|
else {
|
|
35
|
+
errorText = 'Error in createRequest';
|
|
33
36
|
switch (data.type) {
|
|
34
37
|
case "request_throttle_timeout":
|
|
35
38
|
case "request_throttle_count":
|
|
36
|
-
|
|
39
|
+
errorText = 'Достигнут лимит создания заявок, попробуйте позже';
|
|
40
|
+
verbose && console.log(errorText);
|
|
37
41
|
break;
|
|
38
42
|
case "request_phone_blacklisted":
|
|
39
|
-
|
|
43
|
+
errorText = 'номер телефона находится в черном списке';
|
|
44
|
+
verbose && console.log(errorText);
|
|
40
45
|
break;
|
|
41
46
|
case "validation_error":
|
|
42
|
-
|
|
47
|
+
errorText = 'были переданы некорректные данные';
|
|
48
|
+
verbose && console.log(errorText);
|
|
43
49
|
break;
|
|
44
50
|
default:
|
|
45
|
-
|
|
51
|
+
errorText = 'Во время выполнения запроса произошла ошибка: ' + data.type;
|
|
52
|
+
verbose && console.log(errorText);
|
|
46
53
|
}
|
|
54
|
+
reject(errorText); // Отклоняем Promise в случае ошибки
|
|
47
55
|
}
|
|
48
56
|
}
|
|
49
57
|
);
|
|
50
58
|
} else {
|
|
51
|
-
|
|
59
|
+
errorText = 'не найден включенный виджет '+routeKey+', либо услуга обратного звонка не активна';
|
|
60
|
+
verbose && console.log(errorText);
|
|
61
|
+
reject(errorText);
|
|
52
62
|
}
|
|
53
63
|
} else {
|
|
54
|
-
|
|
64
|
+
errorText = 'во время обработки произошла ошибка';
|
|
65
|
+
verbose && console.log(errorText);
|
|
55
66
|
verbose && console.log(data)
|
|
67
|
+
reject(errorText);
|
|
56
68
|
}
|
|
57
69
|
});
|
|
70
|
+
} else {
|
|
71
|
+
reject("window.ctw is not defined");
|
|
58
72
|
}
|
|
59
|
-
|
|
73
|
+
});
|
|
60
74
|
};
|
package/lib/form.js
CHANGED
|
@@ -120,7 +120,7 @@ const showMessageModal = (messageModal, icon, message) => {
|
|
|
120
120
|
};
|
|
121
121
|
|
|
122
122
|
|
|
123
|
-
export const connectForms = (url, callback, callback_error) => {
|
|
123
|
+
export const connectForms = (url, callback, callback_error, ct_routeKey = 'ct_callback', verbose = false) => {
|
|
124
124
|
|
|
125
125
|
// Отправка всех форм
|
|
126
126
|
document.querySelectorAll("form").forEach((form) => {
|
|
@@ -153,17 +153,14 @@ document.querySelectorAll("form").forEach((form) => {
|
|
|
153
153
|
// Отпрвка цели что форма submit только после всех проверок
|
|
154
154
|
reachGoal("form_submit");
|
|
155
155
|
|
|
156
|
-
// Отправка заявки на обратный возов в CallTouch
|
|
157
|
-
createRequest("ct_callback", phone.value);
|
|
158
|
-
|
|
159
156
|
let formData = new FormData(form);
|
|
160
157
|
if(getCookie('fta')) {
|
|
161
158
|
formData.append("fta", true);
|
|
162
159
|
}
|
|
163
160
|
if(getCookie('__gtm_campaign_url')) {
|
|
164
|
-
|
|
161
|
+
let source = new URL(getCookie('__gtm_campaign_url'));
|
|
165
162
|
source.search.slice(1).split("&").forEach(function(pair) {
|
|
166
|
-
|
|
163
|
+
let param = pair.split("=");
|
|
167
164
|
formData.append(param[0], param[1]);
|
|
168
165
|
});
|
|
169
166
|
}
|
|
@@ -180,7 +177,7 @@ document.querySelectorAll("form").forEach((form) => {
|
|
|
180
177
|
.slice(1)
|
|
181
178
|
.split("&")
|
|
182
179
|
.forEach(function (pair) {
|
|
183
|
-
|
|
180
|
+
let param = pair.split("=");
|
|
184
181
|
if(formData.get(param[0])){
|
|
185
182
|
formData.set(param[0], decodeURIComponent(param[1]));
|
|
186
183
|
} else {
|
|
@@ -189,7 +186,15 @@ document.querySelectorAll("form").forEach((form) => {
|
|
|
189
186
|
});
|
|
190
187
|
|
|
191
188
|
const params = new URLSearchParams([...formData]);
|
|
192
|
-
|
|
189
|
+
|
|
190
|
+
let formDataObj = {};
|
|
191
|
+
try {
|
|
192
|
+
// Отправка заявки на обратный возов в CallTouch
|
|
193
|
+
const requestData = await createRequest(ct_routeKey, phone.value, verbose);
|
|
194
|
+
} catch (error) {
|
|
195
|
+
verbose && console.error("Error during request Calltouch callback:", error);
|
|
196
|
+
formDataObj = getFormDataObject(formData, form.id);
|
|
197
|
+
}
|
|
193
198
|
|
|
194
199
|
await fetch(url, {
|
|
195
200
|
method: "POST",
|
|
@@ -203,7 +208,7 @@ document.querySelectorAll("form").forEach((form) => {
|
|
|
203
208
|
})
|
|
204
209
|
.then((res) => res.json())
|
|
205
210
|
.then((data) => {
|
|
206
|
-
|
|
211
|
+
verbose && console.log(data);
|
|
207
212
|
stateBtn(btn, "Отправить");
|
|
208
213
|
if (data.answer == "required") {
|
|
209
214
|
reachGoal("form_required");
|