@searchspring/snap-controller 0.70.1 → 0.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,76 +1,16 @@
1
1
  # Snap Controller
2
2
 
3
- <a href="https://www.npmjs.com/package/@searchspring/snap-controller"><img alt="NPM Status" src="https://img.shields.io/npm/v/@searchspring/snap-controller.svg?style=flat"></a>
4
-
5
3
  The heart of controlling Search, Autocomplete, & Finder functionality. The Controller is responsible for tying various Snap services together.
6
4
 
5
+ Although `@searchspring/snap-controller` is published as a standalone package, it is not intended to be used directly. Internally it is a dependency of the `@searchspring/snap-preact` package.
7
6
 
8
- ## Dependencies
9
-
10
- Snap Controller is a top-level package that requires the following dependencies as services:
11
-
12
- <a href="https://www.npmjs.com/package/@searchspring/snap-client"><img alt="NPM Status" src="https://img.shields.io/npm/v/@searchspring/snap-client.svg?style=flat"></a> [@searchspring/snap-client](https://github.com/searchspring/snap/tree/main/packages/snap-client)
13
-
14
- <a href="https://www.npmjs.com/package/@searchspring/snap-store-mobx"><img alt="NPM Status" src="https://img.shields.io/npm/v/@searchspring/snap-store-mobx.svg?style=flat"></a> [@searchspring/snap-store-mobx](https://github.com/searchspring/snap/tree/main/packages/snap-store-mobx)
15
-
16
- <a href="https://www.npmjs.com/package/@searchspring/snap-url-manager"><img alt="NPM Status" src="https://img.shields.io/npm/v/@searchspring/snap-url-manager.svg?style=flat"></a> [@searchspring/snap-url-manager](https://github.com/searchspring/snap/tree/main/packages/snap-url-manager)
17
-
18
- <a href="https://www.npmjs.com/package/@searchspring/snap-event-manager"><img alt="NPM Status" src="https://img.shields.io/npm/v/@searchspring/snap-event-manager.svg?style=flat"></a> [@searchspring/snap-event-manager](https://github.com/searchspring/snap/tree/main/packages/snap-event-manager)
19
-
20
- <a href="https://www.npmjs.com/package/@searchspring/snap-profiler"><img alt="NPM Status" src="https://img.shields.io/npm/v/@searchspring/snap-profiler.svg?style=flat"></a> [@searchspring/snap-profiler](https://github.com/searchspring/snap/tree/main/packages/snap-profiler)
21
-
22
- <a href="https://www.npmjs.com/package/@searchspring/snap-logger"><img alt="NPM Status" src="https://img.shields.io/npm/v/@searchspring/snap-logger.svg?style=flat"></a> [@searchspring/snap-logger](https://github.com/searchspring/snap/tree/main/packages/snap-logger)
23
-
24
- ## Installation
25
-
26
- To install the `snap-controller` package and it's services:
27
-
28
- ```bash
29
- npm install --save @searchspring/snap-controller @searchspring/snap-client @searchspring/snap-store-mobx @searchspring/snap-url-manager @searchspring/snap-event-manager @searchspring/snap-profiler @searchspring/snap-logger
30
- ```
31
-
32
-
33
- ## Instantiation
34
- Each `Controller` must be passed a configuration object as the first parameter to the constructor, and a services object (dependencies) as the second. The contents of these objects will depend on which type of `Controller` is being instantiated. For example, a `SearchController` would usually be paired with a `SearchStore` service, and would take a `SearchControllerConfig` configuration object.
35
-
36
- The complete example below shows how a `SearchController` could be instatiated, initialized and searched:
37
-
38
- ```typescript
39
- import { Client } from '@searchspring/snap-client';
40
- import { SearchStore } from '@searchspring/snap-store-mobx';
41
- import { UrlManager, UrlTranslator } from '@searchspring/snap-url-manager';
42
- import { EventManager } from '@searchspring/snap-event-manager';
43
- import { Profiler } from '@searchspring/snap-profiler';
44
- import { Logger } from '@searchspring/snap-logger';
45
- import { Tracker } from '@searchspring/snap-tracker';
46
- import { SearchController } from '@searchspring/snap-controller';
47
-
48
- const configuration = {
49
- id: 'search'
50
- };
51
-
52
- const urlManager = new UrlManager(new UrlTranslator());
53
- const services = {
54
- client: new Client({ siteId: 'abc123' }),
55
- store: new SearchStore(configuration, { urlManager }),
56
- urlManager,
57
- eventManager: new EventManager(),
58
- profiler: new Profiler(),
59
- logger: new Logger(),
60
- tracker: new Tracker(),
61
- }
62
-
63
- const controller = new SearchController(configuration, services);
64
- controller.init();
65
- controller.search();
66
- ```
67
7
 
68
8
  ## Configuration
69
9
  The configuration object provided during instantiation provides a way of configuring the controller for different behavior. Each controller type (`SearchController`, `AutocompleteController`, `FinderController`, etc...) has default configurations that can be modified with the instantiation configuration object. At minimum an `id` attribute is required for identifying controllers. The `id` should be unique to each *instance* of a controller.
70
10
  ## Services
71
11
  Along with a configuration, each controller is passed a collection of services during instantiation. These services are then used by the controller and made available via controller methods. Sometimes controllers might share a reference to a service (the `client` service for example), but in most cases a controller will have it's own instance of a service. Some services (like the `SearchStore`) share services with the controller (in the example above, the `UrlManager` is shared).
72
12
 
73
- ```typescript
13
+ ```js
74
14
  { client, store, urlManager, eventManager, profiler, logger }
75
15
  ```
76
16
  ### client
@@ -94,7 +34,7 @@ The `logger` service provides logging functionality to a controller. Each contro
94
34
  Each Controller can optionally take a 3rd parameter for `Context`. This is to allow each individual controller to have its own individual context if so desired.
95
35
 
96
36
  The context is exposed as `controller.context`
97
- ```typescript
37
+ ```js
98
38
  controller.context;
99
39
  ```
100
40
 
@@ -102,7 +42,7 @@ controller.context;
102
42
  ## Initialization
103
43
  Invoking the `init` method is required to subscribe to changes that occur in the UrlManager. It also fires the `init` event which executes attached middleware. This can be fired manually as needed; if it was not manually fired it will happen automatically on the first call to the controller `search` method.
104
44
 
105
- ```typescript
45
+ ```js
106
46
  controller.init();
107
47
  ```
108
48
 
@@ -111,7 +51,7 @@ The `search` method of a controller will run the search that is expected by leve
111
51
 
112
52
  Most controllers will provide a means of manipulating the request and response using `beforeSearch` and `afterSearch` events respectively. Read on for details about events.
113
53
 
114
- ```typescript
54
+ ```js
115
55
  controller.search();
116
56
  ```
117
57
 
@@ -121,7 +61,7 @@ Different controller types will utilize different Snap Stores (typically of the
121
61
  ## Events
122
62
  Each controller will fire various events. Some of the event names are shared between controllers for consistency (ex: `beforeSearch`, `afterSearch`, `afterStore`); however the attaching of middleware and execution of it must remain separate. This is why a new `EventManager` instance is created for each controller. Middleware are attached to events via the `on` method and the functions should almost always end with `await next()` unless purposefully preventing the next attached middleware from executing.
123
63
 
124
- ```typescript
64
+ ```js
125
65
  controller.on('init', async (eventData, next) => {
126
66
  const { controller } = eventData;
127
67
 
@@ -135,7 +75,7 @@ Note: Groups of middleware (plugins) can be attached using the `plugin` method.
135
75
 
136
76
  The data available within a middleware (first parameter) is determined by what gets passed into the `fire` method. For existing events on the controller, the `fire` method is already being called when appropriate to the event, and the `eventData` will typically be an object containing a reference to the controller and any other details that may be of importance to the particular event. Custom events can be created as needed; but keep in mind that any middleware tied to the event should be bound (using `on` or `plugin`) prior to the execution of the `fire` method.
137
77
 
138
- ```typescript
78
+ ```js
139
79
  controller.eventManager.fire('customEventName', { thing1: 'one', thing2: 2 });
140
80
  ```
141
81
 
@@ -146,13 +86,13 @@ A controller's environment is initialized at build time, and is used to control
146
86
  ## Logging
147
87
  The logger provides a clear way of outputting details like profile data or errors to the developer console. A `production` build will supress most logs while a `development` build will show them all. The environment is automatically determined, but can be toggled during runtime by setting it to either `development` or `production`.
148
88
 
149
- ```typescript
89
+ ```js
150
90
  controller.environment = 'development';
151
91
  ```
152
92
 
153
93
  The use of `console.log()` is discouraged. Logging should be done via controller instance to help debug and navigate the sea of console logs. Each controller will output the `id` for easily deciphering which controller made the log.
154
94
 
155
- ```typescript
95
+ ```js
156
96
  controller.log.warn('THIS IS A WARNING!');
157
97
  ```
158
98
 
@@ -21,6 +21,7 @@ export declare class AutocompleteController extends AbstractController {
21
21
  store: AutocompleteStore;
22
22
  config: AutocompleteControllerConfig;
23
23
  storage: StorageStore;
24
+ private lastSearchQuery;
24
25
  events: {
25
26
  product: Record<string, {
26
27
  click?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAa,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,EAA6C,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE9I,OAAO,KAAK,EAAE,wBAAwB,EAAgE,MAAM,2BAA2B,CAAC;AAexI,eAAO,MAAM,WAAW,MAAM,CAAC;AA+B/B,KAAK,wBAAwB,GAAG;IAC/B,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAClC,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACtC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACtC,CAAC;IACF,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,kBAAkB;IACtD,IAAI,kBAAgC;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,YAAY,CAAC;IAE7B,MAAM,EAAE;QACP,OAAO,EAAE,MAAM,CACd,MAAM,EACN;YACC,KAAK,CAAC,EAAE,OAAO,CAAC;YAChB,YAAY,CAAC,EAAE,OAAO,CAAC;YACvB,UAAU,CAAC,EAAE,OAAO,CAAC;YACrB,MAAM,CAAC,EAAE,OAAO,CAAC;SACjB,CACD,CAAC;KACF,CAEC;gBAGD,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;IAsF3B,KAAK,EAAE,wBAAwB,CA0D7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CAwCrC;IAEK,UAAU,CAAC,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BhE,KAAK,IAAI,IAAI;IASb,QAAQ;;0BAEc,aAAa,KAAG,QAAQ,OAAO,GAAG,SAAS,CAAC;wBAiDpD,aAAa,KAAG,IAAI;uBAMrB,UAAU,KAAG,IAAI;4BAQN,MAAM,SAAS,CAAC,gBAAgB,CAAC,KAAG,QAAQ,IAAI,CAAC;mCA+ChD,MAAM,WAAW,CAAC,gBAAgB,CAAC,KAAG,IAAI;uBAqBtD,KAAK;;;;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,CA6I9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAQ/D;CACF"}
1
+ {"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAa,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,EAA6C,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE9I,OAAO,KAAK,EAAE,wBAAwB,EAAgE,MAAM,2BAA2B,CAAC;AAexI,eAAO,MAAM,WAAW,MAAM,CAAC;AA+B/B,KAAK,wBAAwB,GAAG;IAC/B,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAClC,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACtC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACtC,CAAC;IACF,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,kBAAkB;IACtD,IAAI,kBAAgC;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,YAAY,CAAC;IAC7B,OAAO,CAAC,eAAe,CAAqB;IAE5C,MAAM,EAAE;QACP,OAAO,EAAE,MAAM,CACd,MAAM,EACN;YACC,KAAK,CAAC,EAAE,OAAO,CAAC;YAChB,YAAY,CAAC,EAAE,OAAO,CAAC;YACvB,UAAU,CAAC,EAAE,OAAO,CAAC;YACrB,MAAM,CAAC,EAAE,OAAO,CAAC;SACjB,CACD,CAAC;KACF,CAEC;gBAGD,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;IAsF3B,KAAK,EAAE,wBAAwB,CA0D7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CAwCrC;IAEK,UAAU,CAAC,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BhE,KAAK,IAAI,IAAI;IASb,QAAQ;;0BAEc,aAAa,KAAG,QAAQ,OAAO,GAAG,SAAS,CAAC;wBAiDpD,aAAa,KAAG,IAAI;uBAMrB,UAAU,KAAG,IAAI;4BAQN,MAAM,SAAS,CAAC,gBAAgB,CAAC,KAAG,QAAQ,IAAI,CAAC;mCA+ChD,MAAM,WAAW,CAAC,gBAAgB,CAAC,KAAG,IAAI;uBAqBtD,KAAK;;;;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,CAyJ9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAQ/D;CACF"}
@@ -433,17 +433,18 @@ var AutocompleteController = /** @class */ (function (_super) {
433
433
  });
434
434
  }); };
435
435
  _this.search = function () { return __awaiter(_this, void 0, void 0, function () {
436
- var params, err_3, searchProfile, _a, meta, response, afterSearchProfile, err_4, afterStoreProfile, err_5, err_6;
437
- var _b, _c;
438
- return __generator(this, function (_d) {
439
- switch (_d.label) {
436
+ var params, err_3, searchProfile, _a, meta, response, impressedResultIds, afterSearchProfile, err_4, afterStoreProfile, err_5, err_6;
437
+ var _this = this;
438
+ var _b, _c, _d, _e;
439
+ return __generator(this, function (_f) {
440
+ switch (_f.label) {
440
441
  case 0:
441
- _d.trys.push([0, 16, 17, 18]);
442
+ _f.trys.push([0, 16, 17, 18]);
442
443
  if (!!this.initialized) return [3 /*break*/, 2];
443
444
  return [4 /*yield*/, this.init()];
444
445
  case 1:
445
- _d.sent();
446
- _d.label = 2;
446
+ _f.sent();
447
+ _f.label = 2;
447
448
  case 2:
448
449
  // if urlManager has no query, there will be no need to get params and no query
449
450
  if (!this.urlManager.state.query) {
@@ -457,18 +458,18 @@ var AutocompleteController = /** @class */ (function (_super) {
457
458
  this.store.loading = true;
458
459
  // clear the redirect URL until proper abort functionality is implemented
459
460
  this.store.merchandising.redirect = '';
460
- _d.label = 3;
461
+ _f.label = 3;
461
462
  case 3:
462
- _d.trys.push([3, 5, , 6]);
463
+ _f.trys.push([3, 5, , 6]);
463
464
  return [4 /*yield*/, this.eventManager.fire('beforeSearch', {
464
465
  controller: this,
465
466
  request: params,
466
467
  })];
467
468
  case 4:
468
- _d.sent();
469
+ _f.sent();
469
470
  return [3 /*break*/, 6];
470
471
  case 5:
471
- err_3 = _d.sent();
472
+ err_3 = _f.sent();
472
473
  if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
473
474
  this.log.warn("'beforeSearch' middleware cancelled");
474
475
  return [2 /*return*/];
@@ -480,10 +481,9 @@ var AutocompleteController = /** @class */ (function (_super) {
480
481
  return [3 /*break*/, 6];
481
482
  case 6:
482
483
  searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
483
- this.events = { product: {} };
484
484
  return [4 /*yield*/, this.client.autocomplete(params)];
485
485
  case 7:
486
- _a = _d.sent(), meta = _a[0], response = _a[1];
486
+ _a = _f.sent(), meta = _a[0], response = _a[1];
487
487
  // @ts-ignore : MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
488
488
  if (!response.meta) {
489
489
  // @ts-ignore : MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
@@ -491,20 +491,33 @@ var AutocompleteController = /** @class */ (function (_super) {
491
491
  }
492
492
  searchProfile.stop();
493
493
  this.log.profile(searchProfile);
494
+ if (((_d = response.search) === null || _d === void 0 ? void 0 : _d.query) === this.lastSearchQuery) {
495
+ impressedResultIds = Object.keys(this.events.product).filter(function (resultId) { var _a; return (_a = _this.events.product[resultId]) === null || _a === void 0 ? void 0 : _a.impression; });
496
+ this.events = {
497
+ product: impressedResultIds.reduce(function (acc, resultId) {
498
+ acc[resultId] = { impression: true };
499
+ return acc;
500
+ }, {}),
501
+ };
502
+ }
503
+ else {
504
+ this.events = { product: {} };
505
+ this.lastSearchQuery = (_e = response.search) === null || _e === void 0 ? void 0 : _e.query;
506
+ }
494
507
  afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params }).start();
495
- _d.label = 8;
508
+ _f.label = 8;
496
509
  case 8:
497
- _d.trys.push([8, 10, , 11]);
510
+ _f.trys.push([8, 10, , 11]);
498
511
  return [4 /*yield*/, this.eventManager.fire('afterSearch', {
499
512
  controller: this,
500
513
  request: params,
501
514
  response: response,
502
515
  })];
503
516
  case 9:
504
- _d.sent();
517
+ _f.sent();
505
518
  return [3 /*break*/, 11];
506
519
  case 10:
507
- err_4 = _d.sent();
520
+ err_4 = _f.sent();
508
521
  if ((err_4 === null || err_4 === void 0 ? void 0 : err_4.message) == 'cancelled') {
509
522
  this.log.warn("'afterSearch' middleware cancelled");
510
523
  afterSearchProfile.stop();
@@ -521,19 +534,19 @@ var AutocompleteController = /** @class */ (function (_super) {
521
534
  // update the store
522
535
  this.store.update(response);
523
536
  afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
524
- _d.label = 12;
537
+ _f.label = 12;
525
538
  case 12:
526
- _d.trys.push([12, 14, , 15]);
539
+ _f.trys.push([12, 14, , 15]);
527
540
  return [4 /*yield*/, this.eventManager.fire('afterStore', {
528
541
  controller: this,
529
542
  request: params,
530
543
  response: response,
531
544
  })];
532
545
  case 13:
533
- _d.sent();
546
+ _f.sent();
534
547
  return [3 /*break*/, 15];
535
548
  case 14:
536
- err_5 = _d.sent();
549
+ err_5 = _f.sent();
537
550
  if ((err_5 === null || err_5 === void 0 ? void 0 : err_5.message) == 'cancelled') {
538
551
  this.log.warn("'afterStore' middleware cancelled");
539
552
  afterStoreProfile.stop();
@@ -549,7 +562,7 @@ var AutocompleteController = /** @class */ (function (_super) {
549
562
  this.log.profile(afterStoreProfile);
550
563
  return [3 /*break*/, 18];
551
564
  case 16:
552
- err_6 = _d.sent();
565
+ err_6 = _f.sent();
553
566
  if (err_6) {
554
567
  if (err_6.err && err_6.fetchDetails) {
555
568
  switch (err_6.fetchDetails.status) {
@@ -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,EAAuB,MAAM,UAAU,CAAC;AAEhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAc,MAAM,+BAA+B,CAAC;AAC9F,OAAO,KAAK,EACX,sBAAsB,EAGtB,kBAAkB,EAClB,gBAAgB,EAIhB,MAAM,UAAU,CAAC;AAElB,OAAO,EACN,KAAK,kBAAkB,EAYvB,MAAM,2BAA2B,CAAC;AAmCnC,KAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAClC,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACtC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACtC,CAAC;IACF,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAGF,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;IAC/D,OAAO,CAAC,IAAI,CAEV;IACF,OAAO,CAAC,MAAM,CAUM;gBAGnB,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;IAoQ3B,KAAK,EAAE,kBAAkB,CA+FvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CA8C/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAyN9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAQ/D;CACF;AAwBD,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,EAAuB,MAAM,UAAU,CAAC;AAEhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAc,MAAM,+BAA+B,CAAC;AAC9F,OAAO,KAAK,EACX,sBAAsB,EAGtB,kBAAkB,EAClB,gBAAgB,EAIhB,MAAM,UAAU,CAAC;AAElB,OAAO,EACN,KAAK,kBAAkB,EAYvB,MAAM,2BAA2B,CAAC;AAmCnC,KAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAClC,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACtC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACtC,CAAC;IACF,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAGF,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;IAC/D,OAAO,CAAC,IAAI,CAEV;IACF,OAAO,CAAC,MAAM,CAUM;gBAGnB,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;IAmQ3B,KAAK,EAAE,kBAAkB,CA+FvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CA8C/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAyN9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAQ/D;CACF;AAwBD,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"}
@@ -252,7 +252,7 @@ var SearchController = /** @class */ (function (_super) {
252
252
  case 6:
253
253
  stringyParams = JSON.stringify(getStorableRequestParams(params_1));
254
254
  prevStringyParams = this.storage.get('lastStringyParams');
255
- if (stringyParams == prevStringyParams) {
255
+ if (this.store.loaded && stringyParams === prevStringyParams) {
256
256
  // no param change - not searching
257
257
  return [2 /*return*/];
258
258
  }
@@ -464,8 +464,6 @@ var SearchController = /** @class */ (function (_super) {
464
464
  type: 'session',
465
465
  key: "ss-controller-".concat(_this.config.id),
466
466
  });
467
- // set last params to undefined for compare in search
468
- _this.storage.set('lastStringyParams', undefined);
469
467
  if (typeof ((_c = _this.context) === null || _c === void 0 ? void 0 : _c.page) === 'object' && ['search', 'category'].includes(_this.context.page.type)) {
470
468
  _this.page = (0, deepmerge_1.default)(_this.page, _this.context.page);
471
469
  }
@@ -737,8 +735,10 @@ var SearchController = /** @class */ (function (_super) {
737
735
  });
738
736
  // fire restorePosition event on 'pageshow' when setting is enabled
739
737
  if ((_j = (_h = _this.config.settings) === null || _h === void 0 ? void 0 : _h.restorePosition) === null || _j === void 0 ? void 0 : _j.onPageShow) {
740
- window.addEventListener('pageshow', function () {
741
- _this.eventManager.fire('restorePosition', { controller: _this, element: {} });
738
+ window.addEventListener('pageshow', function (e) {
739
+ if (e.persisted && _this.store.loaded) {
740
+ _this.eventManager.fire('restorePosition', { controller: _this, element: {} });
741
+ }
742
742
  });
743
743
  }
744
744
  }
@@ -21,6 +21,7 @@ export declare class AutocompleteController extends AbstractController {
21
21
  store: AutocompleteStore;
22
22
  config: AutocompleteControllerConfig;
23
23
  storage: StorageStore;
24
+ private lastSearchQuery;
24
25
  events: {
25
26
  product: Record<string, {
26
27
  click?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAa,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,EAA6C,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE9I,OAAO,KAAK,EAAE,wBAAwB,EAAgE,MAAM,2BAA2B,CAAC;AAexI,eAAO,MAAM,WAAW,MAAM,CAAC;AA+B/B,KAAK,wBAAwB,GAAG;IAC/B,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAClC,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACtC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACtC,CAAC;IACF,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,kBAAkB;IACtD,IAAI,kBAAgC;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,YAAY,CAAC;IAE7B,MAAM,EAAE;QACP,OAAO,EAAE,MAAM,CACd,MAAM,EACN;YACC,KAAK,CAAC,EAAE,OAAO,CAAC;YAChB,YAAY,CAAC,EAAE,OAAO,CAAC;YACvB,UAAU,CAAC,EAAE,OAAO,CAAC;YACrB,MAAM,CAAC,EAAE,OAAO,CAAC;SACjB,CACD,CAAC;KACF,CAEC;gBAGD,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;IAsF3B,KAAK,EAAE,wBAAwB,CA0D7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CAwCrC;IAEK,UAAU,CAAC,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BhE,KAAK,IAAI,IAAI;IASb,QAAQ;;0BAEc,aAAa,KAAG,QAAQ,OAAO,GAAG,SAAS,CAAC;wBAiDpD,aAAa,KAAG,IAAI;uBAMrB,UAAU,KAAG,IAAI;4BAQN,MAAM,SAAS,CAAC,gBAAgB,CAAC,KAAG,QAAQ,IAAI,CAAC;mCA+ChD,MAAM,WAAW,CAAC,gBAAgB,CAAC,KAAG,IAAI;uBAqBtD,KAAK;;;;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,CA6I9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAQ/D;CACF"}
1
+ {"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAa,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,EAA6C,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE9I,OAAO,KAAK,EAAE,wBAAwB,EAAgE,MAAM,2BAA2B,CAAC;AAexI,eAAO,MAAM,WAAW,MAAM,CAAC;AA+B/B,KAAK,wBAAwB,GAAG;IAC/B,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAClC,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACtC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACtC,CAAC;IACF,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,kBAAkB;IACtD,IAAI,kBAAgC;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,YAAY,CAAC;IAC7B,OAAO,CAAC,eAAe,CAAqB;IAE5C,MAAM,EAAE;QACP,OAAO,EAAE,MAAM,CACd,MAAM,EACN;YACC,KAAK,CAAC,EAAE,OAAO,CAAC;YAChB,YAAY,CAAC,EAAE,OAAO,CAAC;YACvB,UAAU,CAAC,EAAE,OAAO,CAAC;YACrB,MAAM,CAAC,EAAE,OAAO,CAAC;SACjB,CACD,CAAC;KACF,CAEC;gBAGD,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;IAsF3B,KAAK,EAAE,wBAAwB,CA0D7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CAwCrC;IAEK,UAAU,CAAC,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BhE,KAAK,IAAI,IAAI;IASb,QAAQ;;0BAEc,aAAa,KAAG,QAAQ,OAAO,GAAG,SAAS,CAAC;wBAiDpD,aAAa,KAAG,IAAI;uBAMrB,UAAU,KAAG,IAAI;4BAQN,MAAM,SAAS,CAAC,gBAAgB,CAAC,KAAG,QAAQ,IAAI,CAAC;mCA+ChD,MAAM,WAAW,CAAC,gBAAgB,CAAC,KAAG,IAAI;uBAqBtD,KAAK;;;;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,CAyJ9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAQ/D;CACF"}
@@ -337,7 +337,6 @@ export class AutocompleteController extends AbstractController {
337
337
  }
338
338
  }
339
339
  const searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
340
- this.events = { product: {} };
341
340
  const [meta, response] = await this.client.autocomplete(params);
342
341
  // @ts-ignore : MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
343
342
  if (!response.meta) {
@@ -346,6 +345,19 @@ export class AutocompleteController extends AbstractController {
346
345
  }
347
346
  searchProfile.stop();
348
347
  this.log.profile(searchProfile);
348
+ if (response.search?.query === this.lastSearchQuery) {
349
+ const impressedResultIds = Object.keys(this.events.product).filter((resultId) => this.events.product[resultId]?.impression);
350
+ this.events = {
351
+ product: impressedResultIds.reduce((acc, resultId) => {
352
+ acc[resultId] = { impression: true };
353
+ return acc;
354
+ }, {}),
355
+ };
356
+ }
357
+ else {
358
+ this.events = { product: {} };
359
+ this.lastSearchQuery = response.search?.query;
360
+ }
349
361
  const afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params }).start();
350
362
  try {
351
363
  await this.eventManager.fire('afterSearch', {
@@ -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,EAAuB,MAAM,UAAU,CAAC;AAEhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAc,MAAM,+BAA+B,CAAC;AAC9F,OAAO,KAAK,EACX,sBAAsB,EAGtB,kBAAkB,EAClB,gBAAgB,EAIhB,MAAM,UAAU,CAAC;AAElB,OAAO,EACN,KAAK,kBAAkB,EAYvB,MAAM,2BAA2B,CAAC;AAmCnC,KAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAClC,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACtC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACtC,CAAC;IACF,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAGF,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;IAC/D,OAAO,CAAC,IAAI,CAEV;IACF,OAAO,CAAC,MAAM,CAUM;gBAGnB,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;IAoQ3B,KAAK,EAAE,kBAAkB,CA+FvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CA8C/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAyN9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAQ/D;CACF;AAwBD,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,EAAuB,MAAM,UAAU,CAAC;AAEhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAc,MAAM,+BAA+B,CAAC;AAC9F,OAAO,KAAK,EACX,sBAAsB,EAGtB,kBAAkB,EAClB,gBAAgB,EAIhB,MAAM,UAAU,CAAC;AAElB,OAAO,EACN,KAAK,kBAAkB,EAYvB,MAAM,2BAA2B,CAAC;AAmCnC,KAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAClC,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACtC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACtC,CAAC;IACF,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAGF,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;IAC/D,OAAO,CAAC,IAAI,CAEV;IACF,OAAO,CAAC,MAAM,CAUM;gBAGnB,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;IAmQ3B,KAAK,EAAE,kBAAkB,CA+FvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CA8C/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAyN9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAQ/D;CACF;AAwBD,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"}
@@ -150,7 +150,7 @@ export class SearchController extends AbstractController {
150
150
  }
151
151
  const stringyParams = JSON.stringify(getStorableRequestParams(params));
152
152
  const prevStringyParams = this.storage.get('lastStringyParams');
153
- if (stringyParams == prevStringyParams) {
153
+ if (this.store.loaded && stringyParams === prevStringyParams) {
154
154
  // no param change - not searching
155
155
  return;
156
156
  }
@@ -338,8 +338,6 @@ export class SearchController extends AbstractController {
338
338
  type: 'session',
339
339
  key: `ss-controller-${this.config.id}`,
340
340
  });
341
- // set last params to undefined for compare in search
342
- this.storage.set('lastStringyParams', undefined);
343
341
  if (typeof this.context?.page === 'object' && ['search', 'category'].includes(this.context.page.type)) {
344
342
  this.page = deepmerge(this.page, this.context.page);
345
343
  }
@@ -535,8 +533,10 @@ export class SearchController extends AbstractController {
535
533
  });
536
534
  // fire restorePosition event on 'pageshow' when setting is enabled
537
535
  if (this.config.settings?.restorePosition?.onPageShow) {
538
- window.addEventListener('pageshow', () => {
539
- this.eventManager.fire('restorePosition', { controller: this, element: {} });
536
+ window.addEventListener('pageshow', (e) => {
537
+ if (e.persisted && this.store.loaded) {
538
+ this.eventManager.fire('restorePosition', { controller: this, element: {} });
539
+ }
540
540
  });
541
541
  }
542
542
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@searchspring/snap-controller",
3
- "version": "0.70.1",
3
+ "version": "0.72.0",
4
4
  "description": "Snap Controllers",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -20,22 +20,22 @@
20
20
  "test:watch": "jest --watch"
21
21
  },
22
22
  "dependencies": {
23
- "@searchspring/snap-toolbox": "0.70.1",
23
+ "@searchspring/snap-toolbox": "0.72.0",
24
24
  "css.escape": "1.5.1",
25
25
  "deepmerge": "4.3.1"
26
26
  },
27
27
  "devDependencies": {
28
- "@searchspring/snap-client": "0.70.1",
29
- "@searchspring/snap-event-manager": "0.70.1",
30
- "@searchspring/snap-logger": "0.70.1",
31
- "@searchspring/snap-profiler": "0.70.1",
32
- "@searchspring/snap-store-mobx": "0.70.1",
33
- "@searchspring/snap-tracker": "0.70.1",
34
- "@searchspring/snap-url-manager": "0.70.1"
28
+ "@searchspring/snap-client": "0.72.0",
29
+ "@searchspring/snap-event-manager": "0.72.0",
30
+ "@searchspring/snap-logger": "0.72.0",
31
+ "@searchspring/snap-profiler": "0.72.0",
32
+ "@searchspring/snap-store-mobx": "0.72.0",
33
+ "@searchspring/snap-tracker": "0.72.0",
34
+ "@searchspring/snap-url-manager": "0.72.0"
35
35
  },
36
36
  "sideEffects": false,
37
37
  "files": [
38
38
  "dist/**/*"
39
39
  ],
40
- "gitHead": "91ca0ec407be1edb997da1256242d167aa7da79f"
40
+ "gitHead": "737d4bd308ebbb852fe3f09b2b90f4af87bbe264"
41
41
  }