@searchspring/snap-controller 0.43.1 → 0.44.1

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.
Files changed (29) hide show
  1. package/dist/cjs/Abstract/AbstractController.d.ts +3 -1
  2. package/dist/cjs/Abstract/AbstractController.d.ts.map +1 -1
  3. package/dist/cjs/Abstract/AbstractController.js +12 -4
  4. package/dist/cjs/Autocomplete/AutocompleteController.d.ts.map +1 -1
  5. package/dist/cjs/Autocomplete/AutocompleteController.js +44 -34
  6. package/dist/cjs/Finder/FinderController.d.ts.map +1 -1
  7. package/dist/cjs/Finder/FinderController.js +36 -21
  8. package/dist/cjs/Recommendation/RecommendationController.d.ts.map +1 -1
  9. package/dist/cjs/Recommendation/RecommendationController.js +36 -21
  10. package/dist/cjs/Search/SearchController.d.ts +1 -0
  11. package/dist/cjs/Search/SearchController.d.ts.map +1 -1
  12. package/dist/cjs/Search/SearchController.js +81 -39
  13. package/dist/cjs/types.d.ts +3 -3
  14. package/dist/cjs/types.d.ts.map +1 -1
  15. package/dist/esm/Abstract/AbstractController.d.ts +3 -1
  16. package/dist/esm/Abstract/AbstractController.d.ts.map +1 -1
  17. package/dist/esm/Abstract/AbstractController.js +12 -4
  18. package/dist/esm/Autocomplete/AutocompleteController.d.ts.map +1 -1
  19. package/dist/esm/Autocomplete/AutocompleteController.js +44 -34
  20. package/dist/esm/Finder/FinderController.d.ts.map +1 -1
  21. package/dist/esm/Finder/FinderController.js +36 -21
  22. package/dist/esm/Recommendation/RecommendationController.d.ts.map +1 -1
  23. package/dist/esm/Recommendation/RecommendationController.js +36 -21
  24. package/dist/esm/Search/SearchController.d.ts +1 -0
  25. package/dist/esm/Search/SearchController.d.ts.map +1 -1
  26. package/dist/esm/Search/SearchController.js +79 -38
  27. package/dist/esm/types.d.ts +3 -3
  28. package/dist/esm/types.d.ts.map +1 -1
  29. package/package.json +11 -10
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractController.d.ts","sourceRoot":"","sources":["../../../src/Abstract/AbstractController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEpH,8BAAsB,kBAAkB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,SAAc;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,gBAAgB,CAAC;IAE1B,SAAS,EAAE;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;KAC3B,CAAM;IAEP,SAAS,CAAC,YAAY,UAAS;IAE/B,IAAI,WAAW,IAAI,OAAO,CAEzB;IAEM,WAAW,QAAS,OAAO,KAAG,IAAI,CA4CvC;gBAGD,MAAM,EAAE,gBAAgB,EACxB,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,GAAE,gBAAqB;IA2DxB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS;IAIhG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS;IASnD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgD3B,QAAQ,IAAI,IAAI;aAMP,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAE1B,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAIpD,GAAG,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;CAoC1C"}
1
+ {"version":3,"file":"AbstractController.d.ts","sourceRoot":"","sources":["../../../src/Abstract/AbstractController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEpH,8BAAsB,kBAAkB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,SAAc;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,gBAAgB,CAAC;IAE1B,SAAS,EAAE;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;KAC3B,CAAM;IAEP,SAAS,CAAC,YAAY,UAAS;IAE/B,IAAI,WAAW,IAAI,OAAO,CAEzB;IAEM,WAAW,QAAS,OAAO;;sBAAyC,IAAI,CAoD7E;gBAGD,MAAM,EAAE,gBAAgB,EACxB,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,GAAE,gBAAqB;IA2DxB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS;IAIhG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS;IASnD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgD3B,QAAQ,IAAI,IAAI;aAMP,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAE1B,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAIpD,GAAG,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;CAoC1C"}
@@ -4,7 +4,7 @@ export class AbstractController {
4
4
  this.type = 'abstract';
5
5
  this.targeters = {};
6
6
  this._initialized = false;
7
- this.handleError = (err) => {
7
+ this.handleError = (err, details) => {
8
8
  let event;
9
9
  if (err instanceof ErrorEvent) {
10
10
  event = err;
@@ -12,11 +12,12 @@ export class AbstractController {
12
12
  else if (err instanceof Error) {
13
13
  event = new ErrorEvent('error', {
14
14
  error: err,
15
+ message: err.message,
15
16
  });
16
17
  }
17
- else if (typeof err === 'string') {
18
+ else if (typeof err === 'string' || typeof err == 'number') {
18
19
  event = new ErrorEvent('error', {
19
- error: new Error(err),
20
+ error: new Error(err.toString()),
20
21
  });
21
22
  }
22
23
  else if (typeof err === 'object' && Object.keys(err).length) {
@@ -30,12 +31,19 @@ export class AbstractController {
30
31
  if (event) {
31
32
  const { filename, colno, lineno, error: { stack }, message, timeStamp, } = event;
32
33
  const beaconPayload = {
33
- filename: filename || `${this.id} (${this.type.charAt(0).toUpperCase() + this.type.slice(1)}Controller)`,
34
+ filename,
34
35
  stack,
35
36
  message,
36
37
  colno,
37
38
  lineno,
38
39
  errortimestamp: timeStamp,
40
+ details,
41
+ context: {
42
+ controller: {
43
+ id: this.id,
44
+ type: this.type,
45
+ },
46
+ },
39
47
  };
40
48
  this.tracker.track.error(beaconPayload);
41
49
  this.eventManager.fire('error', { controller: this, error: err });
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AACrF,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;AA0B/B,aAAK,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;IA6D3B,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,aAAa,KAAG,IAAI;;;;uBA8DpB,UAAU,KAAG,IAAI;;MAS5B;IAEF,MAAM,IAAI,IAAI;IAgBR,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6E3B,cAAc,QAAa,QAAQ,IAAI,CAAC,CAwBtC;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAkH9B;CACF"}
1
+ {"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AACrF,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;AA0B/B,aAAK,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;IA6D3B,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,aAAa,KAAG,IAAI;;;;uBAwDpB,UAAU,KAAG,IAAI;;MAS5B;IAEF,MAAM,IAAI,IAAI;IAgBR,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6E3B,cAAc,QAAa,QAAQ,IAAI,CAAC,CAwBtC;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAmI9B;CACF"}
@@ -56,9 +56,9 @@ export class AutocompleteController extends AbstractController {
56
56
  await timeout(INPUT_DELAY);
57
57
  }
58
58
  if (this.config.settings.integratedSpellCorrection) {
59
- // if integratedSpellCorrection is set, set fallbackQuery to the first suggestion as long as its value differs
60
- if (input && this.store.terms.length && this.store.terms[0].value != input.value) {
61
- actionUrl = actionUrl?.set(PARAM_FALLBACK_QUERY, this.store.terms[0].value);
59
+ //set fallbackQuery to the correctedQuery
60
+ if (this.store.search.correctedQuery) {
61
+ actionUrl = actionUrl?.set(PARAM_FALLBACK_QUERY, this.store.search.correctedQuery.string);
62
62
  }
63
63
  }
64
64
  else if (this.store.search.originalQuery) {
@@ -114,9 +114,9 @@ export class AutocompleteController extends AbstractController {
114
114
  await timeout(INPUT_DELAY);
115
115
  }
116
116
  if (this.config.settings.integratedSpellCorrection) {
117
- // if integratedSpellCorrection is set, set fallbackQuery to the first suggestion as long as its value differs
118
- if (input && this.store.terms.length && this.store.terms[0].value != input.value) {
119
- addHiddenFormInput(form, PARAM_FALLBACK_QUERY, this.store.terms[0].value);
117
+ //set fallbackQuery to the correctedQuery
118
+ if (this.store.search.correctedQuery) {
119
+ addHiddenFormInput(form, PARAM_FALLBACK_QUERY, this.store.search.correctedQuery.string);
120
120
  }
121
121
  }
122
122
  else if (this.store.search.originalQuery) {
@@ -188,10 +188,10 @@ export class AutocompleteController extends AbstractController {
188
188
  clearTimeout(this.handlers.input.timeoutDelay);
189
189
  const trendingResultsEnabled = this.store.trending?.length && this.config.settings?.trending?.showResults;
190
190
  const historyResultsEnabled = this.store.history?.length && this.config.settings?.history?.showResults;
191
+ this.urlManager.reset().go();
191
192
  if (!value) {
192
- // there is no input value - reset state of store and UrlManager
193
+ // there is no input value - reset state of store
193
194
  this.store.reset();
194
- this.urlManager.reset().go();
195
195
  // show results for trending or history (if configured) - trending has priority
196
196
  if (trendingResultsEnabled) {
197
197
  this.store.trending[0].preview();
@@ -202,14 +202,9 @@ export class AutocompleteController extends AbstractController {
202
202
  }
203
203
  else {
204
204
  // new query in the input - trigger a new search via UrlManager
205
- this.store.resetTerms();
206
205
  this.handlers.input.timeoutDelay = setTimeout(() => {
207
206
  this.store.state.locks.terms.unlock();
208
207
  this.store.state.locks.facets.unlock();
209
- // must reset query to ensure funcitonality when trending/history term is equal to the typed term
210
- if (trendingResultsEnabled || historyResultsEnabled) {
211
- this.urlManager.set({ query: '' }).go();
212
- }
213
208
  this.urlManager.set({ query: this.store.state.input }).go();
214
209
  }, INPUT_DELAY);
215
210
  }
@@ -333,29 +328,44 @@ export class AutocompleteController extends AbstractController {
333
328
  }
334
329
  catch (err) {
335
330
  if (err) {
336
- switch (err) {
337
- case 429:
338
- this.store.error = {
339
- code: 429,
340
- type: ErrorType.WARNING,
341
- message: 'Too many requests try again later',
342
- };
343
- this.log.warn(this.store.error);
344
- break;
345
- case 500:
346
- this.store.error = {
347
- code: 500,
348
- type: ErrorType.ERROR,
349
- message: 'Invalid Search Request or Service Unavailable',
350
- };
351
- this.log.error(this.store.error);
352
- break;
353
- default:
354
- this.log.error(err);
355
- break;
331
+ if (err.err && err.fetchDetails) {
332
+ switch (err.fetchDetails.status) {
333
+ case 429: {
334
+ this.store.error = {
335
+ code: 429,
336
+ type: ErrorType.WARNING,
337
+ message: 'Too many requests try again later',
338
+ };
339
+ break;
340
+ }
341
+ case 500: {
342
+ this.store.error = {
343
+ code: 500,
344
+ type: ErrorType.ERROR,
345
+ message: 'Invalid Search Request or Service Unavailable',
346
+ };
347
+ break;
348
+ }
349
+ default: {
350
+ this.store.error = {
351
+ type: ErrorType.ERROR,
352
+ message: err.err.message,
353
+ };
354
+ break;
355
+ }
356
+ }
357
+ this.log.error(this.store.error);
358
+ this.handleError(err.err, err.fetchDetails);
359
+ }
360
+ else {
361
+ this.store.error = {
362
+ type: ErrorType.ERROR,
363
+ message: `Something went wrong... - ${err}`,
364
+ };
365
+ this.log.error(err);
366
+ this.handleError(err);
356
367
  }
357
368
  this.store.loading = false;
358
- this.handleError(err);
359
369
  }
360
370
  }
361
371
  };
@@ -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;IA2C3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+BhC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAe5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAiH9B;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,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;IA2C3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+BhC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAe5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAkI9B;CACF"}
@@ -125,29 +125,44 @@ export class FinderController extends AbstractController {
125
125
  }
126
126
  catch (err) {
127
127
  if (err) {
128
- switch (err) {
129
- case 429:
130
- this.store.error = {
131
- code: 429,
132
- type: ErrorType.WARNING,
133
- message: 'Too many requests try again later',
134
- };
135
- this.log.warn(this.store.error);
136
- break;
137
- case 500:
138
- this.store.error = {
139
- code: 500,
140
- type: ErrorType.ERROR,
141
- message: 'Invalid Search Request or Service Unavailable',
142
- };
143
- this.log.error(this.store.error);
144
- break;
145
- default:
146
- this.log.error(err);
147
- break;
128
+ if (err.err && err.fetchDetails) {
129
+ switch (err.fetchDetails.status) {
130
+ case 429: {
131
+ this.store.error = {
132
+ code: 429,
133
+ type: ErrorType.WARNING,
134
+ message: 'Too many requests try again later',
135
+ };
136
+ break;
137
+ }
138
+ case 500: {
139
+ this.store.error = {
140
+ code: 500,
141
+ type: ErrorType.ERROR,
142
+ message: 'Invalid Search Request or Service Unavailable',
143
+ };
144
+ break;
145
+ }
146
+ default: {
147
+ this.store.error = {
148
+ type: ErrorType.ERROR,
149
+ message: err.err.message,
150
+ };
151
+ break;
152
+ }
153
+ }
154
+ this.log.error(this.store.error);
155
+ this.handleError(err.err, err.fetchDetails);
156
+ }
157
+ else {
158
+ this.store.error = {
159
+ type: ErrorType.ERROR,
160
+ message: `Something went wrong... - ${err}`,
161
+ };
162
+ this.log.error(err);
163
+ this.handleError(err);
148
164
  }
149
165
  this.store.loading = false;
150
- this.handleError(err);
151
166
  }
152
167
  }
153
168
  };
@@ -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,8BAA8B,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,aAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QACjD,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KACrD,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF,aAAK,6BAA6B,GAAG;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,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;IA8B3B,KAAK,EAAE,0BAA0B,CAiM5B;IAEL,IAAI,MAAM,IAAI,6BAA6B,CA0B1C;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAsG9B;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,8BAA8B,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,aAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QACjD,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KACrD,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF,aAAK,6BAA6B,GAAG;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,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;IA8B3B,KAAK,EAAE,0BAA0B,CAiM5B;IAEL,IAAI,MAAM,IAAI,6BAA6B,CA0B1C;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAuH9B;CACF"}
@@ -284,29 +284,44 @@ export class RecommendationController extends AbstractController {
284
284
  }
285
285
  catch (err) {
286
286
  if (err) {
287
- switch (err) {
288
- case 429:
289
- this.store.error = {
290
- code: 429,
291
- type: ErrorType.WARNING,
292
- message: 'Too many requests try again later',
293
- };
294
- this.log.warn(this.store.error);
295
- break;
296
- case 500:
297
- this.store.error = {
298
- code: 500,
299
- type: ErrorType.ERROR,
300
- message: 'Invalid Search Request or Service Unavailable',
301
- };
302
- this.log.error(this.store.error);
303
- break;
304
- default:
305
- this.log.error(err);
306
- break;
287
+ if (err.err && err.fetchDetails) {
288
+ switch (err.fetchDetails.status) {
289
+ case 429: {
290
+ this.store.error = {
291
+ code: 429,
292
+ type: ErrorType.WARNING,
293
+ message: 'Too many requests try again later',
294
+ };
295
+ break;
296
+ }
297
+ case 500: {
298
+ this.store.error = {
299
+ code: 500,
300
+ type: ErrorType.ERROR,
301
+ message: 'Invalid Search Request or Service Unavailable',
302
+ };
303
+ break;
304
+ }
305
+ default: {
306
+ this.store.error = {
307
+ type: ErrorType.ERROR,
308
+ message: err.err.message,
309
+ };
310
+ break;
311
+ }
312
+ }
313
+ this.log.error(this.store.error);
314
+ this.handleError(err.err, err.fetchDetails);
315
+ }
316
+ else {
317
+ this.store.error = {
318
+ type: ErrorType.ERROR,
319
+ message: `Something went wrong... - ${err}`,
320
+ };
321
+ this.log.error(err);
322
+ this.handleError(err);
307
323
  }
308
324
  this.store.loading = false;
309
- this.handleError(err);
310
325
  }
311
326
  }
312
327
  };
@@ -22,5 +22,6 @@ export declare class SearchController extends AbstractController {
22
22
  search: () => Promise<void>;
23
23
  }
24
24
  export declare function getStorableRequestParams(request: SearchRequestModel): SearchRequestModel;
25
+ export declare function generateHrefSelector(element: HTMLElement, href: string, levels?: number): string | undefined;
25
26
  export {};
26
27
  //# sourceMappingURL=SearchController.d.ts.map
@@ -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,EACX,sBAAsB,EAItB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,kBAAkB,EAA2E,MAAM,2BAA2B,CAAC;AAqB7I,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,CAuN9B;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":"AAGA,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;AAqB7I,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;IA2I3B,KAAK,EAAE,kBAAkB,CA8CvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAgD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAwO9B;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,4 +1,5 @@
1
1
  import deepmerge from 'deepmerge';
2
+ import cssEscape from 'css.escape';
2
3
  import { AbstractController } from '../Abstract/AbstractController';
3
4
  import { StorageStore, StorageType, ErrorType } from '@searchspring/snap-store-mobx';
4
5
  import { getSearchParams } from '../utils/getParams';
@@ -29,17 +30,26 @@ export class SearchController extends AbstractController {
29
30
  product: {
30
31
  click: (e, result) => {
31
32
  const target = e.target;
32
- const href = target?.getAttribute('href') || result.mappings.core?.url;
33
+ const resultHref = result.mappings.core?.url;
34
+ const elemHref = target?.getAttribute('href');
35
+ // the href that should be used for restoration - if the elemHref contains the resultHref - use resultHref
36
+ const storedHref = elemHref?.indexOf(resultHref) != -1 ? resultHref : elemHref || resultHref;
33
37
  const scrollMap = {};
34
38
  // generate the selector using element class and parent classes
35
- const selector = generateHrefSelector(target, href);
39
+ const selector = generateHrefSelector(target, storedHref);
36
40
  const domRect = selector ? document?.querySelector(selector)?.getBoundingClientRect() : undefined;
37
41
  // store element position data to scrollMap
38
- if (selector && href && domRect) {
39
- const stringyParams = JSON.parse(this.storage.get('lastStringyParams'));
40
- const storableRequestParams = getStorableRequestParams(stringyParams);
41
- const storableStringyParams = JSON.stringify(storableRequestParams);
42
- scrollMap[storableStringyParams] = { domRect, href, selector };
42
+ if (selector || storedHref || domRect) {
43
+ try {
44
+ const stringyParams = JSON.parse(this.storage.get('lastStringyParams'));
45
+ const storableRequestParams = getStorableRequestParams(stringyParams);
46
+ const storableStringyParams = JSON.stringify(storableRequestParams);
47
+ scrollMap[storableStringyParams] = { domRect, href: storedHref, selector };
48
+ }
49
+ catch (err) {
50
+ // failed to get lastStringParams
51
+ this.log.warn('Failed to save scollMap!', err);
52
+ }
43
53
  }
44
54
  // store position data or empty object
45
55
  this.storage.set('scrollMap', scrollMap);
@@ -48,7 +58,7 @@ export class SearchController extends AbstractController {
48
58
  const event = this.tracker.track.product.click({
49
59
  intellisuggestData,
50
60
  intellisuggestSignature,
51
- href,
61
+ href: elemHref || resultHref,
52
62
  });
53
63
  this.eventManager.fire('track.product.click', { controller: this, event: e, result, trackEvent: event });
54
64
  return event;
@@ -224,29 +234,44 @@ export class SearchController extends AbstractController {
224
234
  }
225
235
  catch (err) {
226
236
  if (err) {
227
- switch (err) {
228
- case 429:
229
- this.store.error = {
230
- code: 429,
231
- type: ErrorType.WARNING,
232
- message: 'Too many requests try again later',
233
- };
234
- this.log.warn(this.store.error);
235
- break;
236
- case 500:
237
- this.store.error = {
238
- code: 500,
239
- type: ErrorType.ERROR,
240
- message: 'Invalid Search Request or Service Unavailable',
241
- };
242
- this.log.error(this.store.error);
243
- break;
244
- default:
245
- this.log.error(err);
246
- break;
237
+ if (err.err && err.fetchDetails) {
238
+ switch (err.fetchDetails.status) {
239
+ case 429: {
240
+ this.store.error = {
241
+ code: 429,
242
+ type: ErrorType.WARNING,
243
+ message: 'Too many requests try again later',
244
+ };
245
+ break;
246
+ }
247
+ case 500: {
248
+ this.store.error = {
249
+ code: 500,
250
+ type: ErrorType.ERROR,
251
+ message: 'Invalid Search Request or Service Unavailable',
252
+ };
253
+ break;
254
+ }
255
+ default: {
256
+ this.store.error = {
257
+ type: ErrorType.ERROR,
258
+ message: err.err.message,
259
+ };
260
+ break;
261
+ }
262
+ }
263
+ this.log.error(this.store.error);
264
+ this.handleError(err.err, err.fetchDetails);
265
+ }
266
+ else {
267
+ this.store.error = {
268
+ type: ErrorType.ERROR,
269
+ message: `Something went wrong... - ${err}`,
270
+ };
271
+ this.log.error(err);
272
+ this.handleError(err);
247
273
  }
248
274
  this.store.loading = false;
249
- this.handleError(err);
250
275
  }
251
276
  }
252
277
  };
@@ -313,15 +338,21 @@ export class SearchController extends AbstractController {
313
338
  const maxCheckTime = 500;
314
339
  const checkTime = 50;
315
340
  const maxScrolls = Math.ceil(maxCheckTime / checkTime);
316
- const maxCheckCount = maxScrolls + 1;
341
+ const maxCheckCount = maxScrolls + 2;
317
342
  let scrollBackCount = 0;
343
+ let checkCount = 0;
318
344
  let scrolledElem = undefined;
319
345
  const checkAndScroll = () => {
320
346
  const elem = document.querySelector(element?.selector);
321
- if (elem)
347
+ if (elem) {
322
348
  scrollBackCount++;
323
- if (elem && scrollBackCount < maxCheckCount) {
349
+ }
350
+ else {
351
+ checkCount++;
352
+ }
353
+ if (elem) {
324
354
  const { y } = elem.getBoundingClientRect();
355
+ // if the offset is off, we need to scroll into position (can be caused by lazy loaded images)
325
356
  if (y > offset + 1 || y < offset - 1) {
326
357
  elem.scrollIntoView();
327
358
  // after scrolling into view, use top value with offset (for when element at bottom)
@@ -333,7 +364,7 @@ export class SearchController extends AbstractController {
333
364
  }
334
365
  return false;
335
366
  };
336
- while (checkAndScroll() || scrollBackCount <= maxScrolls) {
367
+ while (checkAndScroll() || (scrollBackCount <= maxScrolls && checkCount <= maxCheckCount)) {
337
368
  await new Promise((resolve) => setTimeout(resolve, checkTime));
338
369
  }
339
370
  if (scrolledElem) {
@@ -412,14 +443,24 @@ export function getStorableRequestParams(request) {
412
443
  },
413
444
  };
414
445
  }
415
- function generateHrefSelector(element, href, levels = 7) {
446
+ export function generateHrefSelector(element, href, levels = 7) {
416
447
  let level = 0;
417
448
  let elem = element;
418
- while (elem && level < levels) {
449
+ while (elem && level <= levels) {
419
450
  // check within
420
- const innerElemHref = elem.querySelector(`[href*="${href}"]`);
421
- if (innerElemHref && elem.classList.value) {
422
- return `${elem.tagName}.${elem.classList.value.replace(/\s/g, '.')} [href*="${href}"]`;
451
+ const innerHrefElem = elem.querySelector(`[href*="${href}"]`);
452
+ if (innerHrefElem) {
453
+ // innerHrefElem was found! now get selectors up to elem that contained it
454
+ let selector = '';
455
+ let parentElem = innerHrefElem;
456
+ while (parentElem && parentElem != elem.parentElement) {
457
+ const classNames = parentElem.classList.value.trim().split(' ');
458
+ // document.querySelector does not appreciate special characters - must escape them
459
+ const escapedClassSelector = classNames.reduce((classes, classname) => (classname.trim() ? `${classes}.${cssEscape(classname.trim())}` : classes), '');
460
+ selector = `${parentElem.tagName}${escapedClassSelector}${selector ? ` ${selector}` : ''}`;
461
+ parentElem = parentElem.parentElement;
462
+ }
463
+ return `${selector}[href*="${href}"]`;
423
464
  }
424
465
  elem = elem.parentElement;
425
466
  level++;
@@ -28,9 +28,9 @@ export declare type RestorePositionObj = {
28
28
  element?: ElementPositionObj;
29
29
  };
30
30
  export declare type ElementPositionObj = {
31
- href: string;
32
- selector: string;
33
- domRect: DOMRect;
31
+ href?: string;
32
+ selector?: string;
33
+ domRect?: DOMRect;
34
34
  };
35
35
  export declare enum ControllerTypes {
36
36
  search = "search",
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AACxI,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAEjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EACX,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,oBAAY,cAAc,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAChG,oBAAY,cAAc,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAExE,oBAAY,eAAe,GAAG;IAC7B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,OAAO,EAAE,GAAG,CAAC;CACb,CAAC;AAEF,oBAAY,cAAc,GAAG;IAC5B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AAEF,oBAAY,aAAa,GAAG;IAC3B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,EAAE,GAAG,CAAC;CACd,CAAC;AAEF,oBAAY,kBAAkB,GAAG;IAChC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,oBAAY,kBAAkB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,oBAAY,eAAe;IAC1B,MAAM,WAAW;IACjB,YAAY,iBAAiB;IAC7B,MAAM,WAAW;IACjB,cAAc,mBAAmB;CACjC;AAED,oBAAY,WAAW,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,gBAAgB,GAAG,wBAAwB,CAAC;AAElH,oBAAY,kBAAkB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,GAAG,iBAAiB,GAAG,WAAW,GAAG,mBAAmB,CAAC;IAC3E,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,oBAAY,WAAW,GAAG;IACzB,UAAU,CAAC,EAAE;QACZ,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;KACzD,CAAC;IACF,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB,CAAC;AAEF,oBAAY,gBAAgB,GAAG;IAC9B,OAAO,CAAC,EAAE;QACT,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,gBAAgB,EAAE,CAAC;QAC1B,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;KACxB,CAAC;IACF,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;CACxB,CAAC;AAEF,oBAAY,gBAAgB,GAAG,WAAW,GAAG,WAAW,CAAC;AAGzD,oBAAY,sBAAsB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAE1E,oBAAY,sBAAsB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAE1E,oBAAY,4BAA4B,GAAG,gBAAgB,GAAG,uBAAuB,CAAC;AAEtF,oBAAY,8BAA8B,GAAG,gBAAgB,GAAG,yBAAyB,CAAC;AAE1F,oBAAY,iBAAiB,GAAG,sBAAsB,GAAG,4BAA4B,GAAG,sBAAsB,GAAG,8BAA8B,CAAC"}
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.43.1",
3
+ "version": "0.44.1",
4
4
  "description": "Snap Controllers",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -20,21 +20,22 @@
20
20
  "test:watch": "jest --watch"
21
21
  },
22
22
  "dependencies": {
23
- "@searchspring/snap-toolbox": "^0.43.1",
23
+ "@searchspring/snap-toolbox": "^0.44.1",
24
+ "css.escape": "1.5.1",
24
25
  "deepmerge": "4.3.1"
25
26
  },
26
27
  "devDependencies": {
27
- "@searchspring/snap-client": "^0.43.1",
28
- "@searchspring/snap-event-manager": "^0.43.1",
29
- "@searchspring/snap-logger": "^0.43.1",
30
- "@searchspring/snap-profiler": "^0.43.1",
31
- "@searchspring/snap-store-mobx": "^0.43.1",
32
- "@searchspring/snap-tracker": "^0.43.1",
33
- "@searchspring/snap-url-manager": "^0.43.1"
28
+ "@searchspring/snap-client": "^0.44.1",
29
+ "@searchspring/snap-event-manager": "^0.44.1",
30
+ "@searchspring/snap-logger": "^0.44.1",
31
+ "@searchspring/snap-profiler": "^0.44.1",
32
+ "@searchspring/snap-store-mobx": "^0.44.1",
33
+ "@searchspring/snap-tracker": "^0.44.1",
34
+ "@searchspring/snap-url-manager": "^0.44.1"
34
35
  },
35
36
  "sideEffects": false,
36
37
  "files": [
37
38
  "dist/**/*"
38
39
  ],
39
- "gitHead": "45b2fd3657b3d4dddf4256657d18baa4be0647f8"
40
+ "gitHead": "6cfb38b3c9e11971e2b0f771ba038e1e6a037f48"
40
41
  }