@searchspring/snap-controller 0.73.7 → 0.75.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.
Files changed (25) hide show
  1. package/dist/cjs/Autocomplete/AutocompleteController.d.ts +0 -1
  2. package/dist/cjs/Autocomplete/AutocompleteController.d.ts.map +1 -1
  3. package/dist/cjs/Autocomplete/AutocompleteController.js +124 -68
  4. package/dist/cjs/Finder/FinderController.d.ts.map +1 -1
  5. package/dist/cjs/Finder/FinderController.js +3 -0
  6. package/dist/cjs/Recommendation/RecommendationController.d.ts.map +1 -1
  7. package/dist/cjs/Recommendation/RecommendationController.js +84 -58
  8. package/dist/cjs/Search/SearchController.d.ts.map +1 -1
  9. package/dist/cjs/Search/SearchController.js +142 -66
  10. package/dist/cjs/utils/isClickWithinProductLink.d.ts +1 -1
  11. package/dist/cjs/utils/isClickWithinProductLink.d.ts.map +1 -1
  12. package/dist/cjs/utils/isClickWithinProductLink.js +14 -12
  13. package/dist/esm/Autocomplete/AutocompleteController.d.ts +0 -1
  14. package/dist/esm/Autocomplete/AutocompleteController.d.ts.map +1 -1
  15. package/dist/esm/Autocomplete/AutocompleteController.js +101 -28
  16. package/dist/esm/Finder/FinderController.d.ts.map +1 -1
  17. package/dist/esm/Finder/FinderController.js +3 -0
  18. package/dist/esm/Recommendation/RecommendationController.d.ts.map +1 -1
  19. package/dist/esm/Recommendation/RecommendationController.js +64 -22
  20. package/dist/esm/Search/SearchController.d.ts.map +1 -1
  21. package/dist/esm/Search/SearchController.js +106 -22
  22. package/dist/esm/utils/isClickWithinProductLink.d.ts +1 -1
  23. package/dist/esm/utils/isClickWithinProductLink.d.ts.map +1 -1
  24. package/dist/esm/utils/isClickWithinProductLink.js +13 -12
  25. package/package.json +10 -10
