@searchspring/snap-controller 0.73.7 → 0.75.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/dist/cjs/Autocomplete/AutocompleteController.d.ts +0 -1
- package/dist/cjs/Autocomplete/AutocompleteController.d.ts.map +1 -1
- package/dist/cjs/Autocomplete/AutocompleteController.js +124 -68
- package/dist/cjs/Finder/FinderController.d.ts.map +1 -1
- package/dist/cjs/Finder/FinderController.js +3 -0
- package/dist/cjs/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/cjs/Recommendation/RecommendationController.js +84 -58
- package/dist/cjs/Search/SearchController.d.ts.map +1 -1
- package/dist/cjs/Search/SearchController.js +142 -66
- package/dist/cjs/utils/isClickWithinProductLink.d.ts +1 -1
- package/dist/cjs/utils/isClickWithinProductLink.d.ts.map +1 -1
- package/dist/cjs/utils/isClickWithinProductLink.js +14 -12
- package/dist/esm/Autocomplete/AutocompleteController.d.ts +0 -1
- package/dist/esm/Autocomplete/AutocompleteController.d.ts.map +1 -1
- package/dist/esm/Autocomplete/AutocompleteController.js +101 -28
- package/dist/esm/Finder/FinderController.d.ts.map +1 -1
- package/dist/esm/Finder/FinderController.js +3 -0
- package/dist/esm/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/esm/Recommendation/RecommendationController.js +64 -22
- package/dist/esm/Search/SearchController.d.ts.map +1 -1
- package/dist/esm/Search/SearchController.js +106 -22
- package/dist/esm/utils/isClickWithinProductLink.d.ts +1 -1
- package/dist/esm/utils/isClickWithinProductLink.d.ts.map +1 -1
- package/dist/esm/utils/isClickWithinProductLink.js +13 -12
- package/package.json +10 -10
|
@@ -88,6 +88,9 @@ var BACKGROUND_FILTERS_VALUE_FLAGS = [1, 0, '1', '0', 'true', 'false', true, fal
|
|
|
88
88
|
var defaultConfig = {
|
|
89
89
|
id: 'search',
|
|
90
90
|
globals: {},
|
|
91
|
+
beacon: {
|
|
92
|
+
enabled: true,
|
|
93
|
+
},
|
|
91
94
|
settings: {
|
|
92
95
|
redirects: {
|
|
93
96
|
merchandising: true,
|
|
@@ -116,9 +119,17 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
116
119
|
_this.track = {
|
|
117
120
|
banner: {
|
|
118
121
|
impression: function (_a) {
|
|
119
|
-
var _b, _c, _d;
|
|
122
|
+
var _b, _c, _d, _e;
|
|
120
123
|
var uid = _a.uid, responseId = _a.responseId;
|
|
121
|
-
if (
|
|
124
|
+
if (!uid) {
|
|
125
|
+
_this.log.warn('No banner provided to track.banner.impression');
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (!_this.events[responseId]) {
|
|
129
|
+
_this.log.warn('No responseId found in controller, ensure correct controller is used');
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
else if ((_c = (_b = _this.events[responseId]) === null || _b === void 0 ? void 0 : _b.banner[uid]) === null || _c === void 0 ? void 0 : _c.impression) {
|
|
122
133
|
return;
|
|
123
134
|
}
|
|
124
135
|
var banner = { uid: uid };
|
|
@@ -128,13 +139,21 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
128
139
|
results: [],
|
|
129
140
|
};
|
|
130
141
|
_this.eventManager.fire('track.banner.impression', { controller: _this, product: { uid: uid }, trackEvent: data });
|
|
131
|
-
_this.tracker.events[_this.page.type].impression({ data: data, siteId: (
|
|
142
|
+
((_d = _this.config.beacon) === null || _d === void 0 ? void 0 : _d.enabled) && _this.tracker.events[_this.page.type].impression({ data: data, siteId: (_e = _this.config.globals) === null || _e === void 0 ? void 0 : _e.siteId });
|
|
132
143
|
_this.events[responseId].banner[uid] = _this.events[responseId].banner[uid] || {};
|
|
133
144
|
_this.events[responseId].banner[uid].impression = true;
|
|
134
145
|
},
|
|
135
146
|
click: function (e, banner) {
|
|
136
147
|
var _a, _b, _c;
|
|
148
|
+
if (!banner) {
|
|
149
|
+
_this.log.warn('No banner provided to track.banner.click');
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
137
152
|
var responseId = banner.responseId, uid = banner.uid;
|
|
153
|
+
if (!_this.events[responseId]) {
|
|
154
|
+
_this.log.warn('No responseId found in controller, ensure correct controller is used');
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
138
157
|
if ((0, isClickWithinBannerLink_1.isClickWithinBannerLink)(e)) {
|
|
139
158
|
if ((_c = (_b = (_a = _this.events) === null || _a === void 0 ? void 0 : _a[responseId]) === null || _b === void 0 ? void 0 : _b.banner[uid]) === null || _c === void 0 ? void 0 : _c.clickThrough) {
|
|
140
159
|
return;
|
|
@@ -148,15 +167,23 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
148
167
|
}
|
|
149
168
|
},
|
|
150
169
|
clickThrough: function (e, _a) {
|
|
151
|
-
var _b;
|
|
170
|
+
var _b, _c;
|
|
152
171
|
var uid = _a.uid, responseId = _a.responseId;
|
|
172
|
+
if (!uid) {
|
|
173
|
+
_this.log.warn('No banner provided to track.banner.clickThrough');
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (!_this.events[responseId]) {
|
|
177
|
+
_this.log.warn('No responseId found in controller, ensure correct controller is used');
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
153
180
|
var banner = { uid: uid };
|
|
154
181
|
var data = {
|
|
155
182
|
responseId: responseId,
|
|
156
183
|
banners: [banner],
|
|
157
184
|
};
|
|
158
185
|
_this.eventManager.fire('track.banner.clickThrough', { controller: _this, event: e, product: { uid: uid }, trackEvent: data });
|
|
159
|
-
_this.tracker.events[_this.page.type].clickThrough({ data: data, siteId: (
|
|
186
|
+
((_b = _this.config.beacon) === null || _b === void 0 ? void 0 : _b.enabled) && _this.tracker.events[_this.page.type].clickThrough({ data: data, siteId: (_c = _this.config.globals) === null || _c === void 0 ? void 0 : _c.siteId });
|
|
160
187
|
_this.events[responseId].banner[uid] = _this.events[responseId].banner[uid] || {};
|
|
161
188
|
_this.events[responseId].banner[uid].clickThrough = true;
|
|
162
189
|
setTimeout(function () {
|
|
@@ -166,8 +193,16 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
166
193
|
},
|
|
167
194
|
product: {
|
|
168
195
|
clickThrough: function (e, result) {
|
|
169
|
-
var _a, _b, _c, _d, _e, _f;
|
|
196
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
197
|
+
if (!result) {
|
|
198
|
+
_this.log.warn('No result provided to track.product.clickThrough');
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
170
201
|
var responseId = result.responseId;
|
|
202
|
+
if (!_this.events[responseId]) {
|
|
203
|
+
_this.log.warn('No responseId found in controller, ensure correct controller is used');
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
171
206
|
var target = e.target;
|
|
172
207
|
var resultHref = ((_b = (_a = result.display) === null || _a === void 0 ? void 0 : _a.mappings.core) === null || _b === void 0 ? void 0 : _b.url) || ((_c = result.mappings.core) === null || _c === void 0 ? void 0 : _c.url) || '';
|
|
173
208
|
var elemHref = target === null || target === void 0 ? void 0 : target.getAttribute('href');
|
|
@@ -194,22 +229,31 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
194
229
|
}
|
|
195
230
|
// store position data or empty object
|
|
196
231
|
_this.storage.set('scrollMap', scrollMap);
|
|
197
|
-
var
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
232
|
+
var type = (['product', 'banner'].includes(result.type) ? result.type : 'product');
|
|
233
|
+
var item = __assign({ type: type, uid: result.id ? '' + result.id : '' }, (type === 'product'
|
|
234
|
+
? {
|
|
235
|
+
parentId: result.id ? '' + result.id : '',
|
|
236
|
+
sku: ((_e = result.mappings.core) === null || _e === void 0 ? void 0 : _e.sku) ? '' + ((_f = result.mappings.core) === null || _f === void 0 ? void 0 : _f.sku) : undefined,
|
|
237
|
+
}
|
|
238
|
+
: {}));
|
|
203
239
|
var data = {
|
|
204
240
|
responseId: responseId,
|
|
205
241
|
results: [item],
|
|
206
242
|
};
|
|
207
243
|
_this.eventManager.fire('track.product.clickThrough', { controller: _this, event: e, product: result, trackEvent: data });
|
|
208
|
-
_this.tracker.events[_this.page.type].clickThrough({ data: data, siteId: (
|
|
244
|
+
((_g = _this.config.beacon) === null || _g === void 0 ? void 0 : _g.enabled) && _this.tracker.events[_this.page.type].clickThrough({ data: data, siteId: (_h = _this.config.globals) === null || _h === void 0 ? void 0 : _h.siteId });
|
|
209
245
|
},
|
|
210
246
|
click: function (e, result) {
|
|
211
247
|
var _a, _b, _c, _d, _e, _f;
|
|
248
|
+
if (!result) {
|
|
249
|
+
_this.log.warn('No result provided to track.product.click');
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
212
252
|
var responseId = result.responseId;
|
|
253
|
+
if (!_this.events[responseId]) {
|
|
254
|
+
_this.log.warn('No responseId found in controller, ensure correct controller is used');
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
213
257
|
if (result.type === 'banner' && (0, isClickWithinBannerLink_1.isClickWithinBannerLink)(e)) {
|
|
214
258
|
if ((_c = (_b = (_a = _this.events) === null || _a === void 0 ? void 0 : _a[responseId]) === null || _b === void 0 ? void 0 : _b.product[result.id]) === null || _c === void 0 ? void 0 : _c.inlineBannerClickThrough) {
|
|
215
259
|
return;
|
|
@@ -234,30 +278,47 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
234
278
|
}
|
|
235
279
|
},
|
|
236
280
|
impression: function (result) {
|
|
237
|
-
var _a, _b, _c, _d;
|
|
281
|
+
var _a, _b, _c, _d, _e, _f;
|
|
282
|
+
if (!result) {
|
|
283
|
+
_this.log.warn('No result provided to track.product.impression');
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
238
286
|
var responseId = result.responseId;
|
|
239
|
-
if (
|
|
287
|
+
if (!_this.events[responseId]) {
|
|
288
|
+
_this.log.warn('No responseId found in controller, ensure correct controller is used');
|
|
240
289
|
return;
|
|
241
290
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
291
|
+
else if ((_b = (_a = _this.events[responseId]) === null || _a === void 0 ? void 0 : _a.product[result.id]) === null || _b === void 0 ? void 0 : _b.impression) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
var type = (['product', 'banner'].includes(result.type) ? result.type : 'product');
|
|
295
|
+
var item = __assign({ type: type, uid: result.id ? '' + result.id : '' }, (type === 'product'
|
|
296
|
+
? {
|
|
297
|
+
parentId: result.id ? '' + result.id : '',
|
|
298
|
+
sku: ((_c = result.mappings.core) === null || _c === void 0 ? void 0 : _c.sku) ? '' + ((_d = result.mappings.core) === null || _d === void 0 ? void 0 : _d.sku) : undefined,
|
|
299
|
+
}
|
|
300
|
+
: {}));
|
|
248
301
|
var data = {
|
|
249
302
|
responseId: responseId,
|
|
250
303
|
results: [item],
|
|
251
304
|
banners: [],
|
|
252
305
|
};
|
|
253
306
|
_this.eventManager.fire('track.product.impression', { controller: _this, product: result, trackEvent: data });
|
|
254
|
-
_this.tracker.events[_this.page.type].impression({ data: data, siteId: (
|
|
307
|
+
((_e = _this.config.beacon) === null || _e === void 0 ? void 0 : _e.enabled) && _this.tracker.events[_this.page.type].impression({ data: data, siteId: (_f = _this.config.globals) === null || _f === void 0 ? void 0 : _f.siteId });
|
|
255
308
|
_this.events[responseId].product[result.id] = _this.events[responseId].product[result.id] || {};
|
|
256
309
|
_this.events[responseId].product[result.id].impression = true;
|
|
257
310
|
},
|
|
258
311
|
addToCart: function (result) {
|
|
259
|
-
var _a, _b, _c;
|
|
312
|
+
var _a, _b, _c, _d;
|
|
313
|
+
if (!result) {
|
|
314
|
+
_this.log.warn('No result provided to track.product.addToCart');
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
260
317
|
var responseId = result.responseId;
|
|
318
|
+
if (!_this.events[responseId]) {
|
|
319
|
+
_this.log.warn('No responseId found in controller, ensure correct controller is used');
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
261
322
|
var product = {
|
|
262
323
|
parentId: result.id,
|
|
263
324
|
uid: result.id,
|
|
@@ -270,34 +331,38 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
270
331
|
results: [product],
|
|
271
332
|
};
|
|
272
333
|
_this.eventManager.fire('track.product.addToCart', { controller: _this, product: result, trackEvent: data });
|
|
273
|
-
_this.tracker.events[_this.page.type].addToCart({ data: data, siteId: (
|
|
334
|
+
((_c = _this.config.beacon) === null || _c === void 0 ? void 0 : _c.enabled) && _this.tracker.events[_this.page.type].addToCart({ data: data, siteId: (_d = _this.config.globals) === null || _d === void 0 ? void 0 : _d.siteId });
|
|
274
335
|
},
|
|
275
336
|
},
|
|
276
337
|
redirect: function (_a) {
|
|
277
|
-
var _b;
|
|
338
|
+
var _b, _c;
|
|
278
339
|
var redirectURL = _a.redirectURL, responseId = _a.responseId;
|
|
340
|
+
if (!redirectURL) {
|
|
341
|
+
_this.log.warn('No redirectURL provided to track.redirect');
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
279
344
|
var data = {
|
|
280
345
|
responseId: responseId,
|
|
281
346
|
redirect: redirectURL,
|
|
282
347
|
};
|
|
283
348
|
_this.eventManager.fire('track.redirect', { controller: _this, redirectURL: redirectURL, trackEvent: data });
|
|
284
|
-
_this.tracker.events.search.redirect({ data: data, siteId: (
|
|
349
|
+
((_b = _this.config.beacon) === null || _b === void 0 ? void 0 : _b.enabled) && _this.tracker.events.search.redirect({ data: data, siteId: (_c = _this.config.globals) === null || _c === void 0 ? void 0 : _c.siteId });
|
|
285
350
|
},
|
|
286
351
|
};
|
|
287
352
|
_this.search = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
288
|
-
var params_1, err_1, stringyParams, prevStringyParams, searchProfile, meta, response, preventBackfill, dontBackfill, backfillRequestsParams_1, backfillRequests, backfillResponses, backfillResults, responseId, responseId, afterSearchProfile, err_2, afterStoreProfile, err_3, err_4;
|
|
353
|
+
var params_1, err_1, stringyParams, prevStringyParams, searchProfile, meta, response, preventBackfill, dontBackfill, backfillRequestsParams_1, backfillRequests, backfillResponses, backfillResults, responseId, responseId, afterSearchProfile, err_2, data, afterStoreProfile, err_3, err_4;
|
|
289
354
|
var _a, _b;
|
|
290
355
|
var _this = this;
|
|
291
|
-
var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
292
|
-
return __generator(this, function (
|
|
293
|
-
switch (
|
|
356
|
+
var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
357
|
+
return __generator(this, function (_q) {
|
|
358
|
+
switch (_q.label) {
|
|
294
359
|
case 0:
|
|
295
|
-
|
|
360
|
+
_q.trys.push([0, 22, 23, 24]);
|
|
296
361
|
if (!!this.initialized) return [3 /*break*/, 2];
|
|
297
362
|
return [4 /*yield*/, this.init()];
|
|
298
363
|
case 1:
|
|
299
|
-
|
|
300
|
-
|
|
364
|
+
_q.sent();
|
|
365
|
+
_q.label = 2;
|
|
301
366
|
case 2:
|
|
302
367
|
params_1 = this.params;
|
|
303
368
|
if (((_d = (_c = params_1.search) === null || _c === void 0 ? void 0 : _c.query) === null || _d === void 0 ? void 0 : _d.string) && ((_f = (_e = params_1.search) === null || _e === void 0 ? void 0 : _e.query) === null || _f === void 0 ? void 0 : _f.string.length)) {
|
|
@@ -305,18 +370,18 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
305
370
|
this.store.history.save(params_1.search.query.string);
|
|
306
371
|
}
|
|
307
372
|
this.store.loading = true;
|
|
308
|
-
|
|
373
|
+
_q.label = 3;
|
|
309
374
|
case 3:
|
|
310
|
-
|
|
375
|
+
_q.trys.push([3, 5, , 6]);
|
|
311
376
|
return [4 /*yield*/, this.eventManager.fire('beforeSearch', {
|
|
312
377
|
controller: this,
|
|
313
378
|
request: params_1,
|
|
314
379
|
})];
|
|
315
380
|
case 4:
|
|
316
|
-
|
|
381
|
+
_q.sent();
|
|
317
382
|
return [3 /*break*/, 6];
|
|
318
383
|
case 5:
|
|
319
|
-
err_1 =
|
|
384
|
+
err_1 = _q.sent();
|
|
320
385
|
if ((err_1 === null || err_1 === void 0 ? void 0 : err_1.message) == 'cancelled') {
|
|
321
386
|
this.log.warn("'beforeSearch' middleware cancelled");
|
|
322
387
|
return [2 /*return*/];
|
|
@@ -366,7 +431,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
366
431
|
});
|
|
367
432
|
return [4 /*yield*/, Promise.all(backfillRequests)];
|
|
368
433
|
case 7:
|
|
369
|
-
backfillResponses =
|
|
434
|
+
backfillResponses = _q.sent();
|
|
370
435
|
// backfillResponses are [meta, searchResponse][]
|
|
371
436
|
// set the meta and response to the first page of backfillResponses
|
|
372
437
|
meta = backfillResponses[0][0];
|
|
@@ -385,12 +450,12 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
385
450
|
case 8: return [4 /*yield*/, this.client[this.page.type](params_1)];
|
|
386
451
|
case 9:
|
|
387
452
|
// infinite with no backfills.
|
|
388
|
-
_a =
|
|
453
|
+
_a = _q.sent(), meta = _a[0], response = _a[1];
|
|
389
454
|
responseId = response.tracking.responseId;
|
|
390
455
|
this.events[responseId] = this.events[responseId] || { product: {}, banner: {} };
|
|
391
456
|
// append new results to previous results
|
|
392
457
|
response.results = __spreadArray(__spreadArray([], this.previousResults, true), (response.results || []), true);
|
|
393
|
-
|
|
458
|
+
_q.label = 10;
|
|
394
459
|
case 10: return [3 /*break*/, 13];
|
|
395
460
|
case 11:
|
|
396
461
|
// normal request
|
|
@@ -398,10 +463,10 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
398
463
|
this.previousResults = [];
|
|
399
464
|
return [4 /*yield*/, this.client[this.page.type](params_1)];
|
|
400
465
|
case 12:
|
|
401
|
-
_b =
|
|
466
|
+
_b = _q.sent(), meta = _b[0], response = _b[1];
|
|
402
467
|
responseId = response.tracking.responseId;
|
|
403
468
|
this.events[responseId] = { product: {}, banner: {} };
|
|
404
|
-
|
|
469
|
+
_q.label = 13;
|
|
405
470
|
case 13:
|
|
406
471
|
// MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
|
|
407
472
|
if (!response.meta) {
|
|
@@ -410,19 +475,19 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
410
475
|
searchProfile.stop();
|
|
411
476
|
this.log.profile(searchProfile);
|
|
412
477
|
afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params_1 }).start();
|
|
413
|
-
|
|
478
|
+
_q.label = 14;
|
|
414
479
|
case 14:
|
|
415
|
-
|
|
480
|
+
_q.trys.push([14, 16, , 17]);
|
|
416
481
|
return [4 /*yield*/, this.eventManager.fire('afterSearch', {
|
|
417
482
|
controller: this,
|
|
418
483
|
request: params_1,
|
|
419
484
|
response: response,
|
|
420
485
|
})];
|
|
421
486
|
case 15:
|
|
422
|
-
|
|
487
|
+
_q.sent();
|
|
423
488
|
return [3 /*break*/, 17];
|
|
424
489
|
case 16:
|
|
425
|
-
err_2 =
|
|
490
|
+
err_2 = _q.sent();
|
|
426
491
|
if ((err_2 === null || err_2 === void 0 ? void 0 : err_2.message) == 'cancelled') {
|
|
427
492
|
this.log.warn("'afterSearch' middleware cancelled");
|
|
428
493
|
afterSearchProfile.stop();
|
|
@@ -440,20 +505,22 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
440
505
|
this.previousResults = JSON.parse(JSON.stringify(response.results));
|
|
441
506
|
// update the store
|
|
442
507
|
this.store.update(response);
|
|
508
|
+
data = { responseId: response.tracking.responseId };
|
|
509
|
+
((_o = this.config.beacon) === null || _o === void 0 ? void 0 : _o.enabled) && this.tracker.events[this.page.type].render({ data: data, siteId: (_p = this.config.globals) === null || _p === void 0 ? void 0 : _p.siteId });
|
|
443
510
|
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params_1 }).start();
|
|
444
|
-
|
|
511
|
+
_q.label = 18;
|
|
445
512
|
case 18:
|
|
446
|
-
|
|
513
|
+
_q.trys.push([18, 20, , 21]);
|
|
447
514
|
return [4 /*yield*/, this.eventManager.fire('afterStore', {
|
|
448
515
|
controller: this,
|
|
449
516
|
request: params_1,
|
|
450
517
|
response: response,
|
|
451
518
|
})];
|
|
452
519
|
case 19:
|
|
453
|
-
|
|
520
|
+
_q.sent();
|
|
454
521
|
return [3 /*break*/, 21];
|
|
455
522
|
case 20:
|
|
456
|
-
err_3 =
|
|
523
|
+
err_3 = _q.sent();
|
|
457
524
|
if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
|
|
458
525
|
this.log.warn("'afterStore' middleware cancelled");
|
|
459
526
|
afterStoreProfile.stop();
|
|
@@ -469,7 +536,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
469
536
|
this.log.profile(afterStoreProfile);
|
|
470
537
|
return [3 /*break*/, 24];
|
|
471
538
|
case 22:
|
|
472
|
-
err_4 =
|
|
539
|
+
err_4 = _q.sent();
|
|
473
540
|
if (err_4) {
|
|
474
541
|
if (err_4.err && err_4.fetchDetails) {
|
|
475
542
|
switch (err_4.fetchDetails.status) {
|
|
@@ -521,7 +588,11 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
521
588
|
var products;
|
|
522
589
|
var _this = this;
|
|
523
590
|
return __generator(this, function (_a) {
|
|
524
|
-
products = typeof _products.slice == 'function' ? _products.slice() : [_products];
|
|
591
|
+
products = typeof (_products === null || _products === void 0 ? void 0 : _products.slice) == 'function' ? _products.slice() : [_products];
|
|
592
|
+
if (!_products || products.length === 0) {
|
|
593
|
+
this.log.warn('No products provided to search controller.addToCart');
|
|
594
|
+
return [2 /*return*/];
|
|
595
|
+
}
|
|
525
596
|
products.forEach(function (product) {
|
|
526
597
|
_this.track.product.addToCart(product);
|
|
527
598
|
});
|
|
@@ -681,23 +752,20 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
681
752
|
}); });
|
|
682
753
|
}
|
|
683
754
|
_this.eventManager.on('afterStore', function (search, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
684
|
-
var controller,
|
|
685
|
-
var _a, _b, _c, _d, _e, _f, _g, _h
|
|
686
|
-
return __generator(this, function (
|
|
687
|
-
switch (
|
|
755
|
+
var controller, config_1, nonBackgroundFilters;
|
|
756
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
757
|
+
return __generator(this, function (_j) {
|
|
758
|
+
switch (_j.label) {
|
|
688
759
|
case 0: return [4 /*yield*/, next()];
|
|
689
760
|
case 1:
|
|
690
|
-
|
|
761
|
+
_j.sent();
|
|
691
762
|
controller = search.controller;
|
|
692
|
-
responseId = search.response.tracking.responseId;
|
|
693
763
|
if (controller.store.loaded && !controller.store.error) {
|
|
694
|
-
data = { responseId: responseId };
|
|
695
|
-
this.tracker.events[this.page.type].render({ data: data, siteId: (_a = this.config.globals) === null || _a === void 0 ? void 0 : _a.siteId });
|
|
696
764
|
config_1 = search.controller.config;
|
|
697
|
-
nonBackgroundFilters = (
|
|
698
|
-
if (((
|
|
699
|
-
((
|
|
700
|
-
((
|
|
765
|
+
nonBackgroundFilters = (_b = (_a = search === null || search === void 0 ? void 0 : search.request) === null || _a === void 0 ? void 0 : _a.filters) === null || _b === void 0 ? void 0 : _b.filter(function (filter) { return !filter.background; });
|
|
766
|
+
if (((_d = (_c = config_1 === null || config_1 === void 0 ? void 0 : config_1.settings) === null || _c === void 0 ? void 0 : _c.redirects) === null || _d === void 0 ? void 0 : _d.singleResult) &&
|
|
767
|
+
((_f = (_e = search === null || search === void 0 ? void 0 : search.response) === null || _e === void 0 ? void 0 : _e.search) === null || _f === void 0 ? void 0 : _f.query) &&
|
|
768
|
+
((_h = (_g = search === null || search === void 0 ? void 0 : search.response) === null || _g === void 0 ? void 0 : _g.pagination) === null || _h === void 0 ? void 0 : _h.totalResults) === 1 &&
|
|
701
769
|
!(nonBackgroundFilters === null || nonBackgroundFilters === void 0 ? void 0 : nonBackgroundFilters.length)) {
|
|
702
770
|
window.location.replace(search === null || search === void 0 ? void 0 : search.response.results[0].mappings.core.url);
|
|
703
771
|
return [2 /*return*/, false];
|
|
@@ -884,8 +952,16 @@ function generateHrefSelector(element, href, levels) {
|
|
|
884
952
|
var level = 0;
|
|
885
953
|
var elem = element;
|
|
886
954
|
while (elem && level <= levels) {
|
|
887
|
-
|
|
888
|
-
|
|
955
|
+
var innerHrefElem = null;
|
|
956
|
+
try {
|
|
957
|
+
innerHrefElem = elem.querySelector("[href*=\"".concat(href, "\"]"));
|
|
958
|
+
}
|
|
959
|
+
catch (e) {
|
|
960
|
+
try {
|
|
961
|
+
innerHrefElem = elem.querySelector((0, css_escape_1.default)("[href*=\"".concat(href, "\"]")));
|
|
962
|
+
}
|
|
963
|
+
catch (_a) { }
|
|
964
|
+
}
|
|
889
965
|
if (innerHrefElem) {
|
|
890
966
|
// innerHrefElem was found! now get selectors up to elem that contained it
|
|
891
967
|
var selector = '';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Product } from '@searchspring/snap-store-mobx';
|
|
2
|
-
export declare const CLICK_DUPLICATION_TIMEOUT =
|
|
2
|
+
export declare const CLICK_DUPLICATION_TIMEOUT = 1000;
|
|
3
3
|
export declare const CLICK_THROUGH_CLOSEST_MAX_LEVELS = 12;
|
|
4
4
|
export declare const isClickWithinProductLink: (e: MouseEvent, result: Product) => boolean;
|
|
5
5
|
//# sourceMappingURL=isClickWithinProductLink.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isClickWithinProductLink.d.ts","sourceRoot":"","sources":["../../../src/utils/isClickWithinProductLink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAE7D,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"isClickWithinProductLink.d.ts","sourceRoot":"","sources":["../../../src/utils/isClickWithinProductLink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAE7D,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,eAAO,MAAM,wBAAwB,MAAO,UAAU,UAAU,OAAO,KAAG,OAoBzE,CAAC"}
|
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isClickWithinProductLink = exports.CLICK_THROUGH_CLOSEST_MAX_LEVELS = exports.CLICK_DUPLICATION_TIMEOUT = void 0;
|
|
4
|
-
exports.CLICK_DUPLICATION_TIMEOUT =
|
|
4
|
+
exports.CLICK_DUPLICATION_TIMEOUT = 1000;
|
|
5
5
|
exports.CLICK_THROUGH_CLOSEST_MAX_LEVELS = 12;
|
|
6
6
|
var isClickWithinProductLink = function (e, result) {
|
|
7
7
|
var _a, _b, _c;
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
var resultDisplayUrl = ((_b = (_a = result === null || result === void 0 ? void 0 : result.display) === null || _a === void 0 ? void 0 : _a.mappings.core) === null || _b === void 0 ? void 0 : _b.url) || '';
|
|
9
|
+
var resultCoreUrl = ((_c = result === null || result === void 0 ? void 0 : result.mappings.core) === null || _c === void 0 ? void 0 : _c.url) || '';
|
|
10
|
+
// Get the composed path to handle shadow DOM elements
|
|
11
|
+
var path = e.composedPath ? e.composedPath() : [e.target];
|
|
12
|
+
// Check up to CLICK_THROUGH_CLOSEST_MAX_LEVELS elements in the path
|
|
13
|
+
var elementsToCheck = path.slice(0, exports.CLICK_THROUGH_CLOSEST_MAX_LEVELS);
|
|
14
|
+
for (var _i = 0, elementsToCheck_1 = elementsToCheck; _i < elementsToCheck_1.length; _i++) {
|
|
15
|
+
var element = elementsToCheck_1[_i];
|
|
16
|
+
if (element instanceof Element) {
|
|
17
|
+
var href = element.getAttribute('href');
|
|
18
|
+
if (href && ((resultCoreUrl && href.includes(resultCoreUrl)) || (resultDisplayUrl && href.includes(resultDisplayUrl)))) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
17
21
|
}
|
|
18
|
-
currentElement = currentElement.parentElement;
|
|
19
|
-
level++;
|
|
20
22
|
}
|
|
21
23
|
return false;
|
|
22
24
|
};
|
|
@@ -28,7 +28,6 @@ export declare class AutocompleteController extends AbstractController {
|
|
|
28
28
|
store: AutocompleteStore;
|
|
29
29
|
config: AutocompleteControllerConfig;
|
|
30
30
|
storage: StorageStore;
|
|
31
|
-
private lastSearchQuery;
|
|
32
31
|
private events;
|
|
33
32
|
constructor(config: AutocompleteControllerConfig, { client, store, urlManager, eventManager, profiler, logger, tracker }: ControllerServices, context?: ContextVariables);
|
|
34
33
|
track: AutocompleteTrackMethods;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAa,OAAO,EAAE,MAAM,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AACrH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,EAA6C,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE9I,OAAO,KAAK,EAAE,wBAAwB,EAA4C,MAAM,2BAA2B,CAAC;AAkBpH,eAAO,MAAM,WAAW,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAa,OAAO,EAAE,MAAM,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AACrH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,EAA6C,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE9I,OAAO,KAAK,EAAE,wBAAwB,EAA4C,MAAM,2BAA2B,CAAC;AAkBpH,eAAO,MAAM,WAAW,MAAM,CAAC;AAkC/B,KAAK,wBAAwB,GAAG;IAC/B,MAAM,EAAE;QACP,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,0BAA0B,KAAK,IAAI,CAAC;QAChF,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,0BAA0B,KAAK,IAAI,CAAC;QACvF,UAAU,EAAE,CAAC,mBAAmB,EAAE,0BAA0B,KAAK,IAAI,CAAC;KACtE,CAAC;IACF,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QAChE,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QAC/C,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACtC,CAAC;IACF,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC7F,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,kBAAkB;IACtD,IAAI,kBAAgC;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,YAAY,CAAC;IAE7B,OAAO,CAAC,MAAM,CAgBP;gBAGN,MAAM,EAAE,4BAA4B,EACpC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA8D3B,KAAK,EAAE,wBAAwB,CA8N7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CAkDrC;IAEK,UAAU,CAAC,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BhE,KAAK,IAAI,IAAI;IASb,QAAQ;;0BAEc,aAAa,KAAG,QAAQ,OAAO,GAAG,SAAS,CAAC;wBAiDpD,aAAa,KAAG,IAAI;uBAMrB,UAAU,KAAG,IAAI;4BAQN,MAAM,SAAS,CAAC,gBAAgB,CAAC,KAAG,QAAQ,IAAI,CAAC;mCA+ChD,MAAM,WAAW,CAAC,gBAAgB,CAAC,KAAG,IAAI;uBAqBtD,KAAK;;;;uBA0DL,UAAU,KAAG,IAAI;;MAS5B;IAEF,MAAM,IAAI,IAAI;IAgBR,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgF3B,cAAc,QAAa,QAAQ,IAAI,CAAC,CAwBtC;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAqK9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAY/D;CACF"}
|