@searchspring/snap-controller 0.41.2 → 0.42.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":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAErF,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,EAAE,sBAAsB,EAAkD,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE7I,OAAO,KAAK,EAAE,kBAAkB,EAA2E,MAAM,2BAA2B,CAAC;AAsB7I,aAAK,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;IA6F3B,KAAK,EAAE,kBAAkB,CA+BvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAgD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAmO9B;CACF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAiBxF"}
1
+ {"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAErF,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,EAAE,kBAAkB,EAA2E,MAAM,2BAA2B,CAAC;AAsB7I,aAAK,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;IAqI3B,KAAK,EAAE,kBAAkB,CAoCvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAgD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAmO9B;CACF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAiBxF"}
@@ -103,7 +103,7 @@ var SearchController = /** @class */ (function (_super) {
103
103
  function SearchController(config, _a, context) {
104
104
  var client = _a.client, store = _a.store, urlManager = _a.urlManager, eventManager = _a.eventManager, profiler = _a.profiler, logger = _a.logger, tracker = _a.tracker;
105
105
  var _this = this;
106
- var _b;
106
+ var _b, _c, _d;
107
107
  _this = _super.call(this, config, { client: client, store: store, urlManager: urlManager, eventManager: eventManager, profiler: profiler, logger: logger, tracker: tracker }, context) || this;
108
108
  _this.type = types_1.ControllerTypes.search;
109
109
  _this.previousResults = [];
@@ -111,20 +111,23 @@ var SearchController = /** @class */ (function (_super) {
111
111
  product: {
112
112
  click: function (e, result) {
113
113
  var _a, _b;
114
- // store scroll position
115
- if ((_a = _this.config.settings) === null || _a === void 0 ? void 0 : _a.infinite) {
116
- var stringyParams = _this.storage.get('lastStringyParams');
117
- stringyParams = JSON.parse(stringyParams);
114
+ var target = e.target;
115
+ var href = (target === null || target === void 0 ? void 0 : target.getAttribute('href')) || ((_a = result.mappings.core) === null || _a === void 0 ? void 0 : _a.url);
116
+ var scrollMap = {};
117
+ // generate the selector using element class and parent classes
118
+ var selector = generateHrefSelector(target, href);
119
+ var domRect = selector ? (_b = document === null || document === void 0 ? void 0 : document.querySelector(selector)) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect() : undefined;
120
+ // store element position data to scrollMap
121
+ if (selector && href && domRect) {
122
+ var stringyParams = JSON.parse(_this.storage.get('lastStringyParams'));
118
123
  var storableRequestParams = getStorableRequestParams(stringyParams);
119
- stringyParams = JSON.stringify(storableRequestParams);
120
- var scrollMap = {};
121
- scrollMap[stringyParams] = window.scrollY;
122
- _this.storage.set('scrollMap', scrollMap);
124
+ var storableStringyParams = JSON.stringify(storableRequestParams);
125
+ scrollMap[storableStringyParams] = { domRect: domRect, href: href, selector: selector };
123
126
  }
127
+ // store position data or empty object
128
+ _this.storage.set('scrollMap', scrollMap);
124
129
  // track
125
130
  var _c = result.attributes, intellisuggestData = _c.intellisuggestData, intellisuggestSignature = _c.intellisuggestSignature;
126
- var target = e.target;
127
- var href = (target === null || target === void 0 ? void 0 : target.href) || ((_b = result.mappings.core) === null || _b === void 0 ? void 0 : _b.url) || undefined;
128
131
  var event = _this.tracker.track.product.click({
129
132
  intellisuggestData: intellisuggestData,
130
133
  intellisuggestSignature: intellisuggestSignature,
@@ -378,8 +381,9 @@ var SearchController = /** @class */ (function (_super) {
378
381
  }); };
379
382
  // deep merge config with defaults
380
383
  _this.config = (0, deepmerge_1.default)(defaultConfig, _this.config);
381
- if (((_b = _this.config.settings) === null || _b === void 0 ? void 0 : _b.infinite) && typeof _this.config.settings.infinite.restorePosition == 'undefined') {
382
- _this.config.settings.infinite.restorePosition = true;
384
+ // set restorePosition to be enabled by default when using infinite (if not provided)
385
+ if (((_b = _this.config.settings) === null || _b === void 0 ? void 0 : _b.infinite) && typeof _this.config.settings.restorePosition == 'undefined') {
386
+ _this.config.settings.restorePosition = { enabled: true };
383
387
  }
384
388
  _this.store.setConfig(_this.config);
385
389
  _this.storage = new snap_store_mobx_1.StorageStore({
@@ -432,41 +436,105 @@ var SearchController = /** @class */ (function (_super) {
432
436
  });
433
437
  }); });
434
438
  _this.eventManager.on('afterStore', function (search, next) { return __awaiter(_this, void 0, void 0, function () {
435
- var storableRequestParams, stringyParams, scrollMap_1, scrollToPosition_1, checkCount_1, heightCheck_1;
436
- var _this = this;
437
- var _a, _b;
438
- return __generator(this, function (_c) {
439
- switch (_c.label) {
439
+ var storableRequestParams, stringyParams, scrollMap, elementPosition;
440
+ return __generator(this, function (_a) {
441
+ switch (_a.label) {
440
442
  case 0: return [4 /*yield*/, next()];
441
443
  case 1:
442
- _c.sent();
443
- search.controller.store.loading = false;
444
+ _a.sent();
444
445
  // save last params
445
446
  this.storage.set('lastStringyParams', JSON.stringify(search.request));
446
447
  storableRequestParams = getStorableRequestParams(search.request);
447
448
  stringyParams = JSON.stringify(storableRequestParams);
448
- if ((_b = (_a = this.config.settings) === null || _a === void 0 ? void 0 : _a.infinite) === null || _b === void 0 ? void 0 : _b.restorePosition) {
449
- scrollMap_1 = this.storage.get('scrollMap') || {};
450
- scrollToPosition_1 = scrollMap_1[stringyParams];
451
- if (scrollToPosition_1) {
452
- checkCount_1 = 0;
453
- heightCheck_1 = window.setInterval(function () {
454
- if (document.documentElement.scrollHeight >= scrollToPosition_1) {
455
- window.scrollTo(0, scrollToPosition_1);
456
- _this.log.debug('scrolling to: ', scrollMap_1[stringyParams]);
457
- window.clearInterval(heightCheck_1);
458
- }
459
- if (checkCount_1 > 2000 / HEIGHT_CHECK_INTERVAL) {
460
- window.clearInterval(heightCheck_1);
461
- }
462
- checkCount_1++;
463
- }, HEIGHT_CHECK_INTERVAL);
464
- }
449
+ scrollMap = this.storage.get('scrollMap') || {};
450
+ elementPosition = scrollMap[stringyParams];
451
+ if (!elementPosition) {
452
+ // search params have changed - empty the scrollMap
453
+ this.storage.set('scrollMap', {});
465
454
  }
455
+ return [4 /*yield*/, this.eventManager.fire('restorePosition', { controller: this, element: elementPosition })];
456
+ case 2:
457
+ _a.sent();
458
+ search.controller.store.loading = false;
466
459
  return [2 /*return*/];
467
460
  }
468
461
  });
469
462
  }); });
463
+ // restore position
464
+ if ((_d = (_c = _this.config.settings) === null || _c === void 0 ? void 0 : _c.restorePosition) === null || _d === void 0 ? void 0 : _d.enabled) {
465
+ _this.eventManager.on('restorePosition', function (_a, next) {
466
+ var controller = _a.controller, element = _a.element;
467
+ return __awaiter(_this, void 0, void 0, function () {
468
+ var scrollToPosition;
469
+ var _this = this;
470
+ return __generator(this, function (_b) {
471
+ switch (_b.label) {
472
+ case 0:
473
+ scrollToPosition = function () {
474
+ return new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () {
475
+ var offset, maxCheckTime, checkTime, maxScrolls, maxCheckCount, scrollBackCount, scrolledElem, checkAndScroll;
476
+ var _a;
477
+ return __generator(this, function (_b) {
478
+ switch (_b.label) {
479
+ case 0:
480
+ offset = ((_a = element === null || element === void 0 ? void 0 : element.domRect) === null || _a === void 0 ? void 0 : _a.top) || 0;
481
+ maxCheckTime = 500;
482
+ checkTime = 50;
483
+ maxScrolls = Math.ceil(maxCheckTime / checkTime);
484
+ maxCheckCount = maxScrolls + 1;
485
+ scrollBackCount = 0;
486
+ scrolledElem = undefined;
487
+ checkAndScroll = function () {
488
+ var elem = document.querySelector(element === null || element === void 0 ? void 0 : element.selector);
489
+ if (elem)
490
+ scrollBackCount++;
491
+ if (elem && scrollBackCount < maxCheckCount) {
492
+ var y = elem.getBoundingClientRect().y;
493
+ if (y > offset + 1 || y < offset - 1) {
494
+ elem.scrollIntoView();
495
+ // after scrolling into view, use top value with offset (for when element at bottom)
496
+ var top_1 = elem.getBoundingClientRect().top;
497
+ window.scrollBy(0, -(offset - top_1));
498
+ scrolledElem = elem;
499
+ return true;
500
+ }
501
+ }
502
+ return false;
503
+ };
504
+ _b.label = 1;
505
+ case 1:
506
+ if (!(checkAndScroll() || scrollBackCount <= maxScrolls)) return [3 /*break*/, 3];
507
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, checkTime); })];
508
+ case 2:
509
+ _b.sent();
510
+ return [3 /*break*/, 1];
511
+ case 3:
512
+ if (scrolledElem) {
513
+ controller.log.debug('restored position to: ', scrolledElem);
514
+ }
515
+ else {
516
+ controller.log.debug('could not locate element with selector: ', element === null || element === void 0 ? void 0 : element.selector);
517
+ }
518
+ resolve();
519
+ return [2 /*return*/];
520
+ }
521
+ });
522
+ }); });
523
+ };
524
+ if (!element) return [3 /*break*/, 2];
525
+ return [4 /*yield*/, scrollToPosition()];
526
+ case 1:
527
+ _b.sent();
528
+ _b.label = 2;
529
+ case 2: return [4 /*yield*/, next()];
530
+ case 3:
531
+ _b.sent();
532
+ return [2 /*return*/];
533
+ }
534
+ });
535
+ });
536
+ });
537
+ }
470
538
  // attach config plugins and event middleware
471
539
  _this.use(_this.config);
472
540
  return _this;
@@ -539,6 +607,21 @@ function getStorableRequestParams(request) {
539
607
  };
540
608
  }
541
609
  exports.getStorableRequestParams = getStorableRequestParams;
610
+ function generateHrefSelector(element, href, levels) {
611
+ if (levels === void 0) { levels = 7; }
612
+ var level = 0;
613
+ var elem = element;
614
+ while (elem && level < levels) {
615
+ // check within
616
+ var innerElemHref = elem.querySelector("[href*=\"".concat(href, "\"]"));
617
+ if (innerElemHref) {
618
+ return "".concat(elem.tagName, ".").concat(elem.classList.value.replace(/\s/g, '.'), " [href*=\"").concat(href, "\"]");
619
+ }
620
+ elem = elem.parentElement;
621
+ level++;
622
+ }
623
+ return;
624
+ }
542
625
  function backFillSize(pages, pageSize) {
543
626
  var totalResults = pages * pageSize;
544
627
  var numPages = Math.ceil(totalResults / API_LIMIT);
@@ -1,4 +1,4 @@
1
- import type { AbstractController } from './Abstract/AbstractController';
1
+ import type { AbstractController, AutocompleteController, SearchController, FinderController, RecommendationController } from './index';
2
2
  import type { EventManager, Middleware } from '@searchspring/snap-event-manager';
3
3
  import type { Client } from '@searchspring/snap-client';
4
4
  import type { SearchStore, AutocompleteStore, FinderStore, RecommendationStore, StoreConfig, SearchStoreConfig, FinderStoreConfig, AutocompleteStoreConfig, RecommendationStoreConfig } from '@searchspring/snap-store-mobx';
@@ -23,12 +23,22 @@ export declare type AfterStoreObj = {
23
23
  request: any;
24
24
  response: any;
25
25
  };
26
+ export declare type RestorePositionObj = {
27
+ controller: AbstractController;
28
+ element?: ElementPositionObj;
29
+ };
30
+ export declare type ElementPositionObj = {
31
+ href: string;
32
+ selector: string;
33
+ domRect: DOMRect;
34
+ };
26
35
  export declare enum ControllerTypes {
27
36
  search = "search",
28
37
  autocomplete = "autocomplete",
29
38
  finder = "finder",
30
39
  recommendation = "recommendation"
31
40
  }
41
+ export declare type Controllers = SearchController | AutocompleteController | FinderController | RecommendationController;
32
42
  export declare type ControllerServices = {
33
43
  client: Client;
34
44
  store: SearchStore | AutocompleteStore | FinderStore | RecommendationStore;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAErF,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,EAAE,sBAAsB,EAAkD,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE7I,OAAO,KAAK,EAAE,kBAAkB,EAA2E,MAAM,2BAA2B,CAAC;AAsB7I,aAAK,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;IA6F3B,KAAK,EAAE,kBAAkB,CA+BvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAgD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAmO9B;CACF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAiBxF"}
1
+ {"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAErF,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,EAAE,kBAAkB,EAA2E,MAAM,2BAA2B,CAAC;AAsB7I,aAAK,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;IAqI3B,KAAK,EAAE,kBAAkB,CAoCvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAgD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAmO9B;CACF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAiBxF"}
@@ -29,20 +29,23 @@ export class SearchController extends AbstractController {
29
29
  this.track = {
30
30
  product: {
31
31
  click: (e, result) => {
32
- // store scroll position
33
- if (this.config.settings?.infinite) {
34
- let stringyParams = this.storage.get('lastStringyParams');
35
- stringyParams = JSON.parse(stringyParams);
32
+ const target = e.target;
33
+ const href = target?.getAttribute('href') || result.mappings.core?.url;
34
+ const scrollMap = {};
35
+ // generate the selector using element class and parent classes
36
+ const selector = generateHrefSelector(target, href);
37
+ const domRect = selector ? document?.querySelector(selector)?.getBoundingClientRect() : undefined;
38
+ // store element position data to scrollMap
39
+ if (selector && href && domRect) {
40
+ const stringyParams = JSON.parse(this.storage.get('lastStringyParams'));
36
41
  const storableRequestParams = getStorableRequestParams(stringyParams);
37
- stringyParams = JSON.stringify(storableRequestParams);
38
- const scrollMap = {};
39
- scrollMap[stringyParams] = window.scrollY;
40
- this.storage.set('scrollMap', scrollMap);
42
+ const storableStringyParams = JSON.stringify(storableRequestParams);
43
+ scrollMap[storableStringyParams] = { domRect, href, selector };
41
44
  }
45
+ // store position data or empty object
46
+ this.storage.set('scrollMap', scrollMap);
42
47
  // track
43
48
  const { intellisuggestData, intellisuggestSignature } = result.attributes;
44
- const target = e.target;
45
- const href = target?.href || result.mappings.core?.url || undefined;
46
49
  const event = this.tracker.track.product.click({
47
50
  intellisuggestData,
48
51
  intellisuggestSignature,
@@ -262,8 +265,9 @@ export class SearchController extends AbstractController {
262
265
  };
263
266
  // deep merge config with defaults
264
267
  this.config = deepmerge(defaultConfig, this.config);
265
- if (this.config.settings?.infinite && typeof this.config.settings.infinite.restorePosition == 'undefined') {
266
- this.config.settings.infinite.restorePosition = true;
268
+ // set restorePosition to be enabled by default when using infinite (if not provided)
269
+ if (this.config.settings?.infinite && typeof this.config.settings.restorePosition == 'undefined') {
270
+ this.config.settings.restorePosition = { enabled: true };
267
271
  }
268
272
  this.store.setConfig(this.config);
269
273
  this.storage = new StorageStore({
@@ -299,32 +303,66 @@ export class SearchController extends AbstractController {
299
303
  });
300
304
  this.eventManager.on('afterStore', async (search, next) => {
301
305
  await next();
302
- search.controller.store.loading = false;
303
306
  // save last params
304
307
  this.storage.set('lastStringyParams', JSON.stringify(search.request));
308
+ // get scrollTo positioning and send it to 'restorePosition' event
305
309
  const storableRequestParams = getStorableRequestParams(search.request);
306
310
  const stringyParams = JSON.stringify(storableRequestParams);
307
- if (this.config.settings?.infinite?.restorePosition) {
308
- // restore the scroll position saved previously
309
- const scrollMap = this.storage.get('scrollMap') || {};
310
- // interval we ony need to keep checking until the page height > than our stored value
311
- const scrollToPosition = scrollMap[stringyParams];
312
- if (scrollToPosition) {
313
- let checkCount = 0;
314
- const heightCheck = window.setInterval(() => {
315
- if (document.documentElement.scrollHeight >= scrollToPosition) {
316
- window.scrollTo(0, scrollToPosition);
317
- this.log.debug('scrolling to: ', scrollMap[stringyParams]);
318
- window.clearInterval(heightCheck);
319
- }
320
- if (checkCount > 2000 / HEIGHT_CHECK_INTERVAL) {
321
- window.clearInterval(heightCheck);
322
- }
323
- checkCount++;
324
- }, HEIGHT_CHECK_INTERVAL);
325
- }
311
+ const scrollMap = this.storage.get('scrollMap') || {};
312
+ const elementPosition = scrollMap[stringyParams];
313
+ if (!elementPosition) {
314
+ // search params have changed - empty the scrollMap
315
+ this.storage.set('scrollMap', {});
326
316
  }
317
+ await this.eventManager.fire('restorePosition', { controller: this, element: elementPosition });
318
+ search.controller.store.loading = false;
327
319
  });
320
+ // restore position
321
+ if (this.config.settings?.restorePosition?.enabled) {
322
+ this.eventManager.on('restorePosition', async ({ controller, element }, next) => {
323
+ const scrollToPosition = () => {
324
+ return new Promise(async (resolve) => {
325
+ const offset = element?.domRect?.top || 0;
326
+ const maxCheckTime = 500;
327
+ const checkTime = 50;
328
+ const maxScrolls = Math.ceil(maxCheckTime / checkTime);
329
+ const maxCheckCount = maxScrolls + 1;
330
+ let scrollBackCount = 0;
331
+ let scrolledElem = undefined;
332
+ const checkAndScroll = () => {
333
+ const elem = document.querySelector(element?.selector);
334
+ if (elem)
335
+ scrollBackCount++;
336
+ if (elem && scrollBackCount < maxCheckCount) {
337
+ const { y } = elem.getBoundingClientRect();
338
+ if (y > offset + 1 || y < offset - 1) {
339
+ elem.scrollIntoView();
340
+ // after scrolling into view, use top value with offset (for when element at bottom)
341
+ const { top } = elem.getBoundingClientRect();
342
+ window.scrollBy(0, -(offset - top));
343
+ scrolledElem = elem;
344
+ return true;
345
+ }
346
+ }
347
+ return false;
348
+ };
349
+ while (checkAndScroll() || scrollBackCount <= maxScrolls) {
350
+ await new Promise((resolve) => setTimeout(resolve, checkTime));
351
+ }
352
+ if (scrolledElem) {
353
+ controller.log.debug('restored position to: ', scrolledElem);
354
+ }
355
+ else {
356
+ controller.log.debug('could not locate element with selector: ', element?.selector);
357
+ }
358
+ resolve();
359
+ });
360
+ };
361
+ if (element)
362
+ await scrollToPosition();
363
+ await next();
364
+ });
365
+ }
328
366
  // attach config plugins and event middleware
329
367
  this.use(this.config);
330
368
  }
@@ -387,6 +425,20 @@ export function getStorableRequestParams(request) {
387
425
  },
388
426
  };
389
427
  }
428
+ function generateHrefSelector(element, href, levels = 7) {
429
+ let level = 0;
430
+ let elem = element;
431
+ while (elem && level < levels) {
432
+ // check within
433
+ const innerElemHref = elem.querySelector(`[href*="${href}"]`);
434
+ if (innerElemHref) {
435
+ return `${elem.tagName}.${elem.classList.value.replace(/\s/g, '.')} [href*="${href}"]`;
436
+ }
437
+ elem = elem.parentElement;
438
+ level++;
439
+ }
440
+ return;
441
+ }
390
442
  function backFillSize(pages, pageSize) {
391
443
  const totalResults = pages * pageSize;
392
444
  let numPages = Math.ceil(totalResults / API_LIMIT);
@@ -1,4 +1,4 @@
1
- import type { AbstractController } from './Abstract/AbstractController';
1
+ import type { AbstractController, AutocompleteController, SearchController, FinderController, RecommendationController } from './index';
2
2
  import type { EventManager, Middleware } from '@searchspring/snap-event-manager';
3
3
  import type { Client } from '@searchspring/snap-client';
4
4
  import type { SearchStore, AutocompleteStore, FinderStore, RecommendationStore, StoreConfig, SearchStoreConfig, FinderStoreConfig, AutocompleteStoreConfig, RecommendationStoreConfig } from '@searchspring/snap-store-mobx';
@@ -23,12 +23,22 @@ export declare type AfterStoreObj = {
23
23
  request: any;
24
24
  response: any;
25
25
  };
26
+ export declare type RestorePositionObj = {
27
+ controller: AbstractController;
28
+ element?: ElementPositionObj;
29
+ };
30
+ export declare type ElementPositionObj = {
31
+ href: string;
32
+ selector: string;
33
+ domRect: DOMRect;
34
+ };
26
35
  export declare enum ControllerTypes {
27
36
  search = "search",
28
37
  autocomplete = "autocomplete",
29
38
  finder = "finder",
30
39
  recommendation = "recommendation"
31
40
  }
41
+ export declare type Controllers = SearchController | AutocompleteController | FinderController | RecommendationController;
32
42
  export declare type ControllerServices = {
33
43
  client: Client;
34
44
  store: SearchStore | AutocompleteStore | FinderStore | RecommendationStore;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@searchspring/snap-controller",
3
- "version": "0.41.2",
3
+ "version": "0.42.0",
4
4
  "description": "Snap Controllers",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -20,21 +20,21 @@
20
20
  "test:watch": "jest --watch"
21
21
  },
22
22
  "dependencies": {
23
- "@searchspring/snap-toolbox": "^0.41.2",
23
+ "@searchspring/snap-toolbox": "^0.42.0",
24
24
  "deepmerge": "4.2.2"
25
25
  },
26
26
  "devDependencies": {
27
- "@searchspring/snap-client": "^0.41.2",
28
- "@searchspring/snap-event-manager": "^0.41.2",
29
- "@searchspring/snap-logger": "^0.41.2",
30
- "@searchspring/snap-profiler": "^0.41.2",
31
- "@searchspring/snap-store-mobx": "^0.41.2",
32
- "@searchspring/snap-tracker": "^0.41.2",
33
- "@searchspring/snap-url-manager": "^0.41.2"
27
+ "@searchspring/snap-client": "^0.42.0",
28
+ "@searchspring/snap-event-manager": "^0.42.0",
29
+ "@searchspring/snap-logger": "^0.42.0",
30
+ "@searchspring/snap-profiler": "^0.42.0",
31
+ "@searchspring/snap-store-mobx": "^0.42.0",
32
+ "@searchspring/snap-tracker": "^0.42.0",
33
+ "@searchspring/snap-url-manager": "^0.42.0"
34
34
  },
35
35
  "sideEffects": false,
36
36
  "files": [
37
37
  "dist/**/*"
38
38
  ],
39
- "gitHead": "1a66d26b086734f724109f3d5c1f4977dfc16627"
39
+ "gitHead": "383a7dae4f04af4b60cc9d9c8aae8932c9df4685"
40
40
  }