@@ -28,7 +28,6 @@ export declare class AutocompleteController extends AbstractController {
28
28
  store: AutocompleteStore;
29
29
  config: AutocompleteControllerConfig;
30
30
  storage: StorageStore;
31
- private lastSearchQuery;
32
31
  private events;
33
32
  constructor(config: AutocompleteControllerConfig, { client, store, urlManager, eventManager, profiler, logger, tracker }: ControllerServices, context?: ContextVariables);
34
33
  track: AutocompleteTrackMethods;
@@ -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,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AACrH,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,EAA4C,MAAM,2BAA2B,CAAC;AAkBpH,eAAO,MAAM,WAAW,MAAM,CAAC;AA+B/B,KAAK,wBAAwB,GAAG;IAC/B,MAAM,EAAE;QACP,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,0BAA0B,KAAK,IAAI,CAAC;QAChF,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,0BAA0B,KAAK,IAAI,CAAC;QACvF,UAAU,EAAE,CAAC,mBAAmB,EAAE,0BAA0B,KAAK,IAAI,CAAC;KACtE,CAAC;IACF,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QAChE,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QAC/C,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACtC,CAAC;IACF,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC7F,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,OAAO,CAAC,MAAM,CAgBP;gBAGN,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;IAwE3B,KAAK,EAAE,wBAAwB,CAwI7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CAkDrC;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;;;;uBA0DL,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,CA+J9B;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,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AACrH,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,EAA4C,MAAM,2BAA2B,CAAC;AAkBpH,eAAO,MAAM,WAAW,MAAM,CAAC;AAkC/B,KAAK,wBAAwB,GAAG;IAC/B,MAAM,EAAE;QACP,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,0BAA0B,KAAK,IAAI,CAAC;QAChF,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,0BAA0B,KAAK,IAAI,CAAC;QACvF,UAAU,EAAE,CAAC,mBAAmB,EAAE,0BAA0B,KAAK,IAAI,CAAC;KACtE,CAAC;IACF,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QAChE,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QAC/C,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACtC,CAAC;IACF,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC7F,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,OAAO,CAAC,MAAM,CAgBP;gBAGN,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;IA8D3B,KAAK,EAAE,wBAAwB,CA8N7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CAkDrC;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;;;;uBA0DL,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,CAqK9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAY/D;CACF"}
@@ -84,6 +84,9 @@ var defaultConfig = {
84
84
  selector: '',
85
85
  action: '',
86
86
  globals: {},
87
+ beacon: {
88
+ enabled: true,
89
+ },
87
90
  settings: {
88
91
  integratedSpellCorrection: false,
89
92
  initializeFromUrl: true,
@@ -113,9 +116,17 @@ var AutocompleteController = /** @class */ (function (_super) {
113
116
  _this.track = {
114
117
  banner: {
115
118
  impression: function (_banner) {
116
- var _a, _b, _c, _d;
119
+ var _a, _b, _c, _d, _e, _f;
120
+ if (!_banner) {
121
+ _this.log.warn('No banner provided to track.banner.impression');
122
+ return;
123
+ }
117
124
  var responseId = _banner.responseId, uid = _banner.uid;
118
- if ((_c = (_b = (_a = _this.events[responseId]) === null || _a === void 0 ? void 0 : _a.banner) === null || _b === void 0 ? void 0 : _b[uid]) === null || _c === void 0 ? void 0 : _c.impression) {
125
+ if (!_this.events[responseId]) {
126
+ _this.log.warn('No responseId found in controller, ensure correct controller is used');
127
+ return;
128
+ }
129
+ else if ((_d = (_c = (_b = (_a = _this.events) === null || _a === void 0 ? void 0 : _a[responseId]) === null || _b === void 0 ? void 0 : _b.banner) === null || _c === void 0 ? void 0 : _c[uid]) === null || _d === void 0 ? void 0 : _d.impression) {
119
130
  return;
120
131
  }
121
132
  var banner = { uid: uid };
@@ -125,13 +136,21 @@ var AutocompleteController = /** @class */ (function (_super) {
125
136
  results: [],
126
137
  };
127
138
  _this.eventManager.fire('track.banner.impression', { controller: _this, product: { uid: uid }, trackEvent: data });
128
- _this.tracker.events.autocomplete.impression({ data: data, siteId: (_d = _this.config.globals) === null || _d === void 0 ? void 0 : _d.siteId });
139
+ ((_e = _this.config.beacon) === null || _e === void 0 ? void 0 : _e.enabled) && _this.tracker.events.autocomplete.impression({ data: data, siteId: (_f = _this.config.globals) === null || _f === void 0 ? void 0 : _f.siteId });
129
140
  _this.events[responseId].banner[uid] = _this.events[responseId].banner[uid] || {};
130
141
  _this.events[responseId].banner[uid].impression = true;
131
142
  },
132
143
  click: function (e, banner) {
133
144
  var _a, _b, _c;
145
+ if (!banner) {
146
+ _this.log.warn('No banner provided to track.banner.click');
147
+ return;
148
+ }
134
149
  var responseId = banner.responseId, uid = banner.uid;
150
+ if (!_this.events[responseId]) {
151
+ _this.log.warn('No responseId found in controller, ensure correct controller is used');
152
+ return;
153
+ }
135
154
  if ((0, isClickWithinBannerLink_1.isClickWithinBannerLink)(e)) {
136
155
  if ((_c = (_b = (_a = _this.events) === null || _a === void 0 ? void 0 : _a[responseId]) === null || _b === void 0 ? void 0 : _b.banner[uid]) === null || _c === void 0 ? void 0 : _c.clickThrough) {
137
156
  return;
@@ -145,15 +164,23 @@ var AutocompleteController = /** @class */ (function (_super) {
145
164
  }
146
165
  },
147
166
  clickThrough: function (e, _a) {
148
- var _b;
167
+ var _b, _c;
149
168
  var uid = _a.uid, responseId = _a.responseId;
169
+ if (!uid) {
170
+ _this.log.warn('No banner uid provided to track.banner.clickThrough');
171
+ return;
172
+ }
173
+ if (!_this.events[responseId]) {
174
+ _this.log.warn('No responseId found in controller, ensure correct controller is used');
175
+ return;
176
+ }
150
177
  var banner = { uid: uid };
151
178
  var data = {
152
179
  responseId: responseId,
153
180
  banners: [banner],
154
181
  };
155
182
  _this.eventManager.fire('track.banner.clickThrough', { controller: _this, event: e, product: { uid: uid }, trackEvent: data });
156
- _this.tracker.events.autocomplete.clickThrough({ data: data, siteId: (_b = _this.config.globals) === null || _b === void 0 ? void 0 : _b.siteId });
183
+ ((_b = _this.config.beacon) === null || _b === void 0 ? void 0 : _b.enabled) && _this.tracker.events.autocomplete.clickThrough({ data: data, siteId: (_c = _this.config.globals) === null || _c === void 0 ? void 0 : _c.siteId });
157
184
  _this.events[responseId].banner[uid] = _this.events[responseId].banner[uid] || {};
158
185
  _this.events[responseId].banner[uid].clickThrough = true;
159
186
  setTimeout(function () {
@@ -163,24 +190,41 @@ var AutocompleteController = /** @class */ (function (_super) {
163
190
  },
164
191
  product: {
165
192
  clickThrough: function (e, result) {
166
- var _a, _b;
193
+ var _a, _b, _c, _d;
194
+ if (!result) {
195
+ _this.log.warn('No result provided to track.product.clickThrough');
196
+ return;
197
+ }
167
198
  var responseId = result.responseId;
168
- var item = {
169
- type: result.type,
170
- uid: result.id,
171
- parentId: result.id,
172
- sku: (_a = result.mappings.core) === null || _a === void 0 ? void 0 : _a.sku,
173
- };
199
+ if (!_this.events[responseId]) {
200
+ _this.log.warn('No responseId found in controller, ensure correct controller is used');
201
+ return;
202
+ }
203
+ var type = (['product', 'banner'].includes(result.type) ? result.type : 'product');
204
+ var item = __assign({ type: type, uid: result.id ? '' + result.id : '' }, (type === 'product'
205
+ ? {
206
+ parentId: result.id ? '' + result.id : '',
207
+ sku: ((_a = result.mappings.core) === null || _a === void 0 ? void 0 : _a.sku) ? '' + ((_b = result.mappings.core) === null || _b === void 0 ? void 0 : _b.sku) : undefined,
208
+ }
209
+ : {}));
174
210
  var data = {
175
211
  responseId: responseId,
176
212
  results: [item],
177
213
  };
178
214
  _this.eventManager.fire('track.product.clickThrough', { controller: _this, event: e, product: result, trackEvent: data });
179
- _this.tracker.events.autocomplete.clickThrough({ data: data, siteId: (_b = _this.config.globals) === null || _b === void 0 ? void 0 : _b.siteId });
215
+ ((_c = _this.config.beacon) === null || _c === void 0 ? void 0 : _c.enabled) && _this.tracker.events.autocomplete.clickThrough({ data: data, siteId: (_d = _this.config.globals) === null || _d === void 0 ? void 0 : _d.siteId });
180
216
  },
181
217
  click: function (e, result) {
182
218
  var _a, _b, _c, _d, _e, _f;
219
+ if (!result) {
220
+ _this.log.warn('No result provided to track.product.click');
221
+ return;
222
+ }
183
223
  var responseId = result.responseId;
224
+ if (!_this.events[responseId]) {
225
+ _this.log.warn('No responseId found in controller, ensure correct controller is used');
226
+ return;
227
+ }
184
228
  if (result.type === 'banner' && (0, isClickWithinBannerLink_1.isClickWithinBannerLink)(e)) {
185
229
  if ((_c = (_b = (_a = _this.events) === null || _a === void 0 ? void 0 : _a[responseId]) === null || _b === void 0 ? void 0 : _b.product[result.id]) === null || _c === void 0 ? void 0 : _c.inlineBannerClickThrough) {
186
230
  return;
@@ -205,30 +249,47 @@ var AutocompleteController = /** @class */ (function (_super) {
205
249
  }
206
250
  },
207
251
  impression: function (result) {
208
- var _a, _b, _c, _d, _e;
252
+ var _a, _b, _c, _d, _e, _f, _g;
253
+ if (!result) {
254
+ _this.log.warn('No result provided to track.product.impression');
255
+ return;
256
+ }
209
257
  var responseId = result.responseId;
210
- if ((_c = (_b = (_a = _this.events) === null || _a === void 0 ? void 0 : _a[responseId]) === null || _b === void 0 ? void 0 : _b.product[result.id]) === null || _c === void 0 ? void 0 : _c.impression) {
258
+ if (!_this.events[responseId]) {
259
+ _this.log.warn('No responseId found in controller, ensure correct controller is used');
211
260
  return;
212
261
  }
213
- var item = {
214
- type: result.type,
215
- uid: result.id,
216
- parentId: result.id,
217
- sku: (_d = result.mappings.core) === null || _d === void 0 ? void 0 : _d.sku,
218
- };
262
+ else if ((_c = (_b = (_a = _this.events) === null || _a === void 0 ? void 0 : _a[responseId]) === null || _b === void 0 ? void 0 : _b.product[result.id]) === null || _c === void 0 ? void 0 : _c.impression) {
263
+ return;
264
+ }
265
+ var type = (['product', 'banner'].includes(result.type) ? result.type : 'product');
266
+ var item = __assign({ type: type, uid: result.id ? '' + result.id : '' }, (type === 'product'
267
+ ? {
268
+ parentId: result.id ? '' + result.id : '',
269
+ sku: ((_d = result.mappings.core) === null || _d === void 0 ? void 0 : _d.sku) ? '' + ((_e = result.mappings.core) === null || _e === void 0 ? void 0 : _e.sku) : undefined,
270
+ }
271
+ : {}));
219
272
  var data = {
220
273
  responseId: responseId,
221
274
  results: [item],
222
275
  banners: [],
223
276
  };
224
277
  _this.eventManager.fire('track.product.impression', { controller: _this, product: result, trackEvent: data });
225
- _this.tracker.events.autocomplete.impression({ data: data, siteId: (_e = _this.config.globals) === null || _e === void 0 ? void 0 : _e.siteId });
278
+ ((_f = _this.config.beacon) === null || _f === void 0 ? void 0 : _f.enabled) && _this.tracker.events.autocomplete.impression({ data: data, siteId: (_g = _this.config.globals) === null || _g === void 0 ? void 0 : _g.siteId });
226
279
  _this.events[responseId].product[result.id] = _this.events[responseId].product[result.id] || {};
227
280
  _this.events[responseId].product[result.id].impression = true;
228
281
  },
229
282
  addToCart: function (result) {
230
- var _a, _b, _c;
283
+ var _a, _b, _c, _d;
284
+ if (!result) {
285
+ _this.log.warn('No result provided to track.product.addToCart');
286
+ return;
287
+ }
231
288
  var responseId = result.responseId;
289
+ if (!_this.events[responseId]) {
290
+ _this.log.warn('No responseId found in controller, ensure correct controller is used');
291
+ return;
292
+ }
232
293
  var product = {
233
294
  parentId: result.id,
234
295
  uid: result.id,
@@ -241,18 +302,22 @@ var AutocompleteController = /** @class */ (function (_super) {
241
302
  results: [product],
242
303
  };
243
304
  _this.eventManager.fire('track.product.addToCart', { controller: _this, product: result, trackEvent: data });
244
- _this.tracker.events.autocomplete.addToCart({ data: data, siteId: (_c = _this.config.globals) === null || _c === void 0 ? void 0 : _c.siteId });
305
+ ((_c = _this.config.beacon) === null || _c === void 0 ? void 0 : _c.enabled) && _this.tracker.events.autocomplete.addToCart({ data: data, siteId: (_d = _this.config.globals) === null || _d === void 0 ? void 0 : _d.siteId });
245
306
  },
246
307
  },
247
308
  redirect: function (_a) {
248
- var _b;
309
+ var _b, _c;
249
310
  var redirectURL = _a.redirectURL, responseId = _a.responseId;
311
+ if (!redirectURL) {
312
+ _this.log.warn('No redirectURL provided to track.redirect');
313
+ return;
314
+ }
250
315
  var data = {
251
316
  responseId: responseId,
252
317
  redirect: redirectURL,
253
318
  };
254
319
  _this.eventManager.fire('track.redirect', { controller: _this, redirectURL: redirectURL, trackEvent: data });
255
- _this.tracker.events.autocomplete.redirect({ data: data, siteId: (_b = _this.config.globals) === null || _b === void 0 ? void 0 : _b.siteId });
320
+ ((_b = _this.config.beacon) === null || _b === void 0 ? void 0 : _b.enabled) && _this.tracker.events.autocomplete.redirect({ data: data, siteId: (_c = _this.config.globals) === null || _c === void 0 ? void 0 : _c.siteId });
256
321
  },
257
322
  };
258
323
  _this.handlers = {
@@ -515,18 +580,18 @@ var AutocompleteController = /** @class */ (function (_super) {
515
580
  });
516
581
  }); };
517
582
  _this.search = function () { return __awaiter(_this, void 0, void 0, function () {
518
- var params, err_3, searchProfile, _a, meta, response, responseId_1, impressedResultIds, afterSearchProfile, err_4, afterStoreProfile, err_5, err_6;
583
+ var params, err_3, searchProfile, _a, meta, response, responseId_1, previousResponseId, repeatedSearch, impressedResultIds, afterSearchProfile, err_4, data, afterStoreProfile, err_5, err_6;
519
584
  var _this = this;
520
- var _b, _c, _d, _e;
521
- return __generator(this, function (_f) {
522
- switch (_f.label) {
585
+ var _b, _c, _d, _e, _f;
586
+ return __generator(this, function (_g) {
587
+ switch (_g.label) {
523
588
  case 0:
524
- _f.trys.push([0, 16, 17, 18]);
589
+ _g.trys.push([0, 16, 17, 18]);
525
590
  if (!!this.initialized) return [3 /*break*/, 2];
526
591
  return [4 /*yield*/, this.init()];
527
592
  case 1:
528
- _f.sent();
529
- _f.label = 2;
593
+ _g.sent();
594
+ _g.label = 2;
530
595
  case 2:
531
596
  // if urlManager has no query, there will be no need to get params and no query
532
597
  if (!this.urlManager.state.query) {
@@ -540,18 +605,18 @@ var AutocompleteController = /** @class */ (function (_super) {
540
605
  this.store.loading = true;
541
606
  // clear the redirect URL until proper abort functionality is implemented
542
607
  this.store.merchandising.redirect = '';
543
- _f.label = 3;
608
+ _g.label = 3;
544
609
  case 3:
545
- _f.trys.push([3, 5, , 6]);
610
+ _g.trys.push([3, 5, , 6]);
546
611
  return [4 /*yield*/, this.eventManager.fire('beforeSearch', {
547
612
  controller: this,
548
613
  request: params,
549
614
  })];
550
615
  case 4:
551
- _f.sent();
616
+ _g.sent();
552
617
  return [3 /*break*/, 6];
553
618
  case 5:
554
- err_3 = _f.sent();
619
+ err_3 = _g.sent();
555
620
  if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
556
621
  this.log.warn("'beforeSearch' middleware cancelled");
557
622
  return [2 /*return*/];
@@ -565,7 +630,7 @@ var AutocompleteController = /** @class */ (function (_super) {
565
630
  searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
566
631
  return [4 /*yield*/, this.client.autocomplete(params)];
567
632
  case 7:
568
- _a = _f.sent(), meta = _a[0], response = _a[1];
633
+ _a = _g.sent(), meta = _a[0], response = _a[1];
569
634
  // @ts-ignore : MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
570
635
  if (!response.meta) {
571
636
  // @ts-ignore : MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
@@ -575,7 +640,9 @@ var AutocompleteController = /** @class */ (function (_super) {
575
640
  this.log.profile(searchProfile);
576
641
  responseId_1 = response.tracking.responseId;
577
642
  this.events[responseId_1] = this.events[responseId_1] || { product: {}, banner: {} };
578
- if (((_d = response.search) === null || _d === void 0 ? void 0 : _d.query) === this.lastSearchQuery) {
643
+ previousResponseId = (_d = this.store.results[0]) === null || _d === void 0 ? void 0 : _d.responseId;
644
+ repeatedSearch = previousResponseId && previousResponseId === responseId_1;
645
+ if (repeatedSearch) {
579
646
  impressedResultIds = Object.keys(this.events[responseId_1].product || {}).filter(function (resultId) { var _a, _b; return (_b = (_a = _this.events[responseId_1].product) === null || _a === void 0 ? void 0 : _a[resultId]) === null || _b === void 0 ? void 0 : _b.impression; });
580
647
  this.events[responseId_1] = {
581
648
  product: impressedResultIds.reduce(function (acc, resultId) {
@@ -587,22 +654,21 @@ var AutocompleteController = /** @class */ (function (_super) {
587
654
  }
588
655
  else {
589
656
  this.events[responseId_1] = { product: {}, banner: {} };
590
- this.lastSearchQuery = (_e = response.search) === null || _e === void 0 ? void 0 : _e.query;
591
657
  }
592
658
  afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params }).start();
593
- _f.label = 8;
659
+ _g.label = 8;
594
660
  case 8:
595
- _f.trys.push([8, 10, , 11]);
661
+ _g.trys.push([8, 10, , 11]);
596
662
  return [4 /*yield*/, this.eventManager.fire('afterSearch', {
597
663
  controller: this,
598
664
  request: params,
599
665
  response: response,
600
666
  })];
601
667
  case 9:
602
- _f.sent();
668
+ _g.sent();
603
669
  return [3 /*break*/, 11];
604
670
  case 10:
605
- err_4 = _f.sent();
671
+ err_4 = _g.sent();
606
672
  if ((err_4 === null || err_4 === void 0 ? void 0 : err_4.message) == 'cancelled') {
607
673
  this.log.warn("'afterSearch' middleware cancelled");
608
674
  afterSearchProfile.stop();
@@ -618,20 +684,24 @@ var AutocompleteController = /** @class */ (function (_super) {
618
684
  this.log.profile(afterSearchProfile);
619
685
  // update the store
620
686
  this.store.update(response);
687
+ if (!repeatedSearch) {
688
+ data = { responseId: responseId_1 };
689
+ ((_e = this.config.beacon) === null || _e === void 0 ? void 0 : _e.enabled) && this.tracker.events.autocomplete.render({ data: data, siteId: (_f = this.config.globals) === null || _f === void 0 ? void 0 : _f.siteId });
690
+ }
621
691
  afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
622
- _f.label = 12;
692
+ _g.label = 12;
623
693
  case 12:
624
- _f.trys.push([12, 14, , 15]);
694
+ _g.trys.push([12, 14, , 15]);
625
695
  return [4 /*yield*/, this.eventManager.fire('afterStore', {
626
696
  controller: this,
627
697
  request: params,
628
698
  response: response,
629
699
  })];
630
700
  case 13:
631
- _f.sent();
701
+ _g.sent();
632
702
  return [3 /*break*/, 15];
633
703
  case 14:
634
- err_5 = _f.sent();
704
+ err_5 = _g.sent();
635
705
  if ((err_5 === null || err_5 === void 0 ? void 0 : err_5.message) == 'cancelled') {
636
706
  this.log.warn("'afterStore' middleware cancelled");
637
707
  afterStoreProfile.stop();
@@ -647,7 +717,7 @@ var AutocompleteController = /** @class */ (function (_super) {
647
717
  this.log.profile(afterStoreProfile);
648
718
  return [3 /*break*/, 18];
649
719
  case 16:
650
- err_6 = _f.sent();
720
+ err_6 = _g.sent();
651
721
  if (err_6) {
652
722
  if (err_6.err && err_6.fetchDetails) {
653
723
  switch (err_6.fetchDetails.status) {
@@ -699,7 +769,11 @@ var AutocompleteController = /** @class */ (function (_super) {
699
769
  var products;
700
770
  var _this = this;
701
771
  return __generator(this, function (_a) {
702
- products = typeof _products.slice == 'function' ? _products.slice() : [_products];
772
+ products = typeof (_products === null || _products === void 0 ? void 0 : _products.slice) == 'function' ? _products.slice() : [_products];
773
+ if (!_products || products.length === 0) {
774
+ this.log.warn('No products provided to autocomplete controller.addToCart');
775
+ return [2 /*return*/];
776
+ }
703
777
  products.forEach(function (product) {
704
778
  _this.track.product.addToCart(product);
705
779
  });
@@ -724,24 +798,6 @@ var AutocompleteController = /** @class */ (function (_super) {
724
798
  type: 'session',
725
799
  key: "ss-controller-".concat(_this.config.id),
726
800
  });
727
- _this.eventManager.on('afterStore', function (search, next) { return __awaiter(_this, void 0, void 0, function () {
728
- var controller, responseId, data;
729
- var _a;
730
- return __generator(this, function (_b) {
731
- switch (_b.label) {
732
- case 0: return [4 /*yield*/, next()];
733
- case 1:
734
- _b.sent();
735
- controller = search.controller;
736
- responseId = search.response.tracking.responseId;
737
- if (controller.store.loaded && !controller.store.error) {
738
- data = { responseId: responseId };
739
- this.tracker.events.autocomplete.render({ data: data, siteId: (_a = this.config.globals) === null || _a === void 0 ? void 0 : _a.siteId });
740
- }
741
- return [2 /*return*/];
742
- }
743
- });
744
- }); });
745
801
  // add 'afterSearch' middleware
746
802
  _this.eventManager.on('afterSearch', function (ac, next) { return __awaiter(_this, void 0, void 0, function () {
747
803
  var _a;
@@ -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,EAAwB,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiBnH,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;gBAGtC,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA+B3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA6BhC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAkB5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAoI9B;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,EAAwB,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAoBnH,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;gBAGtC,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA+B3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA6BhC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAkB5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAoI9B;CACF"}
@@ -73,6 +73,9 @@ var getParams_1 = require("../utils/getParams");
73
73
  var types_1 = require("../types");
74
74
  var defaultConfig = {
75
75
  id: 'finder',
76
+ beacon: {
77
+ enabled: true,
78
+ },
76
79
  globals: {
77
80
  pagination: {
78
81
  pageSize: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAW3C,OAAO,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,gBAAgB,EAAiB,MAAM,UAAU,CAAC;AAIpH,KAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QAChE,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QAC/C,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;KACrC,CAAC;CACF,CAAC;AAUF,qBAAa,wBAAyB,SAAQ,kBAAkB;IACxD,IAAI,kBAAkC;IACrC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,8BAA8B,CAAC;IAE/C,OAAO,CAAC,MAAM,CAUP;gBAGN,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;IAkD3B,KAAK,EAAE,0BAA0B,CAqF/B;IAEF,IAAI,MAAM,IAAI,qBAAqB,CA4BlC;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CA6H9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAQ/D;CACF"}
1
+ {"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAW3C,OAAO,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGrG,KAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QAChE,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QAC/C,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;KACrC,CAAC;CACF,CAAC;AAaF,qBAAa,wBAAyB,SAAQ,kBAAkB;IACxD,IAAI,kBAAkC;IACrC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,8BAA8B,CAAC;IAE/C,OAAO,CAAC,MAAM,CAUP;gBAGN,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;IAwC3B,KAAK,EAAE,0BAA0B,CA0I/B;IAEF,IAAI,MAAM,IAAI,qBAAqB,CA4BlC;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAgI9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAY/D;CACF"}