@searchspring/snap-controller 0.61.5 → 0.62.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.map +1 -1
- package/dist/cjs/Autocomplete/AutocompleteController.js +52 -65
- package/dist/cjs/Finder/FinderController.d.ts.map +1 -1
- package/dist/cjs/Finder/FinderController.js +30 -41
- package/dist/cjs/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/cjs/Recommendation/RecommendationController.js +39 -42
- package/dist/cjs/Search/SearchController.d.ts.map +1 -1
- package/dist/cjs/Search/SearchController.js +53 -66
- package/dist/esm/Autocomplete/AutocompleteController.d.ts.map +1 -1
- package/dist/esm/Autocomplete/AutocompleteController.js +25 -24
- package/dist/esm/Finder/FinderController.d.ts.map +1 -1
- package/dist/esm/Finder/FinderController.js +12 -13
- package/dist/esm/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/esm/Recommendation/RecommendationController.js +17 -11
- package/dist/esm/Search/SearchController.d.ts.map +1 -1
- package/dist/esm/Search/SearchController.js +12 -15
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAa,MAAM,+BAA+B,CAAC;AACxE,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,
|
|
1
|
+
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAa,MAAM,+BAA+B,CAAC;AACxE,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,EAAiC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAElI,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAG1E,eAAO,MAAM,WAAW,MAAM,CAAC;AA+B/B,KAAK,wBAAwB,GAAG;IAC/B,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;KAC5C,CAAC;CACF,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,kBAAkB;IACtD,IAAI,kBAAgC;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,YAAY,CAAC;gBAG5B,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;IAwD3B,KAAK,EAAE,wBAAwB,CAO7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CA0CrC;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;wBAkDpD,aAAa,KAAG,IAAI;uBAMrB,UAAU,KAAG,IAAI;4BAQN,MAAM,SAAS,CAAC,gBAAgB,CAAC,KAAG,QAAQ,IAAI,CAAC;mCAgDhD,MAAM,WAAW,CAAC,gBAAgB,CAAC,KAAG,IAAI;uBAqBtD,KAAK;;;;uBAyDL,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,CA0I9B;CACF"}
|
|
@@ -95,6 +95,10 @@ var defaultConfig = {
|
|
|
95
95
|
merchandising: true,
|
|
96
96
|
singleResult: false,
|
|
97
97
|
},
|
|
98
|
+
bind: {
|
|
99
|
+
input: true,
|
|
100
|
+
submit: true,
|
|
101
|
+
},
|
|
98
102
|
},
|
|
99
103
|
};
|
|
100
104
|
var AutocompleteController = /** @class */ (function (_super) {
|
|
@@ -290,6 +294,8 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
290
294
|
return;
|
|
291
295
|
}
|
|
292
296
|
_this.store.state.input = value;
|
|
297
|
+
// remove merch redirect to prevent race condition
|
|
298
|
+
_this.store.merchandising.redirect = '';
|
|
293
299
|
if ((_b = (_a = _this.config) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b.syncInputs) {
|
|
294
300
|
var inputs = document.querySelectorAll(_this.config.selector);
|
|
295
301
|
inputs.forEach(function (input) {
|
|
@@ -375,6 +381,13 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
375
381
|
return __generator(this, function (_d) {
|
|
376
382
|
switch (_d.label) {
|
|
377
383
|
case 0:
|
|
384
|
+
_d.trys.push([0, 16, 17, 18]);
|
|
385
|
+
if (!!this.initialized) return [3 /*break*/, 2];
|
|
386
|
+
return [4 /*yield*/, this.init()];
|
|
387
|
+
case 1:
|
|
388
|
+
_d.sent();
|
|
389
|
+
_d.label = 2;
|
|
390
|
+
case 2:
|
|
378
391
|
// if urlManager has no query, there will be no need to get params and no query
|
|
379
392
|
if (!this.urlManager.state.query) {
|
|
380
393
|
return [2 /*return*/];
|
|
@@ -384,20 +397,18 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
384
397
|
if (!((_c = (_b = params === null || params === void 0 ? void 0 : params.search) === null || _b === void 0 ? void 0 : _b.query) === null || _c === void 0 ? void 0 : _c.string)) {
|
|
385
398
|
return [2 /*return*/];
|
|
386
399
|
}
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
_d.
|
|
391
|
-
case 2:
|
|
392
|
-
_d.trys.push([2, 4, , 5]);
|
|
400
|
+
this.store.loading = true;
|
|
401
|
+
_d.label = 3;
|
|
402
|
+
case 3:
|
|
403
|
+
_d.trys.push([3, 5, , 6]);
|
|
393
404
|
return [4 /*yield*/, this.eventManager.fire('beforeSearch', {
|
|
394
405
|
controller: this,
|
|
395
406
|
request: params,
|
|
396
407
|
})];
|
|
397
|
-
case 3:
|
|
398
|
-
_d.sent();
|
|
399
|
-
return [3 /*break*/, 5];
|
|
400
408
|
case 4:
|
|
409
|
+
_d.sent();
|
|
410
|
+
return [3 /*break*/, 6];
|
|
411
|
+
case 5:
|
|
401
412
|
err_3 = _d.sent();
|
|
402
413
|
if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
|
|
403
414
|
this.log.warn("'beforeSearch' middleware cancelled");
|
|
@@ -407,11 +418,11 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
407
418
|
this.log.error("error in 'beforeSearch' middleware");
|
|
408
419
|
throw err_3;
|
|
409
420
|
}
|
|
410
|
-
return [3 /*break*/,
|
|
411
|
-
case
|
|
421
|
+
return [3 /*break*/, 6];
|
|
422
|
+
case 6:
|
|
412
423
|
searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
|
|
413
424
|
return [4 /*yield*/, this.client.autocomplete(params)];
|
|
414
|
-
case
|
|
425
|
+
case 7:
|
|
415
426
|
_a = _d.sent(), meta = _a[0], response = _a[1];
|
|
416
427
|
// @ts-ignore : MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
|
|
417
428
|
if (!response.meta) {
|
|
@@ -421,18 +432,18 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
421
432
|
searchProfile.stop();
|
|
422
433
|
this.log.profile(searchProfile);
|
|
423
434
|
afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params }).start();
|
|
424
|
-
_d.label =
|
|
425
|
-
case
|
|
426
|
-
_d.trys.push([
|
|
435
|
+
_d.label = 8;
|
|
436
|
+
case 8:
|
|
437
|
+
_d.trys.push([8, 10, , 11]);
|
|
427
438
|
return [4 /*yield*/, this.eventManager.fire('afterSearch', {
|
|
428
439
|
controller: this,
|
|
429
440
|
request: params,
|
|
430
441
|
response: response,
|
|
431
442
|
})];
|
|
432
|
-
case 8:
|
|
433
|
-
_d.sent();
|
|
434
|
-
return [3 /*break*/, 10];
|
|
435
443
|
case 9:
|
|
444
|
+
_d.sent();
|
|
445
|
+
return [3 /*break*/, 11];
|
|
446
|
+
case 10:
|
|
436
447
|
err_4 = _d.sent();
|
|
437
448
|
if ((err_4 === null || err_4 === void 0 ? void 0 : err_4.message) == 'cancelled') {
|
|
438
449
|
this.log.warn("'afterSearch' middleware cancelled");
|
|
@@ -443,25 +454,25 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
443
454
|
this.log.error("error in 'afterSearch' middleware");
|
|
444
455
|
throw err_4;
|
|
445
456
|
}
|
|
446
|
-
return [3 /*break*/,
|
|
447
|
-
case
|
|
457
|
+
return [3 /*break*/, 11];
|
|
458
|
+
case 11:
|
|
448
459
|
afterSearchProfile.stop();
|
|
449
460
|
this.log.profile(afterSearchProfile);
|
|
450
461
|
// update the store
|
|
451
462
|
this.store.update(response);
|
|
452
463
|
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
453
|
-
_d.label =
|
|
454
|
-
case
|
|
455
|
-
_d.trys.push([
|
|
464
|
+
_d.label = 12;
|
|
465
|
+
case 12:
|
|
466
|
+
_d.trys.push([12, 14, , 15]);
|
|
456
467
|
return [4 /*yield*/, this.eventManager.fire('afterStore', {
|
|
457
468
|
controller: this,
|
|
458
469
|
request: params,
|
|
459
470
|
response: response,
|
|
460
471
|
})];
|
|
461
|
-
case 12:
|
|
462
|
-
_d.sent();
|
|
463
|
-
return [3 /*break*/, 14];
|
|
464
472
|
case 13:
|
|
473
|
+
_d.sent();
|
|
474
|
+
return [3 /*break*/, 15];
|
|
475
|
+
case 14:
|
|
465
476
|
err_5 = _d.sent();
|
|
466
477
|
if ((err_5 === null || err_5 === void 0 ? void 0 : err_5.message) == 'cancelled') {
|
|
467
478
|
this.log.warn("'afterStore' middleware cancelled");
|
|
@@ -472,12 +483,12 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
472
483
|
this.log.error("error in 'afterStore' middleware");
|
|
473
484
|
throw err_5;
|
|
474
485
|
}
|
|
475
|
-
return [3 /*break*/,
|
|
476
|
-
case
|
|
486
|
+
return [3 /*break*/, 15];
|
|
487
|
+
case 15:
|
|
477
488
|
afterStoreProfile.stop();
|
|
478
489
|
this.log.profile(afterStoreProfile);
|
|
479
|
-
return [3 /*break*/,
|
|
480
|
-
case
|
|
490
|
+
return [3 /*break*/, 18];
|
|
491
|
+
case 16:
|
|
481
492
|
err_6 = _d.sent();
|
|
482
493
|
if (err_6) {
|
|
483
494
|
if (err_6.err && err_6.fetchDetails) {
|
|
@@ -517,10 +528,12 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
517
528
|
this.log.error(err_6);
|
|
518
529
|
this.handleError(err_6);
|
|
519
530
|
}
|
|
520
|
-
this.store.loading = false;
|
|
521
531
|
}
|
|
522
|
-
return [3 /*break*/,
|
|
523
|
-
case
|
|
532
|
+
return [3 /*break*/, 18];
|
|
533
|
+
case 17:
|
|
534
|
+
this.store.loading = false;
|
|
535
|
+
return [7 /*endfinally*/];
|
|
536
|
+
case 18: return [2 /*return*/];
|
|
524
537
|
}
|
|
525
538
|
});
|
|
526
539
|
}); };
|
|
@@ -539,19 +552,6 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
539
552
|
type: 'session',
|
|
540
553
|
key: "ss-controller-".concat(_this.config.id),
|
|
541
554
|
});
|
|
542
|
-
// add 'beforeSearch' middleware
|
|
543
|
-
_this.eventManager.on('beforeSearch', function (ac, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
544
|
-
return __generator(this, function (_a) {
|
|
545
|
-
switch (_a.label) {
|
|
546
|
-
case 0:
|
|
547
|
-
ac.controller.store.loading = true;
|
|
548
|
-
return [4 /*yield*/, next()];
|
|
549
|
-
case 1:
|
|
550
|
-
_a.sent();
|
|
551
|
-
return [2 /*return*/];
|
|
552
|
-
}
|
|
553
|
-
});
|
|
554
|
-
}); });
|
|
555
555
|
// add 'afterSearch' middleware
|
|
556
556
|
_this.eventManager.on('afterSearch', function (ac, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
557
557
|
return __generator(this, function (_a) {
|
|
@@ -561,25 +561,12 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
561
561
|
_a.sent();
|
|
562
562
|
// cancel search if no input or query doesn't match current urlState
|
|
563
563
|
if (ac.response.autocomplete.query != ac.controller.urlManager.state.query) {
|
|
564
|
-
ac.controller.store.loading = false;
|
|
565
564
|
return [2 /*return*/, false];
|
|
566
565
|
}
|
|
567
566
|
return [2 /*return*/];
|
|
568
567
|
}
|
|
569
568
|
});
|
|
570
569
|
}); });
|
|
571
|
-
// add 'afterStore' middleware
|
|
572
|
-
_this.eventManager.on('afterStore', function (ac, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
573
|
-
return __generator(this, function (_a) {
|
|
574
|
-
switch (_a.label) {
|
|
575
|
-
case 0: return [4 /*yield*/, next()];
|
|
576
|
-
case 1:
|
|
577
|
-
_a.sent();
|
|
578
|
-
ac.controller.store.loading = false;
|
|
579
|
-
return [2 /*return*/];
|
|
580
|
-
}
|
|
581
|
-
});
|
|
582
|
-
}); });
|
|
583
570
|
_this.eventManager.on('beforeSubmit', function (ac, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
584
571
|
var redirectURL, results, singleResultUrl;
|
|
585
572
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
@@ -734,14 +721,14 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
734
721
|
this.unbind();
|
|
735
722
|
inputs = document.querySelectorAll(this.config.selector);
|
|
736
723
|
inputs.forEach(function (input) {
|
|
737
|
-
var _a, _b, _c;
|
|
724
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
738
725
|
input.setAttribute('spellcheck', 'false');
|
|
739
726
|
input.setAttribute('autocomplete', 'off');
|
|
740
727
|
input.setAttribute('autocorrect', 'off');
|
|
741
728
|
input.setAttribute('autocapitalize', 'none');
|
|
742
729
|
input.setAttribute(INPUT_ATTRIBUTE, '');
|
|
743
|
-
input.addEventListener('input', _this.handlers.input.input);
|
|
744
|
-
if (((
|
|
730
|
+
((_b = (_a = _this.config.settings) === null || _a === void 0 ? void 0 : _a.bind) === null || _b === void 0 ? void 0 : _b.input) && input.addEventListener('input', _this.handlers.input.input);
|
|
731
|
+
if (((_d = (_c = _this.config) === null || _c === void 0 ? void 0 : _c.settings) === null || _d === void 0 ? void 0 : _d.initializeFromUrl) && !input.value && _this.store.state.input) {
|
|
745
732
|
input.value = _this.store.state.input;
|
|
746
733
|
}
|
|
747
734
|
input.addEventListener('focus', _this.handlers.input.focus);
|
|
@@ -749,14 +736,14 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
749
736
|
var form = input.form;
|
|
750
737
|
var formActionUrl;
|
|
751
738
|
if (_this.config.action) {
|
|
752
|
-
input.addEventListener('keydown', _this.handlers.input.enterKey);
|
|
739
|
+
((_f = (_e = _this.config.settings) === null || _e === void 0 ? void 0 : _e.bind) === null || _f === void 0 ? void 0 : _f.submit) && input.addEventListener('keydown', _this.handlers.input.enterKey);
|
|
753
740
|
formActionUrl = _this.config.action;
|
|
754
741
|
}
|
|
755
742
|
else if (form) {
|
|
756
|
-
form.addEventListener('submit', _this.handlers.input.formSubmit);
|
|
743
|
+
((_h = (_g = _this.config.settings) === null || _g === void 0 ? void 0 : _g.bind) === null || _h === void 0 ? void 0 : _h.submit) && form.addEventListener('submit', _this.handlers.input.formSubmit);
|
|
757
744
|
formActionUrl = form.action || '';
|
|
758
745
|
// serializeForm will include additional form element in our urlManager as globals
|
|
759
|
-
if ((
|
|
746
|
+
if ((_j = _this.config.settings) === null || _j === void 0 ? void 0 : _j.serializeForm) {
|
|
760
747
|
bindFormParameters(form, _this.handlers.input.formElementChange, function (elem) {
|
|
761
748
|
return elem != input;
|
|
762
749
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FinderController.d.ts","sourceRoot":"","sources":["../../../src/Finder/FinderController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"FinderController.d.ts","sourceRoot":"","sources":["../../../src/Finder/FinderController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,sBAAsB,EAAkB,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiB7G,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;gBAGtC,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA+B3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+BhC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAkB5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAoI9B;CACF"}
|
|
@@ -133,6 +133,7 @@ var FinderController = /** @class */ (function (_super) {
|
|
|
133
133
|
return __generator(this, function (_b) {
|
|
134
134
|
switch (_b.label) {
|
|
135
135
|
case 0:
|
|
136
|
+
_b.trys.push([0, 16, 17, 18]);
|
|
136
137
|
if (!!this.initialized) return [3 /*break*/, 2];
|
|
137
138
|
return [4 /*yield*/, this.init()];
|
|
138
139
|
case 1:
|
|
@@ -143,20 +144,18 @@ var FinderController = /** @class */ (function (_super) {
|
|
|
143
144
|
return [2 /*return*/];
|
|
144
145
|
}
|
|
145
146
|
params = this.params;
|
|
147
|
+
this.store.loading = true;
|
|
146
148
|
_b.label = 3;
|
|
147
149
|
case 3:
|
|
148
|
-
_b.trys.push([3,
|
|
149
|
-
_b.label = 4;
|
|
150
|
-
case 4:
|
|
151
|
-
_b.trys.push([4, 6, , 7]);
|
|
150
|
+
_b.trys.push([3, 5, , 6]);
|
|
152
151
|
return [4 /*yield*/, this.eventManager.fire('beforeSearch', {
|
|
153
152
|
controller: this,
|
|
154
153
|
request: params,
|
|
155
154
|
})];
|
|
156
|
-
case
|
|
155
|
+
case 4:
|
|
157
156
|
_b.sent();
|
|
158
|
-
return [3 /*break*/,
|
|
159
|
-
case
|
|
157
|
+
return [3 /*break*/, 6];
|
|
158
|
+
case 5:
|
|
160
159
|
err_2 = _b.sent();
|
|
161
160
|
if ((err_2 === null || err_2 === void 0 ? void 0 : err_2.message) == 'cancelled') {
|
|
162
161
|
this.log.warn("'beforeSearch' middleware cancelled");
|
|
@@ -166,11 +165,11 @@ var FinderController = /** @class */ (function (_super) {
|
|
|
166
165
|
this.log.error("error in 'beforeSearch' middleware");
|
|
167
166
|
throw err_2;
|
|
168
167
|
}
|
|
169
|
-
return [3 /*break*/,
|
|
170
|
-
case
|
|
168
|
+
return [3 /*break*/, 6];
|
|
169
|
+
case 6:
|
|
171
170
|
searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
|
|
172
171
|
return [4 /*yield*/, this.client.finder(params)];
|
|
173
|
-
case
|
|
172
|
+
case 7:
|
|
174
173
|
_a = _b.sent(), meta = _a[0], response = _a[1];
|
|
175
174
|
// @ts-ignore : MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
|
|
176
175
|
if (!response.meta) {
|
|
@@ -180,18 +179,18 @@ var FinderController = /** @class */ (function (_super) {
|
|
|
180
179
|
searchProfile.stop();
|
|
181
180
|
this.log.profile(searchProfile);
|
|
182
181
|
afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params }).start();
|
|
183
|
-
_b.label =
|
|
184
|
-
case
|
|
185
|
-
_b.trys.push([
|
|
182
|
+
_b.label = 8;
|
|
183
|
+
case 8:
|
|
184
|
+
_b.trys.push([8, 10, , 11]);
|
|
186
185
|
return [4 /*yield*/, this.eventManager.fire('afterSearch', {
|
|
187
186
|
controller: this,
|
|
188
187
|
request: params,
|
|
189
188
|
response: response,
|
|
190
189
|
})];
|
|
191
|
-
case
|
|
190
|
+
case 9:
|
|
192
191
|
_b.sent();
|
|
193
|
-
return [3 /*break*/,
|
|
194
|
-
case
|
|
192
|
+
return [3 /*break*/, 11];
|
|
193
|
+
case 10:
|
|
195
194
|
err_3 = _b.sent();
|
|
196
195
|
if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
|
|
197
196
|
this.log.warn("'afterSearch' middleware cancelled");
|
|
@@ -202,26 +201,26 @@ var FinderController = /** @class */ (function (_super) {
|
|
|
202
201
|
this.log.error("error in 'afterSearch' middleware");
|
|
203
202
|
throw err_3;
|
|
204
203
|
}
|
|
205
|
-
return [3 /*break*/,
|
|
206
|
-
case
|
|
204
|
+
return [3 /*break*/, 11];
|
|
205
|
+
case 11:
|
|
207
206
|
afterSearchProfile.stop();
|
|
208
207
|
this.log.profile(afterSearchProfile);
|
|
209
208
|
// update the store
|
|
210
209
|
// @ts-ignore : MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
|
|
211
210
|
this.store.update(response);
|
|
212
211
|
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
213
|
-
_b.label =
|
|
214
|
-
case
|
|
215
|
-
_b.trys.push([
|
|
212
|
+
_b.label = 12;
|
|
213
|
+
case 12:
|
|
214
|
+
_b.trys.push([12, 14, , 15]);
|
|
216
215
|
return [4 /*yield*/, this.eventManager.fire('afterStore', {
|
|
217
216
|
controller: this,
|
|
218
217
|
request: params,
|
|
219
218
|
response: response,
|
|
220
219
|
})];
|
|
221
|
-
case
|
|
220
|
+
case 13:
|
|
222
221
|
_b.sent();
|
|
223
|
-
return [3 /*break*/,
|
|
224
|
-
case
|
|
222
|
+
return [3 /*break*/, 15];
|
|
223
|
+
case 14:
|
|
225
224
|
err_4 = _b.sent();
|
|
226
225
|
if ((err_4 === null || err_4 === void 0 ? void 0 : err_4.message) == 'cancelled') {
|
|
227
226
|
this.log.warn("'afterStore' middleware cancelled");
|
|
@@ -232,12 +231,12 @@ var FinderController = /** @class */ (function (_super) {
|
|
|
232
231
|
this.log.error("error in 'afterStore' middleware");
|
|
233
232
|
throw err_4;
|
|
234
233
|
}
|
|
235
|
-
return [3 /*break*/,
|
|
236
|
-
case
|
|
234
|
+
return [3 /*break*/, 15];
|
|
235
|
+
case 15:
|
|
237
236
|
afterStoreProfile.stop();
|
|
238
237
|
this.log.profile(afterStoreProfile);
|
|
239
238
|
return [3 /*break*/, 18];
|
|
240
|
-
case
|
|
239
|
+
case 16:
|
|
241
240
|
err_5 = _b.sent();
|
|
242
241
|
if (err_5) {
|
|
243
242
|
if (err_5.err && err_5.fetchDetails) {
|
|
@@ -277,9 +276,11 @@ var FinderController = /** @class */ (function (_super) {
|
|
|
277
276
|
this.log.error(err_5);
|
|
278
277
|
this.handleError(err_5);
|
|
279
278
|
}
|
|
280
|
-
this.store.loading = false;
|
|
281
279
|
}
|
|
282
280
|
return [3 /*break*/, 18];
|
|
281
|
+
case 17:
|
|
282
|
+
this.store.loading = false;
|
|
283
|
+
return [7 /*endfinally*/];
|
|
283
284
|
case 18: return [2 /*return*/];
|
|
284
285
|
}
|
|
285
286
|
});
|
|
@@ -293,19 +294,7 @@ var FinderController = /** @class */ (function (_super) {
|
|
|
293
294
|
return __assign(__assign({}, translatorConfig), { urlRoot: _this.config.url });
|
|
294
295
|
});
|
|
295
296
|
}
|
|
296
|
-
|
|
297
|
-
return __generator(this, function (_a) {
|
|
298
|
-
switch (_a.label) {
|
|
299
|
-
case 0:
|
|
300
|
-
finder.controller.store.loading = true;
|
|
301
|
-
return [4 /*yield*/, next()];
|
|
302
|
-
case 1:
|
|
303
|
-
_a.sent();
|
|
304
|
-
return [2 /*return*/];
|
|
305
|
-
}
|
|
306
|
-
});
|
|
307
|
-
}); });
|
|
308
|
-
// TODO: move this to afterStore
|
|
297
|
+
// TODO: remove this aftersearch when store interface changes
|
|
309
298
|
_this.eventManager.on('afterSearch', function (finder, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
310
299
|
return __generator(this, function (_a) {
|
|
311
300
|
switch (_a.label) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,8BAA8B,
|
|
1
|
+
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,8BAA8B,EAAiB,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEpH,KAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACnE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACrD,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACzD,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QAChE,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;KAC5D,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;IAC1E,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;CACzD,CAAC;AAUF,qBAAa,wBAAyB,SAAQ,kBAAkB;IACxD,IAAI,kBAAkC;IACrC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,8BAA8B,CAAC;IAE/C,MAAM,EAAE;QACP,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,UAAU,CAAC,EAAE,WAAW,CAAC;QACzB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,UAAU,CAAC,EAAE,WAAW,CAAC;YAAC,MAAM,CAAC,EAAE,WAAW,CAAA;SAAE,CAAC,CAAC;KAC7E,CAKC;gBAGD,MAAM,EAAE,8BAA8B,EACtC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA4C3B,KAAK,EAAE,0BAA0B,CAwS5B;IAEL,IAAI,MAAM,IAAI,qBAAqB,CA2BlC;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CA0H9B;CACF"}
|
|
@@ -82,6 +82,7 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
82
82
|
__extends(RecommendationController, _super);
|
|
83
83
|
function RecommendationController(config, _a, context) {
|
|
84
84
|
var client = _a.client, store = _a.store, urlManager = _a.urlManager, eventManager = _a.eventManager, profiler = _a.profiler, logger = _a.logger, tracker = _a.tracker;
|
|
85
|
+
var _b;
|
|
85
86
|
var _this = _super.call(this, config, { client: client, store: store, urlManager: urlManager, eventManager: eventManager, profiler: profiler, logger: logger, tracker: tracker }, context) || this;
|
|
86
87
|
_this.type = types_1.ControllerTypes.recommendation;
|
|
87
88
|
_this.events = {
|
|
@@ -395,6 +396,7 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
395
396
|
return __generator(this, function (_a) {
|
|
396
397
|
switch (_a.label) {
|
|
397
398
|
case 0:
|
|
399
|
+
_a.trys.push([0, 16, 17, 18]);
|
|
398
400
|
if (!!this.initialized) return [3 /*break*/, 2];
|
|
399
401
|
return [4 /*yield*/, this.init()];
|
|
400
402
|
case 1:
|
|
@@ -402,20 +404,18 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
402
404
|
_a.label = 2;
|
|
403
405
|
case 2:
|
|
404
406
|
params = this.params;
|
|
407
|
+
this.store.loading = true;
|
|
405
408
|
_a.label = 3;
|
|
406
409
|
case 3:
|
|
407
|
-
_a.trys.push([3,
|
|
408
|
-
_a.label = 4;
|
|
409
|
-
case 4:
|
|
410
|
-
_a.trys.push([4, 6, , 7]);
|
|
410
|
+
_a.trys.push([3, 5, , 6]);
|
|
411
411
|
return [4 /*yield*/, this.eventManager.fire('beforeSearch', {
|
|
412
412
|
controller: this,
|
|
413
413
|
request: params,
|
|
414
414
|
})];
|
|
415
|
-
case
|
|
415
|
+
case 4:
|
|
416
416
|
_a.sent();
|
|
417
|
-
return [3 /*break*/,
|
|
418
|
-
case
|
|
417
|
+
return [3 /*break*/, 6];
|
|
418
|
+
case 5:
|
|
419
419
|
err_1 = _a.sent();
|
|
420
420
|
if ((err_1 === null || err_1 === void 0 ? void 0 : err_1.message) == 'cancelled') {
|
|
421
421
|
this.log.warn("'beforeSearch' middleware cancelled");
|
|
@@ -425,27 +425,27 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
425
425
|
this.log.error("error in 'beforeSearch' middleware");
|
|
426
426
|
throw err_1;
|
|
427
427
|
}
|
|
428
|
-
return [3 /*break*/,
|
|
429
|
-
case
|
|
428
|
+
return [3 /*break*/, 6];
|
|
429
|
+
case 6:
|
|
430
430
|
searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
|
|
431
431
|
return [4 /*yield*/, this.client.recommend(params)];
|
|
432
|
-
case
|
|
432
|
+
case 7:
|
|
433
433
|
response = _a.sent();
|
|
434
434
|
searchProfile.stop();
|
|
435
435
|
this.log.profile(searchProfile);
|
|
436
436
|
afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params }).start();
|
|
437
|
-
_a.label =
|
|
438
|
-
case
|
|
439
|
-
_a.trys.push([
|
|
437
|
+
_a.label = 8;
|
|
438
|
+
case 8:
|
|
439
|
+
_a.trys.push([8, 10, , 11]);
|
|
440
440
|
return [4 /*yield*/, this.eventManager.fire('afterSearch', {
|
|
441
441
|
controller: this,
|
|
442
442
|
request: params,
|
|
443
443
|
response: response,
|
|
444
444
|
})];
|
|
445
|
-
case
|
|
445
|
+
case 9:
|
|
446
446
|
_a.sent();
|
|
447
|
-
return [3 /*break*/,
|
|
448
|
-
case
|
|
447
|
+
return [3 /*break*/, 11];
|
|
448
|
+
case 10:
|
|
449
449
|
err_2 = _a.sent();
|
|
450
450
|
if ((err_2 === null || err_2 === void 0 ? void 0 : err_2.message) == 'cancelled') {
|
|
451
451
|
this.log.warn("'afterSearch' middleware cancelled");
|
|
@@ -456,25 +456,25 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
456
456
|
this.log.error("error in 'afterSearch' middleware");
|
|
457
457
|
throw err_2;
|
|
458
458
|
}
|
|
459
|
-
return [3 /*break*/,
|
|
460
|
-
case
|
|
459
|
+
return [3 /*break*/, 11];
|
|
460
|
+
case 11:
|
|
461
461
|
afterSearchProfile.stop();
|
|
462
462
|
this.log.profile(afterSearchProfile);
|
|
463
463
|
// update the store
|
|
464
464
|
this.store.update(response);
|
|
465
465
|
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
466
|
-
_a.label =
|
|
467
|
-
case
|
|
468
|
-
_a.trys.push([
|
|
466
|
+
_a.label = 12;
|
|
467
|
+
case 12:
|
|
468
|
+
_a.trys.push([12, 14, , 15]);
|
|
469
469
|
return [4 /*yield*/, this.eventManager.fire('afterStore', {
|
|
470
470
|
controller: this,
|
|
471
471
|
request: params,
|
|
472
472
|
response: response,
|
|
473
473
|
})];
|
|
474
|
-
case
|
|
474
|
+
case 13:
|
|
475
475
|
_a.sent();
|
|
476
|
-
return [3 /*break*/,
|
|
477
|
-
case
|
|
476
|
+
return [3 /*break*/, 15];
|
|
477
|
+
case 14:
|
|
478
478
|
err_3 = _a.sent();
|
|
479
479
|
if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
|
|
480
480
|
this.log.warn("'afterStore' middleware cancelled");
|
|
@@ -485,12 +485,12 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
485
485
|
this.log.error("error in 'afterStore' middleware");
|
|
486
486
|
throw err_3;
|
|
487
487
|
}
|
|
488
|
-
return [3 /*break*/,
|
|
489
|
-
case
|
|
488
|
+
return [3 /*break*/, 15];
|
|
489
|
+
case 15:
|
|
490
490
|
afterStoreProfile.stop();
|
|
491
491
|
this.log.profile(afterStoreProfile);
|
|
492
492
|
return [3 /*break*/, 18];
|
|
493
|
-
case
|
|
493
|
+
case 16:
|
|
494
494
|
err_4 = _a.sent();
|
|
495
495
|
if (err_4) {
|
|
496
496
|
if (err_4.err && err_4.fetchDetails) {
|
|
@@ -530,9 +530,11 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
530
530
|
this.log.error(err_4);
|
|
531
531
|
this.handleError(err_4);
|
|
532
532
|
}
|
|
533
|
-
this.store.loading = false;
|
|
534
533
|
}
|
|
535
534
|
return [3 /*break*/, 18];
|
|
535
|
+
case 17:
|
|
536
|
+
this.store.loading = false;
|
|
537
|
+
return [7 /*endfinally*/];
|
|
536
538
|
case 18: return [2 /*return*/];
|
|
537
539
|
}
|
|
538
540
|
});
|
|
@@ -540,22 +542,18 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
540
542
|
if (!config.tag) {
|
|
541
543
|
throw new Error("Invalid config passed to RecommendationController. The \"tag\" attribute is required.");
|
|
542
544
|
}
|
|
545
|
+
// attach to bfCache restore event and re-run search on the controller
|
|
546
|
+
// enabled by default
|
|
547
|
+
if (((_b = config.settings) === null || _b === void 0 ? void 0 : _b.searchOnPageShow) !== false) {
|
|
548
|
+
window.addEventListener('pageshow', function (e) {
|
|
549
|
+
if (e.persisted && !_this.store.error && _this.store.loaded && !_this.store.loading) {
|
|
550
|
+
_this.search();
|
|
551
|
+
}
|
|
552
|
+
});
|
|
553
|
+
}
|
|
543
554
|
// deep merge config with defaults
|
|
544
555
|
_this.config = (0, deepmerge_1.default)(defaultConfig, _this.config);
|
|
545
556
|
_this.store.setConfig(_this.config);
|
|
546
|
-
// add 'beforeSearch' middleware
|
|
547
|
-
_this.eventManager.on('beforeSearch', function (recommend, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
548
|
-
return __generator(this, function (_a) {
|
|
549
|
-
switch (_a.label) {
|
|
550
|
-
case 0:
|
|
551
|
-
recommend.controller.store.loading = true;
|
|
552
|
-
return [4 /*yield*/, next()];
|
|
553
|
-
case 1:
|
|
554
|
-
_a.sent();
|
|
555
|
-
return [2 /*return*/];
|
|
556
|
-
}
|
|
557
|
-
});
|
|
558
|
-
}); });
|
|
559
557
|
// add 'afterStore' middleware
|
|
560
558
|
_this.eventManager.on('afterStore', function (recommend, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
561
559
|
var _this = this;
|
|
@@ -578,7 +576,6 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
578
576
|
_this.track.product.removedFromBundle(item);
|
|
579
577
|
});
|
|
580
578
|
});
|
|
581
|
-
recommend.controller.store.loading = false;
|
|
582
579
|
return [2 /*return*/];
|
|
583
580
|
}
|
|
584
581
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAa,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACX,sBAAsB,
|
|
1
|
+
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAa,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACX,sBAAsB,EAGtB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,EAKlB,MAAM,2BAA2B,CAAC;AAmBnC,KAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KAC/D,CAAC;CACF,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;IACvC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,eAAe,CAAwC;gBAG9D,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IAuJ3B,KAAK,EAAE,kBAAkB,CA+CvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAiD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAmN9B;CACF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAiBxF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,GAAG,SAAS,CAgCvG"}
|
|
@@ -148,38 +148,37 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
148
148
|
},
|
|
149
149
|
};
|
|
150
150
|
_this.search = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
151
|
-
var
|
|
151
|
+
var params_1, err_1, stringyParams, prevStringyParams, searchProfile, meta, response, preventBackfill, dontBackfill, backfillRequests, backfillResponses, backfillResults, afterSearchProfile, err_2, afterStoreProfile, err_3, err_4;
|
|
152
152
|
var _a, _b;
|
|
153
153
|
var _this = this;
|
|
154
154
|
var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
155
155
|
return __generator(this, function (_p) {
|
|
156
156
|
switch (_p.label) {
|
|
157
157
|
case 0:
|
|
158
|
+
_p.trys.push([0, 22, 23, 24]);
|
|
158
159
|
if (!!this.initialized) return [3 /*break*/, 2];
|
|
159
160
|
return [4 /*yield*/, this.init()];
|
|
160
161
|
case 1:
|
|
161
162
|
_p.sent();
|
|
162
163
|
_p.label = 2;
|
|
163
164
|
case 2:
|
|
164
|
-
|
|
165
|
+
params_1 = this.params;
|
|
165
166
|
if (((_d = (_c = this.params.search) === null || _c === void 0 ? void 0 : _c.query) === null || _d === void 0 ? void 0 : _d.string) && ((_f = (_e = this.params.search) === null || _e === void 0 ? void 0 : _e.query) === null || _f === void 0 ? void 0 : _f.string.length)) {
|
|
166
167
|
// save it to the history store
|
|
167
168
|
this.store.history.save(this.params.search.query.string);
|
|
168
169
|
}
|
|
170
|
+
this.store.loading = true;
|
|
169
171
|
_p.label = 3;
|
|
170
172
|
case 3:
|
|
171
|
-
_p.trys.push([3,
|
|
172
|
-
_p.label = 4;
|
|
173
|
-
case 4:
|
|
174
|
-
_p.trys.push([4, 6, , 7]);
|
|
173
|
+
_p.trys.push([3, 5, , 6]);
|
|
175
174
|
return [4 /*yield*/, this.eventManager.fire('beforeSearch', {
|
|
176
175
|
controller: this,
|
|
177
|
-
request:
|
|
176
|
+
request: params_1,
|
|
178
177
|
})];
|
|
179
|
-
case
|
|
178
|
+
case 4:
|
|
180
179
|
_p.sent();
|
|
181
|
-
return [3 /*break*/,
|
|
182
|
-
case
|
|
180
|
+
return [3 /*break*/, 6];
|
|
181
|
+
case 5:
|
|
183
182
|
err_1 = _p.sent();
|
|
184
183
|
if ((err_1 === null || err_1 === void 0 ? void 0 : err_1.message) == 'cancelled') {
|
|
185
184
|
this.log.warn("'beforeSearch' middleware cancelled");
|
|
@@ -189,19 +188,19 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
189
188
|
this.log.error("error in 'beforeSearch' middleware");
|
|
190
189
|
throw err_1;
|
|
191
190
|
}
|
|
192
|
-
return [3 /*break*/,
|
|
193
|
-
case
|
|
194
|
-
stringyParams = JSON.stringify(
|
|
191
|
+
return [3 /*break*/, 6];
|
|
192
|
+
case 6:
|
|
193
|
+
stringyParams = JSON.stringify(params_1);
|
|
195
194
|
prevStringyParams = this.storage.get('lastStringyParams');
|
|
196
195
|
if (stringyParams == prevStringyParams) {
|
|
197
196
|
// no param change - not searching
|
|
198
197
|
return [2 /*return*/];
|
|
199
198
|
}
|
|
200
|
-
searchProfile = this.profiler.create({ type: 'event', name: 'search', context:
|
|
199
|
+
searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params_1 }).start();
|
|
201
200
|
meta = {};
|
|
202
201
|
response = {};
|
|
203
|
-
if (!(((_g = this.config.settings) === null || _g === void 0 ? void 0 : _g.infinite) && ((_h =
|
|
204
|
-
preventBackfill = ((_j = this.config.settings.infinite) === null || _j === void 0 ? void 0 : _j.backfill) && !this.store.results.length &&
|
|
202
|
+
if (!(((_g = this.config.settings) === null || _g === void 0 ? void 0 : _g.infinite) && ((_h = params_1.pagination) === null || _h === void 0 ? void 0 : _h.page) && params_1.pagination.page > 1)) return [3 /*break*/, 11];
|
|
203
|
+
preventBackfill = ((_j = this.config.settings.infinite) === null || _j === void 0 ? void 0 : _j.backfill) && !this.store.results.length && params_1.pagination.page > this.config.settings.infinite.backfill;
|
|
205
204
|
dontBackfill = !((_k = this.config.settings.infinite) === null || _k === void 0 ? void 0 : _k.backfill) && !this.store.results.length;
|
|
206
205
|
// if the page is higher than the backfill setting redirect back to page 1
|
|
207
206
|
if (preventBackfill || dontBackfill) {
|
|
@@ -209,12 +208,12 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
209
208
|
this.urlManager.set('page', 1).go();
|
|
210
209
|
return [2 /*return*/];
|
|
211
210
|
}
|
|
212
|
-
if (!(((_l = this.config.settings) === null || _l === void 0 ? void 0 : _l.infinite.backfill) && !this.previousResults.length)) return [3 /*break*/,
|
|
213
|
-
backfillRequests = Array(
|
|
211
|
+
if (!(((_l = this.config.settings) === null || _l === void 0 ? void 0 : _l.infinite.backfill) && !this.previousResults.length)) return [3 /*break*/, 8];
|
|
212
|
+
backfillRequests = Array(params_1.pagination.page)
|
|
214
213
|
.fill('backfill')
|
|
215
214
|
.map(function (v, i) {
|
|
216
215
|
var _a, _b, _c, _d;
|
|
217
|
-
var backfillParams = (0, deepmerge_1.default)(__assign({},
|
|
216
|
+
var backfillParams = (0, deepmerge_1.default)(__assign({}, params_1), { pagination: { page: i + 1 }, search: { redirectResponse: 'full' } });
|
|
218
217
|
// don't include page parameter if on page 1
|
|
219
218
|
if (i + 1 == 1) {
|
|
220
219
|
(_a = backfillParams === null || backfillParams === void 0 ? void 0 : backfillParams.pagination) === null || _a === void 0 ? true : delete _a.page;
|
|
@@ -227,7 +226,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
227
226
|
return _this.client.search(backfillParams);
|
|
228
227
|
});
|
|
229
228
|
return [4 /*yield*/, Promise.all(backfillRequests)];
|
|
230
|
-
case
|
|
229
|
+
case 7:
|
|
231
230
|
backfillResponses = _p.sent();
|
|
232
231
|
// backfillResponses are [meta, searchResponse][]
|
|
233
232
|
// set the meta and response to the first page of backfillResponses
|
|
@@ -239,43 +238,43 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
239
238
|
}, []);
|
|
240
239
|
// overwrite pagination params to expected state
|
|
241
240
|
response.pagination.totalPages = Math.ceil(response.pagination.totalResults / response.pagination.pageSize);
|
|
242
|
-
response.pagination.page = (_m =
|
|
241
|
+
response.pagination.page = (_m = params_1.pagination) === null || _m === void 0 ? void 0 : _m.page;
|
|
243
242
|
// set the response results with results from backfill responses
|
|
244
243
|
response.results = backfillResults;
|
|
245
|
-
return [3 /*break*/,
|
|
246
|
-
case
|
|
247
|
-
case
|
|
244
|
+
return [3 /*break*/, 10];
|
|
245
|
+
case 8: return [4 /*yield*/, this.client.search(params_1)];
|
|
246
|
+
case 9:
|
|
248
247
|
// infinite with no backfills.
|
|
249
248
|
_a = _p.sent(), meta = _a[0], response = _a[1];
|
|
250
249
|
// append new results to previous results
|
|
251
250
|
response.results = __spreadArray(__spreadArray([], this.previousResults, true), (response.results || []), true);
|
|
252
|
-
_p.label =
|
|
253
|
-
case
|
|
254
|
-
case
|
|
255
|
-
case
|
|
251
|
+
_p.label = 10;
|
|
252
|
+
case 10: return [3 /*break*/, 13];
|
|
253
|
+
case 11: return [4 /*yield*/, this.client.search(params_1)];
|
|
254
|
+
case 12:
|
|
256
255
|
// standard request (not using infinite scroll)
|
|
257
256
|
_b = _p.sent(), meta = _b[0], response = _b[1];
|
|
258
|
-
_p.label =
|
|
259
|
-
case
|
|
257
|
+
_p.label = 13;
|
|
258
|
+
case 13:
|
|
260
259
|
// MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
|
|
261
260
|
if (!response.meta) {
|
|
262
261
|
response.meta = meta;
|
|
263
262
|
}
|
|
264
263
|
searchProfile.stop();
|
|
265
264
|
this.log.profile(searchProfile);
|
|
266
|
-
afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context:
|
|
267
|
-
_p.label =
|
|
268
|
-
case
|
|
269
|
-
_p.trys.push([
|
|
265
|
+
afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params_1 }).start();
|
|
266
|
+
_p.label = 14;
|
|
267
|
+
case 14:
|
|
268
|
+
_p.trys.push([14, 16, , 17]);
|
|
270
269
|
return [4 /*yield*/, this.eventManager.fire('afterSearch', {
|
|
271
270
|
controller: this,
|
|
272
|
-
request:
|
|
271
|
+
request: params_1,
|
|
273
272
|
response: response,
|
|
274
273
|
})];
|
|
275
|
-
case
|
|
274
|
+
case 15:
|
|
276
275
|
_p.sent();
|
|
277
|
-
return [3 /*break*/,
|
|
278
|
-
case
|
|
276
|
+
return [3 /*break*/, 17];
|
|
277
|
+
case 16:
|
|
279
278
|
err_2 = _p.sent();
|
|
280
279
|
if ((err_2 === null || err_2 === void 0 ? void 0 : err_2.message) == 'cancelled') {
|
|
281
280
|
this.log.warn("'afterSearch' middleware cancelled");
|
|
@@ -286,8 +285,8 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
286
285
|
this.log.error("error in 'afterSearch' middleware");
|
|
287
286
|
throw err_2;
|
|
288
287
|
}
|
|
289
|
-
return [3 /*break*/,
|
|
290
|
-
case
|
|
288
|
+
return [3 /*break*/, 17];
|
|
289
|
+
case 17:
|
|
291
290
|
afterSearchProfile.stop();
|
|
292
291
|
this.log.profile(afterSearchProfile);
|
|
293
292
|
// store previous results for infinite usage
|
|
@@ -296,19 +295,19 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
296
295
|
}
|
|
297
296
|
// update the store
|
|
298
297
|
this.store.update(response);
|
|
299
|
-
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context:
|
|
300
|
-
_p.label =
|
|
301
|
-
case
|
|
302
|
-
_p.trys.push([
|
|
298
|
+
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params_1 }).start();
|
|
299
|
+
_p.label = 18;
|
|
300
|
+
case 18:
|
|
301
|
+
_p.trys.push([18, 20, , 21]);
|
|
303
302
|
return [4 /*yield*/, this.eventManager.fire('afterStore', {
|
|
304
303
|
controller: this,
|
|
305
|
-
request:
|
|
304
|
+
request: params_1,
|
|
306
305
|
response: response,
|
|
307
306
|
})];
|
|
308
|
-
case
|
|
307
|
+
case 19:
|
|
309
308
|
_p.sent();
|
|
310
|
-
return [3 /*break*/,
|
|
311
|
-
case
|
|
309
|
+
return [3 /*break*/, 21];
|
|
310
|
+
case 20:
|
|
312
311
|
err_3 = _p.sent();
|
|
313
312
|
if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
|
|
314
313
|
this.log.warn("'afterStore' middleware cancelled");
|
|
@@ -319,12 +318,12 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
319
318
|
this.log.error("error in 'afterStore' middleware");
|
|
320
319
|
throw err_3;
|
|
321
320
|
}
|
|
322
|
-
return [3 /*break*/,
|
|
323
|
-
case
|
|
321
|
+
return [3 /*break*/, 21];
|
|
322
|
+
case 21:
|
|
324
323
|
afterStoreProfile.stop();
|
|
325
324
|
this.log.profile(afterStoreProfile);
|
|
326
325
|
return [3 /*break*/, 24];
|
|
327
|
-
case
|
|
326
|
+
case 22:
|
|
328
327
|
err_4 = _p.sent();
|
|
329
328
|
if (err_4) {
|
|
330
329
|
if (err_4.err && err_4.fetchDetails) {
|
|
@@ -364,9 +363,11 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
364
363
|
this.log.error(err_4);
|
|
365
364
|
this.handleError(err_4);
|
|
366
365
|
}
|
|
367
|
-
this.store.loading = false;
|
|
368
366
|
}
|
|
369
367
|
return [3 /*break*/, 24];
|
|
368
|
+
case 23:
|
|
369
|
+
this.store.loading = false;
|
|
370
|
+
return [7 /*endfinally*/];
|
|
370
371
|
case 24: return [2 /*return*/];
|
|
371
372
|
}
|
|
372
373
|
});
|
|
@@ -384,19 +385,6 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
384
385
|
});
|
|
385
386
|
// set last params to undefined for compare in search
|
|
386
387
|
_this.storage.set('lastStringyParams', undefined);
|
|
387
|
-
// add 'beforeSearch' middleware
|
|
388
|
-
_this.eventManager.on('beforeSearch', function (search, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
389
|
-
return __generator(this, function (_a) {
|
|
390
|
-
switch (_a.label) {
|
|
391
|
-
case 0:
|
|
392
|
-
search.controller.store.loading = true;
|
|
393
|
-
return [4 /*yield*/, next()];
|
|
394
|
-
case 1:
|
|
395
|
-
_a.sent();
|
|
396
|
-
return [2 /*return*/];
|
|
397
|
-
}
|
|
398
|
-
});
|
|
399
|
-
}); });
|
|
400
388
|
// add 'afterSearch' middleware
|
|
401
389
|
_this.eventManager.on('afterSearch', function (search, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
402
390
|
var config, redirectURL, searchStore, nonBackgroundFilters;
|
|
@@ -447,7 +435,6 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
447
435
|
return [4 /*yield*/, this.eventManager.fire('restorePosition', { controller: this, element: elementPosition })];
|
|
448
436
|
case 2:
|
|
449
437
|
_a.sent();
|
|
450
|
-
search.controller.store.loading = false;
|
|
451
438
|
return [2 /*return*/];
|
|
452
439
|
}
|
|
453
440
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAa,MAAM,+BAA+B,CAAC;AACxE,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,
|
|
1
|
+
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAa,MAAM,+BAA+B,CAAC;AACxE,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,EAAiC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAElI,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAG1E,eAAO,MAAM,WAAW,MAAM,CAAC;AA+B/B,KAAK,wBAAwB,GAAG;IAC/B,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;KAC5C,CAAC;CACF,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,kBAAkB;IACtD,IAAI,kBAAgC;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,YAAY,CAAC;gBAG5B,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;IAwD3B,KAAK,EAAE,wBAAwB,CAO7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CA0CrC;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;wBAkDpD,aAAa,KAAG,IAAI;uBAMrB,UAAU,KAAG,IAAI;4BAQN,MAAM,SAAS,CAAC,gBAAgB,CAAC,KAAG,QAAQ,IAAI,CAAC;mCAgDhD,MAAM,WAAW,CAAC,gBAAgB,CAAC,KAAG,IAAI;uBAqBtD,KAAK;;;;uBAyDL,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,CA0I9B;CACF"}
|
|
@@ -27,6 +27,10 @@ const defaultConfig = {
|
|
|
27
27
|
merchandising: true,
|
|
28
28
|
singleResult: false,
|
|
29
29
|
},
|
|
30
|
+
bind: {
|
|
31
|
+
input: true,
|
|
32
|
+
submit: true,
|
|
33
|
+
},
|
|
30
34
|
},
|
|
31
35
|
};
|
|
32
36
|
export class AutocompleteController extends AbstractController {
|
|
@@ -176,6 +180,8 @@ export class AutocompleteController extends AbstractController {
|
|
|
176
180
|
return;
|
|
177
181
|
}
|
|
178
182
|
this.store.state.input = value;
|
|
183
|
+
// remove merch redirect to prevent race condition
|
|
184
|
+
this.store.merchandising.redirect = '';
|
|
179
185
|
if (this.config?.settings?.syncInputs) {
|
|
180
186
|
const inputs = document.querySelectorAll(this.config.selector);
|
|
181
187
|
inputs.forEach((input) => {
|
|
@@ -247,16 +253,20 @@ export class AutocompleteController extends AbstractController {
|
|
|
247
253
|
this.store.updateTrendingTerms(terms);
|
|
248
254
|
};
|
|
249
255
|
this.search = async () => {
|
|
250
|
-
// if urlManager has no query, there will be no need to get params and no query
|
|
251
|
-
if (!this.urlManager.state.query) {
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
const params = this.params;
|
|
255
|
-
// if params have no query do not search
|
|
256
|
-
if (!params?.search?.query?.string) {
|
|
257
|
-
return;
|
|
258
|
-
}
|
|
259
256
|
try {
|
|
257
|
+
if (!this.initialized) {
|
|
258
|
+
await this.init();
|
|
259
|
+
}
|
|
260
|
+
// if urlManager has no query, there will be no need to get params and no query
|
|
261
|
+
if (!this.urlManager.state.query) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
const params = this.params;
|
|
265
|
+
// if params have no query do not search
|
|
266
|
+
if (!params?.search?.query?.string) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
this.store.loading = true;
|
|
260
270
|
try {
|
|
261
271
|
await this.eventManager.fire('beforeSearch', {
|
|
262
272
|
controller: this,
|
|
@@ -366,9 +376,11 @@ export class AutocompleteController extends AbstractController {
|
|
|
366
376
|
this.log.error(err);
|
|
367
377
|
this.handleError(err);
|
|
368
378
|
}
|
|
369
|
-
this.store.loading = false;
|
|
370
379
|
}
|
|
371
380
|
}
|
|
381
|
+
finally {
|
|
382
|
+
this.store.loading = false;
|
|
383
|
+
}
|
|
372
384
|
};
|
|
373
385
|
// deep merge config with defaults
|
|
374
386
|
this.config = deepmerge(defaultConfig, this.config);
|
|
@@ -385,25 +397,14 @@ export class AutocompleteController extends AbstractController {
|
|
|
385
397
|
type: 'session',
|
|
386
398
|
key: `ss-controller-${this.config.id}`,
|
|
387
399
|
});
|
|
388
|
-
// add 'beforeSearch' middleware
|
|
389
|
-
this.eventManager.on('beforeSearch', async (ac, next) => {
|
|
390
|
-
ac.controller.store.loading = true;
|
|
391
|
-
await next();
|
|
392
|
-
});
|
|
393
400
|
// add 'afterSearch' middleware
|
|
394
401
|
this.eventManager.on('afterSearch', async (ac, next) => {
|
|
395
402
|
await next();
|
|
396
403
|
// cancel search if no input or query doesn't match current urlState
|
|
397
404
|
if (ac.response.autocomplete.query != ac.controller.urlManager.state.query) {
|
|
398
|
-
ac.controller.store.loading = false;
|
|
399
405
|
return false;
|
|
400
406
|
}
|
|
401
407
|
});
|
|
402
|
-
// add 'afterStore' middleware
|
|
403
|
-
this.eventManager.on('afterStore', async (ac, next) => {
|
|
404
|
-
await next();
|
|
405
|
-
ac.controller.store.loading = false;
|
|
406
|
-
});
|
|
407
408
|
this.eventManager.on('beforeSubmit', async (ac, next) => {
|
|
408
409
|
await next();
|
|
409
410
|
const redirectURL = ac.controller.store.merchandising?.redirect;
|
|
@@ -521,7 +522,7 @@ export class AutocompleteController extends AbstractController {
|
|
|
521
522
|
input.setAttribute('autocorrect', 'off');
|
|
522
523
|
input.setAttribute('autocapitalize', 'none');
|
|
523
524
|
input.setAttribute(INPUT_ATTRIBUTE, '');
|
|
524
|
-
input.addEventListener('input', this.handlers.input.input);
|
|
525
|
+
this.config.settings?.bind?.input && input.addEventListener('input', this.handlers.input.input);
|
|
525
526
|
if (this.config?.settings?.initializeFromUrl && !input.value && this.store.state.input) {
|
|
526
527
|
input.value = this.store.state.input;
|
|
527
528
|
}
|
|
@@ -530,11 +531,11 @@ export class AutocompleteController extends AbstractController {
|
|
|
530
531
|
const form = input.form;
|
|
531
532
|
let formActionUrl;
|
|
532
533
|
if (this.config.action) {
|
|
533
|
-
input.addEventListener('keydown', this.handlers.input.enterKey);
|
|
534
|
+
this.config.settings?.bind?.submit && input.addEventListener('keydown', this.handlers.input.enterKey);
|
|
534
535
|
formActionUrl = this.config.action;
|
|
535
536
|
}
|
|
536
537
|
else if (form) {
|
|
537
|
-
form.addEventListener('submit', this.handlers.input.formSubmit);
|
|
538
|
+
this.config.settings?.bind?.submit && form.addEventListener('submit', this.handlers.input.formSubmit);
|
|
538
539
|
formActionUrl = form.action || '';
|
|
539
540
|
// serializeForm will include additional form element in our urlManager as globals
|
|
540
541
|
if (this.config.settings?.serializeForm) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FinderController.d.ts","sourceRoot":"","sources":["../../../src/Finder/FinderController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"FinderController.d.ts","sourceRoot":"","sources":["../../../src/Finder/FinderController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,sBAAsB,EAAkB,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiB7G,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;gBAGtC,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA+B3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+BhC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAkB5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAoI9B;CACF"}
|
|
@@ -46,14 +46,15 @@ export class FinderController extends AbstractController {
|
|
|
46
46
|
this.store.setService('urlManager', this.urlManager);
|
|
47
47
|
};
|
|
48
48
|
this.search = async () => {
|
|
49
|
-
if (!this.initialized) {
|
|
50
|
-
await this.init();
|
|
51
|
-
}
|
|
52
|
-
if (this.store.state.persisted) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
const params = this.params;
|
|
56
49
|
try {
|
|
50
|
+
if (!this.initialized) {
|
|
51
|
+
await this.init();
|
|
52
|
+
}
|
|
53
|
+
if (this.store.state.persisted) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const params = this.params;
|
|
57
|
+
this.store.loading = true;
|
|
57
58
|
try {
|
|
58
59
|
await this.eventManager.fire('beforeSearch', {
|
|
59
60
|
controller: this,
|
|
@@ -164,9 +165,11 @@ export class FinderController extends AbstractController {
|
|
|
164
165
|
this.log.error(err);
|
|
165
166
|
this.handleError(err);
|
|
166
167
|
}
|
|
167
|
-
this.store.loading = false;
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
|
+
finally {
|
|
171
|
+
this.store.loading = false;
|
|
172
|
+
}
|
|
170
173
|
};
|
|
171
174
|
// deep merge config with defaults
|
|
172
175
|
this.config = deepmerge(defaultConfig, this.config);
|
|
@@ -180,11 +183,7 @@ export class FinderController extends AbstractController {
|
|
|
180
183
|
};
|
|
181
184
|
});
|
|
182
185
|
}
|
|
183
|
-
this
|
|
184
|
-
finder.controller.store.loading = true;
|
|
185
|
-
await next();
|
|
186
|
-
});
|
|
187
|
-
// TODO: move this to afterStore
|
|
186
|
+
// TODO: remove this aftersearch when store interface changes
|
|
188
187
|
this.eventManager.on('afterSearch', async (finder, next) => {
|
|
189
188
|
await next();
|
|
190
189
|
finder.controller.store.loading = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,8BAA8B,
|
|
1
|
+
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,8BAA8B,EAAiB,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEpH,KAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACnE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACrD,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACzD,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QAChE,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;KAC5D,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;IAC1E,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;CACzD,CAAC;AAUF,qBAAa,wBAAyB,SAAQ,kBAAkB;IACxD,IAAI,kBAAkC;IACrC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,8BAA8B,CAAC;IAE/C,MAAM,EAAE;QACP,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,UAAU,CAAC,EAAE,WAAW,CAAC;QACzB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,UAAU,CAAC,EAAE,WAAW,CAAC;YAAC,MAAM,CAAC,EAAE,WAAW,CAAA;SAAE,CAAC,CAAC;KAC7E,CAKC;gBAGD,MAAM,EAAE,8BAA8B,EACtC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA4C3B,KAAK,EAAE,0BAA0B,CAwS5B;IAEL,IAAI,MAAM,IAAI,qBAAqB,CA2BlC;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CA0H9B;CACF"}
|
|
@@ -311,11 +311,12 @@ export class RecommendationController extends AbstractController {
|
|
|
311
311
|
};
|
|
312
312
|
})();
|
|
313
313
|
this.search = async () => {
|
|
314
|
-
if (!this.initialized) {
|
|
315
|
-
await this.init();
|
|
316
|
-
}
|
|
317
|
-
const params = this.params;
|
|
318
314
|
try {
|
|
315
|
+
if (!this.initialized) {
|
|
316
|
+
await this.init();
|
|
317
|
+
}
|
|
318
|
+
const params = this.params;
|
|
319
|
+
this.store.loading = true;
|
|
319
320
|
try {
|
|
320
321
|
await this.eventManager.fire('beforeSearch', {
|
|
321
322
|
controller: this,
|
|
@@ -420,21 +421,27 @@ export class RecommendationController extends AbstractController {
|
|
|
420
421
|
this.log.error(err);
|
|
421
422
|
this.handleError(err);
|
|
422
423
|
}
|
|
423
|
-
this.store.loading = false;
|
|
424
424
|
}
|
|
425
425
|
}
|
|
426
|
+
finally {
|
|
427
|
+
this.store.loading = false;
|
|
428
|
+
}
|
|
426
429
|
};
|
|
427
430
|
if (!config.tag) {
|
|
428
431
|
throw new Error(`Invalid config passed to RecommendationController. The "tag" attribute is required.`);
|
|
429
432
|
}
|
|
433
|
+
// attach to bfCache restore event and re-run search on the controller
|
|
434
|
+
// enabled by default
|
|
435
|
+
if (config.settings?.searchOnPageShow !== false) {
|
|
436
|
+
window.addEventListener('pageshow', (e) => {
|
|
437
|
+
if (e.persisted && !this.store.error && this.store.loaded && !this.store.loading) {
|
|
438
|
+
this.search();
|
|
439
|
+
}
|
|
440
|
+
});
|
|
441
|
+
}
|
|
430
442
|
// deep merge config with defaults
|
|
431
443
|
this.config = deepmerge(defaultConfig, this.config);
|
|
432
444
|
this.store.setConfig(this.config);
|
|
433
|
-
// add 'beforeSearch' middleware
|
|
434
|
-
this.eventManager.on('beforeSearch', async (recommend, next) => {
|
|
435
|
-
recommend.controller.store.loading = true;
|
|
436
|
-
await next();
|
|
437
|
-
});
|
|
438
445
|
// add 'afterStore' middleware
|
|
439
446
|
this.eventManager.on('afterStore', async (recommend, next) => {
|
|
440
447
|
await next();
|
|
@@ -449,7 +456,6 @@ export class RecommendationController extends AbstractController {
|
|
|
449
456
|
this.track.product.removedFromBundle(item);
|
|
450
457
|
});
|
|
451
458
|
});
|
|
452
|
-
recommend.controller.store.loading = false;
|
|
453
459
|
});
|
|
454
460
|
// attach config plugins and event middleware
|
|
455
461
|
this.use(this.config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAa,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACX,sBAAsB,
|
|
1
|
+
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAa,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACX,sBAAsB,EAGtB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,EAKlB,MAAM,2BAA2B,CAAC;AAmBnC,KAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KAC/D,CAAC;CACF,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;IACvC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,eAAe,CAAwC;gBAG9D,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IAuJ3B,KAAK,EAAE,kBAAkB,CA+CvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAiD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAmN9B;CACF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAiBxF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,GAAG,SAAS,CAgCvG"}
|
|
@@ -67,15 +67,16 @@ export class SearchController extends AbstractController {
|
|
|
67
67
|
},
|
|
68
68
|
};
|
|
69
69
|
this.search = async () => {
|
|
70
|
-
if (!this.initialized) {
|
|
71
|
-
await this.init();
|
|
72
|
-
}
|
|
73
|
-
const params = this.params;
|
|
74
|
-
if (this.params.search?.query?.string && this.params.search?.query?.string.length) {
|
|
75
|
-
// save it to the history store
|
|
76
|
-
this.store.history.save(this.params.search.query.string);
|
|
77
|
-
}
|
|
78
70
|
try {
|
|
71
|
+
if (!this.initialized) {
|
|
72
|
+
await this.init();
|
|
73
|
+
}
|
|
74
|
+
const params = this.params;
|
|
75
|
+
if (this.params.search?.query?.string && this.params.search?.query?.string.length) {
|
|
76
|
+
// save it to the history store
|
|
77
|
+
this.store.history.save(this.params.search.query.string);
|
|
78
|
+
}
|
|
79
|
+
this.store.loading = true;
|
|
79
80
|
try {
|
|
80
81
|
await this.eventManager.fire('beforeSearch', {
|
|
81
82
|
controller: this,
|
|
@@ -250,9 +251,11 @@ export class SearchController extends AbstractController {
|
|
|
250
251
|
this.log.error(err);
|
|
251
252
|
this.handleError(err);
|
|
252
253
|
}
|
|
253
|
-
this.store.loading = false;
|
|
254
254
|
}
|
|
255
255
|
}
|
|
256
|
+
finally {
|
|
257
|
+
this.store.loading = false;
|
|
258
|
+
}
|
|
256
259
|
};
|
|
257
260
|
// deep merge config with defaults
|
|
258
261
|
this.config = deepmerge(defaultConfig, this.config);
|
|
@@ -267,11 +270,6 @@ export class SearchController extends AbstractController {
|
|
|
267
270
|
});
|
|
268
271
|
// set last params to undefined for compare in search
|
|
269
272
|
this.storage.set('lastStringyParams', undefined);
|
|
270
|
-
// add 'beforeSearch' middleware
|
|
271
|
-
this.eventManager.on('beforeSearch', async (search, next) => {
|
|
272
|
-
search.controller.store.loading = true;
|
|
273
|
-
await next();
|
|
274
|
-
});
|
|
275
273
|
// add 'afterSearch' middleware
|
|
276
274
|
this.eventManager.on('afterSearch', async (search, next) => {
|
|
277
275
|
const config = search.controller.config;
|
|
@@ -306,7 +304,6 @@ export class SearchController extends AbstractController {
|
|
|
306
304
|
this.storage.set('scrollMap', {});
|
|
307
305
|
}
|
|
308
306
|
await this.eventManager.fire('restorePosition', { controller: this, element: elementPosition });
|
|
309
|
-
search.controller.store.loading = false;
|
|
310
307
|
});
|
|
311
308
|
// restore position
|
|
312
309
|
if (this.config.settings?.restorePosition?.enabled) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@searchspring/snap-controller",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.62.0",
|
|
4
4
|
"description": "Snap Controllers",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -20,22 +20,22 @@
|
|
|
20
20
|
"test:watch": "jest --watch"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@searchspring/snap-toolbox": "^0.
|
|
23
|
+
"@searchspring/snap-toolbox": "^0.62.0",
|
|
24
24
|
"css.escape": "1.5.1",
|
|
25
25
|
"deepmerge": "4.3.1"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@searchspring/snap-client": "^0.
|
|
29
|
-
"@searchspring/snap-event-manager": "^0.
|
|
30
|
-
"@searchspring/snap-logger": "^0.
|
|
31
|
-
"@searchspring/snap-profiler": "^0.
|
|
32
|
-
"@searchspring/snap-store-mobx": "^0.
|
|
33
|
-
"@searchspring/snap-tracker": "^0.
|
|
34
|
-
"@searchspring/snap-url-manager": "^0.
|
|
28
|
+
"@searchspring/snap-client": "^0.62.0",
|
|
29
|
+
"@searchspring/snap-event-manager": "^0.62.0",
|
|
30
|
+
"@searchspring/snap-logger": "^0.62.0",
|
|
31
|
+
"@searchspring/snap-profiler": "^0.62.0",
|
|
32
|
+
"@searchspring/snap-store-mobx": "^0.62.0",
|
|
33
|
+
"@searchspring/snap-tracker": "^0.62.0",
|
|
34
|
+
"@searchspring/snap-url-manager": "^0.62.0"
|
|
35
35
|
},
|
|
36
36
|
"sideEffects": false,
|
|
37
37
|
"files": [
|
|
38
38
|
"dist/**/*"
|
|
39
39
|
],
|
|
40
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "2c9561e8b0097a44c5587bc5629068b06041385f"
|
|
41
41
|
}
|