@searchspring/snap-controller 0.61.5 → 0.63.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.
@@ -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,EAAkD,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEnJ,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAG1E,eAAO,MAAM,WAAW,MAAM,CAAC;AA2B/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;IAuE3B,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;;;;uBAsDL,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,CAmI9B;CACF"}
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
- _d.label = 1;
388
- case 1:
389
- _d.trys.push([1, 15, , 16]);
390
- _d.label = 2;
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*/, 5];
411
- case 5:
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 6:
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 = 7;
425
- case 7:
426
- _d.trys.push([7, 9, , 10]);
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*/, 10];
447
- case 10:
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 = 11;
454
- case 11:
455
- _d.trys.push([11, 13, , 14]);
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*/, 14];
476
- case 14:
486
+ return [3 /*break*/, 15];
487
+ case 15:
477
488
  afterStoreProfile.stop();
478
489
  this.log.profile(afterStoreProfile);
479
- return [3 /*break*/, 16];
480
- case 15:
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*/, 16];
523
- case 16: return [2 /*return*/];
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 (((_b = (_a = _this.config) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b.initializeFromUrl) && !input.value && _this.store.state.input) {
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 ((_c = _this.config.settings) === null || _c === void 0 ? void 0 : _c.serializeForm) {
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,EAAmC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiB9H,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;IAqC3B,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,CAkI9B;CACF"}
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, 17, , 18]);
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 5:
155
+ case 4:
157
156
  _b.sent();
158
- return [3 /*break*/, 7];
159
- case 6:
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*/, 7];
170
- case 7:
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 8:
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 = 9;
184
- case 9:
185
- _b.trys.push([9, 11, , 12]);
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 10:
190
+ case 9:
192
191
  _b.sent();
193
- return [3 /*break*/, 12];
194
- case 11:
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*/, 12];
206
- case 12:
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 = 13;
214
- case 13:
215
- _b.trys.push([13, 15, , 16]);
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 14:
220
+ case 13:
222
221
  _b.sent();
223
- return [3 /*break*/, 16];
224
- case 15:
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*/, 16];
236
- case 16:
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 17:
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
- _this.eventManager.on('beforeSearch', function (finder, next) { return __awaiter(_this, void 0, void 0, function () {
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,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,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;IA2C3B,KAAK,EAAE,0BAA0B,CAwS5B;IAEL,IAAI,MAAM,IAAI,qBAAqB,CA2BlC;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAuH9B;CACF"}
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, 17, , 18]);
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 5:
415
+ case 4:
416
416
  _a.sent();
417
- return [3 /*break*/, 7];
418
- case 6:
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*/, 7];
429
- case 7:
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 8:
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 = 9;
438
- case 9:
439
- _a.trys.push([9, 11, , 12]);
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 10:
445
+ case 9:
446
446
  _a.sent();
447
- return [3 /*break*/, 12];
448
- case 11:
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*/, 12];
460
- case 12:
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 = 13;
467
- case 13:
468
- _a.trys.push([13, 15, , 16]);
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 14:
474
+ case 13:
475
475
  _a.sent();
476
- return [3 /*break*/, 16];
477
- case 15:
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*/, 16];
489
- case 16:
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 17:
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
  });
@@ -15,7 +15,6 @@ export declare class SearchController extends AbstractController {
15
15
  store: SearchStore;
16
16
  config: SearchControllerConfig;
17
17
  storage: StorageStore;
18
- private previousResults;
19
18
  constructor(config: SearchControllerConfig, { client, store, urlManager, eventManager, profiler, logger, tracker }: ControllerServices, context?: ContextVariables);
20
19
  track: SearchTrackMethods;
21
20
  get params(): SearchRequestModel;
@@ -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,EAItB,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;IAgK3B,KAAK,EAAE,kBAAkB,CA+CvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAiD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAkN9B;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"}
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;gBAGrB,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;IAsJ3B,KAAK,EAAE,kBAAkB,CA+CvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAiD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CA2M9B;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"}