@searchspring/snap-controller 0.61.5 → 0.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Autocomplete/AutocompleteController.d.ts.map +1 -1
- package/dist/cjs/Autocomplete/AutocompleteController.js +52 -65
- package/dist/cjs/Finder/FinderController.d.ts.map +1 -1
- package/dist/cjs/Finder/FinderController.js +30 -41
- package/dist/cjs/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/cjs/Recommendation/RecommendationController.js +39 -42
- package/dist/cjs/Search/SearchController.d.ts +0 -1
- package/dist/cjs/Search/SearchController.d.ts.map +1 -1
- package/dist/cjs/Search/SearchController.js +67 -97
- package/dist/esm/Autocomplete/AutocompleteController.d.ts.map +1 -1
- package/dist/esm/Autocomplete/AutocompleteController.js +25 -24
- package/dist/esm/Finder/FinderController.d.ts.map +1 -1
- package/dist/esm/Finder/FinderController.js +12 -13
- package/dist/esm/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/esm/Recommendation/RecommendationController.js +17 -11
- package/dist/esm/Search/SearchController.d.ts +0 -1
- package/dist/esm/Search/SearchController.d.ts.map +1 -1
- package/dist/esm/Search/SearchController.js +15 -26
- package/package.json +10 -10
|
@@ -61,15 +61,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
61
61
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
62
62
|
}
|
|
63
63
|
};
|
|
64
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
65
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
66
|
-
if (ar || !(i in from)) {
|
|
67
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
68
|
-
ar[i] = from[i];
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
72
|
-
};
|
|
73
64
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
74
65
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
75
66
|
};
|
|
@@ -104,7 +95,6 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
104
95
|
var _b, _c, _d, _e, _f;
|
|
105
96
|
var _this = _super.call(this, config, { client: client, store: store, urlManager: urlManager, eventManager: eventManager, profiler: profiler, logger: logger, tracker: tracker }, context) || this;
|
|
106
97
|
_this.type = types_1.ControllerTypes.search;
|
|
107
|
-
_this.previousResults = [];
|
|
108
98
|
_this.track = {
|
|
109
99
|
product: {
|
|
110
100
|
click: function (e, result) {
|
|
@@ -148,39 +138,38 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
148
138
|
},
|
|
149
139
|
};
|
|
150
140
|
_this.search = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
151
|
-
var
|
|
141
|
+
var params_1, err_1, stringyParams, prevStringyParams, searchProfile, meta, response, preventBackfill, dontBackfill, backfillRequests, backfillResponses, backfillResults, afterSearchProfile, err_2, afterStoreProfile, err_3, err_4;
|
|
152
142
|
var _a, _b;
|
|
153
143
|
var _this = this;
|
|
154
|
-
var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m
|
|
155
|
-
return __generator(this, function (
|
|
156
|
-
switch (
|
|
144
|
+
var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
145
|
+
return __generator(this, function (_o) {
|
|
146
|
+
switch (_o.label) {
|
|
157
147
|
case 0:
|
|
148
|
+
_o.trys.push([0, 22, 23, 24]);
|
|
158
149
|
if (!!this.initialized) return [3 /*break*/, 2];
|
|
159
150
|
return [4 /*yield*/, this.init()];
|
|
160
151
|
case 1:
|
|
161
|
-
|
|
162
|
-
|
|
152
|
+
_o.sent();
|
|
153
|
+
_o.label = 2;
|
|
163
154
|
case 2:
|
|
164
|
-
|
|
155
|
+
params_1 = this.params;
|
|
165
156
|
if (((_d = (_c = this.params.search) === null || _c === void 0 ? void 0 : _c.query) === null || _d === void 0 ? void 0 : _d.string) && ((_f = (_e = this.params.search) === null || _e === void 0 ? void 0 : _e.query) === null || _f === void 0 ? void 0 : _f.string.length)) {
|
|
166
157
|
// save it to the history store
|
|
167
158
|
this.store.history.save(this.params.search.query.string);
|
|
168
159
|
}
|
|
169
|
-
|
|
160
|
+
this.store.loading = true;
|
|
161
|
+
_o.label = 3;
|
|
170
162
|
case 3:
|
|
171
|
-
|
|
172
|
-
_p.label = 4;
|
|
173
|
-
case 4:
|
|
174
|
-
_p.trys.push([4, 6, , 7]);
|
|
163
|
+
_o.trys.push([3, 5, , 6]);
|
|
175
164
|
return [4 /*yield*/, this.eventManager.fire('beforeSearch', {
|
|
176
165
|
controller: this,
|
|
177
|
-
request:
|
|
166
|
+
request: params_1,
|
|
178
167
|
})];
|
|
168
|
+
case 4:
|
|
169
|
+
_o.sent();
|
|
170
|
+
return [3 /*break*/, 6];
|
|
179
171
|
case 5:
|
|
180
|
-
|
|
181
|
-
return [3 /*break*/, 7];
|
|
182
|
-
case 6:
|
|
183
|
-
err_1 = _p.sent();
|
|
172
|
+
err_1 = _o.sent();
|
|
184
173
|
if ((err_1 === null || err_1 === void 0 ? void 0 : err_1.message) == 'cancelled') {
|
|
185
174
|
this.log.warn("'beforeSearch' middleware cancelled");
|
|
186
175
|
return [2 /*return*/];
|
|
@@ -189,19 +178,19 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
189
178
|
this.log.error("error in 'beforeSearch' middleware");
|
|
190
179
|
throw err_1;
|
|
191
180
|
}
|
|
192
|
-
return [3 /*break*/,
|
|
193
|
-
case
|
|
194
|
-
stringyParams = JSON.stringify(
|
|
181
|
+
return [3 /*break*/, 6];
|
|
182
|
+
case 6:
|
|
183
|
+
stringyParams = JSON.stringify(params_1);
|
|
195
184
|
prevStringyParams = this.storage.get('lastStringyParams');
|
|
196
185
|
if (stringyParams == prevStringyParams) {
|
|
197
186
|
// no param change - not searching
|
|
198
187
|
return [2 /*return*/];
|
|
199
188
|
}
|
|
200
|
-
searchProfile = this.profiler.create({ type: 'event', name: 'search', context:
|
|
189
|
+
searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params_1 }).start();
|
|
201
190
|
meta = {};
|
|
202
191
|
response = {};
|
|
203
|
-
if (!(((_g = this.config.settings) === null || _g === void 0 ? void 0 : _g.infinite) && ((_h =
|
|
204
|
-
preventBackfill = ((_j = this.config.settings.infinite) === null || _j === void 0 ? void 0 : _j.backfill) && !this.store.results.length &&
|
|
192
|
+
if (!(((_g = this.config.settings) === null || _g === void 0 ? void 0 : _g.infinite) && ((_h = params_1.pagination) === null || _h === void 0 ? void 0 : _h.page) && params_1.pagination.page > 1)) return [3 /*break*/, 11];
|
|
193
|
+
preventBackfill = ((_j = this.config.settings.infinite) === null || _j === void 0 ? void 0 : _j.backfill) && !this.store.results.length && params_1.pagination.page > this.config.settings.infinite.backfill;
|
|
205
194
|
dontBackfill = !((_k = this.config.settings.infinite) === null || _k === void 0 ? void 0 : _k.backfill) && !this.store.results.length;
|
|
206
195
|
// if the page is higher than the backfill setting redirect back to page 1
|
|
207
196
|
if (preventBackfill || dontBackfill) {
|
|
@@ -209,12 +198,12 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
209
198
|
this.urlManager.set('page', 1).go();
|
|
210
199
|
return [2 /*return*/];
|
|
211
200
|
}
|
|
212
|
-
if (!(((_l = this.config.settings) === null || _l === void 0 ? void 0 : _l.infinite.backfill) && !this.
|
|
213
|
-
backfillRequests = Array(
|
|
201
|
+
if (!(((_l = this.config.settings) === null || _l === void 0 ? void 0 : _l.infinite.backfill) && !this.store.loaded)) return [3 /*break*/, 8];
|
|
202
|
+
backfillRequests = Array(params_1.pagination.page)
|
|
214
203
|
.fill('backfill')
|
|
215
204
|
.map(function (v, i) {
|
|
216
205
|
var _a, _b, _c, _d;
|
|
217
|
-
var backfillParams = (0, deepmerge_1.default)(__assign({},
|
|
206
|
+
var backfillParams = (0, deepmerge_1.default)(__assign({}, params_1), { pagination: { page: i + 1 }, search: { redirectResponse: 'full' } });
|
|
218
207
|
// don't include page parameter if on page 1
|
|
219
208
|
if (i + 1 == 1) {
|
|
220
209
|
(_a = backfillParams === null || backfillParams === void 0 ? void 0 : backfillParams.pagination) === null || _a === void 0 ? true : delete _a.page;
|
|
@@ -227,8 +216,8 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
227
216
|
return _this.client.search(backfillParams);
|
|
228
217
|
});
|
|
229
218
|
return [4 /*yield*/, Promise.all(backfillRequests)];
|
|
230
|
-
case
|
|
231
|
-
backfillResponses =
|
|
219
|
+
case 7:
|
|
220
|
+
backfillResponses = _o.sent();
|
|
232
221
|
// backfillResponses are [meta, searchResponse][]
|
|
233
222
|
// set the meta and response to the first page of backfillResponses
|
|
234
223
|
meta = backfillResponses[0][0];
|
|
@@ -239,44 +228,42 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
239
228
|
}, []);
|
|
240
229
|
// overwrite pagination params to expected state
|
|
241
230
|
response.pagination.totalPages = Math.ceil(response.pagination.totalResults / response.pagination.pageSize);
|
|
242
|
-
response.pagination.page = (_m =
|
|
231
|
+
response.pagination.page = (_m = params_1.pagination) === null || _m === void 0 ? void 0 : _m.page;
|
|
243
232
|
// set the response results with results from backfill responses
|
|
244
233
|
response.results = backfillResults;
|
|
245
|
-
return [3 /*break*/,
|
|
246
|
-
case
|
|
247
|
-
case
|
|
234
|
+
return [3 /*break*/, 10];
|
|
235
|
+
case 8: return [4 /*yield*/, this.client.search(params_1)];
|
|
236
|
+
case 9:
|
|
248
237
|
// infinite with no backfills.
|
|
249
|
-
_a =
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
case
|
|
254
|
-
|
|
238
|
+
_a = _o.sent(), meta = _a[0], response = _a[1];
|
|
239
|
+
_o.label = 10;
|
|
240
|
+
case 10: return [3 /*break*/, 13];
|
|
241
|
+
case 11: return [4 /*yield*/, this.client.search(params_1)];
|
|
242
|
+
case 12:
|
|
243
|
+
// normal request for next page
|
|
244
|
+
_b = _o.sent(), meta = _b[0], response = _b[1];
|
|
245
|
+
_o.label = 13;
|
|
255
246
|
case 13:
|
|
256
|
-
// standard request (not using infinite scroll)
|
|
257
|
-
_b = _p.sent(), meta = _b[0], response = _b[1];
|
|
258
|
-
_p.label = 14;
|
|
259
|
-
case 14:
|
|
260
247
|
// MockClient will overwrite the client search() method and use SearchData to return mock data which already contains meta data
|
|
261
248
|
if (!response.meta) {
|
|
262
249
|
response.meta = meta;
|
|
263
250
|
}
|
|
264
251
|
searchProfile.stop();
|
|
265
252
|
this.log.profile(searchProfile);
|
|
266
|
-
afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context:
|
|
267
|
-
|
|
268
|
-
case
|
|
269
|
-
|
|
253
|
+
afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params_1 }).start();
|
|
254
|
+
_o.label = 14;
|
|
255
|
+
case 14:
|
|
256
|
+
_o.trys.push([14, 16, , 17]);
|
|
270
257
|
return [4 /*yield*/, this.eventManager.fire('afterSearch', {
|
|
271
258
|
controller: this,
|
|
272
|
-
request:
|
|
259
|
+
request: params_1,
|
|
273
260
|
response: response,
|
|
274
261
|
})];
|
|
262
|
+
case 15:
|
|
263
|
+
_o.sent();
|
|
264
|
+
return [3 /*break*/, 17];
|
|
275
265
|
case 16:
|
|
276
|
-
|
|
277
|
-
return [3 /*break*/, 18];
|
|
278
|
-
case 17:
|
|
279
|
-
err_2 = _p.sent();
|
|
266
|
+
err_2 = _o.sent();
|
|
280
267
|
if ((err_2 === null || err_2 === void 0 ? void 0 : err_2.message) == 'cancelled') {
|
|
281
268
|
this.log.warn("'afterSearch' middleware cancelled");
|
|
282
269
|
afterSearchProfile.stop();
|
|
@@ -286,30 +273,26 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
286
273
|
this.log.error("error in 'afterSearch' middleware");
|
|
287
274
|
throw err_2;
|
|
288
275
|
}
|
|
289
|
-
return [3 /*break*/,
|
|
290
|
-
case
|
|
276
|
+
return [3 /*break*/, 17];
|
|
277
|
+
case 17:
|
|
291
278
|
afterSearchProfile.stop();
|
|
292
279
|
this.log.profile(afterSearchProfile);
|
|
293
|
-
// store previous results for infinite usage
|
|
294
|
-
if ((_o = this.config.settings) === null || _o === void 0 ? void 0 : _o.infinite) {
|
|
295
|
-
this.previousResults = JSON.parse(JSON.stringify(response.results));
|
|
296
|
-
}
|
|
297
280
|
// update the store
|
|
298
281
|
this.store.update(response);
|
|
299
|
-
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context:
|
|
300
|
-
|
|
301
|
-
case
|
|
302
|
-
|
|
282
|
+
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params_1 }).start();
|
|
283
|
+
_o.label = 18;
|
|
284
|
+
case 18:
|
|
285
|
+
_o.trys.push([18, 20, , 21]);
|
|
303
286
|
return [4 /*yield*/, this.eventManager.fire('afterStore', {
|
|
304
287
|
controller: this,
|
|
305
|
-
request:
|
|
288
|
+
request: params_1,
|
|
306
289
|
response: response,
|
|
307
290
|
})];
|
|
291
|
+
case 19:
|
|
292
|
+
_o.sent();
|
|
293
|
+
return [3 /*break*/, 21];
|
|
308
294
|
case 20:
|
|
309
|
-
|
|
310
|
-
return [3 /*break*/, 22];
|
|
311
|
-
case 21:
|
|
312
|
-
err_3 = _p.sent();
|
|
295
|
+
err_3 = _o.sent();
|
|
313
296
|
if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
|
|
314
297
|
this.log.warn("'afterStore' middleware cancelled");
|
|
315
298
|
afterStoreProfile.stop();
|
|
@@ -319,13 +302,13 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
319
302
|
this.log.error("error in 'afterStore' middleware");
|
|
320
303
|
throw err_3;
|
|
321
304
|
}
|
|
322
|
-
return [3 /*break*/,
|
|
323
|
-
case
|
|
305
|
+
return [3 /*break*/, 21];
|
|
306
|
+
case 21:
|
|
324
307
|
afterStoreProfile.stop();
|
|
325
308
|
this.log.profile(afterStoreProfile);
|
|
326
309
|
return [3 /*break*/, 24];
|
|
327
|
-
case
|
|
328
|
-
err_4 =
|
|
310
|
+
case 22:
|
|
311
|
+
err_4 = _o.sent();
|
|
329
312
|
if (err_4) {
|
|
330
313
|
if (err_4.err && err_4.fetchDetails) {
|
|
331
314
|
switch (err_4.fetchDetails.status) {
|
|
@@ -364,9 +347,11 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
364
347
|
this.log.error(err_4);
|
|
365
348
|
this.handleError(err_4);
|
|
366
349
|
}
|
|
367
|
-
this.store.loading = false;
|
|
368
350
|
}
|
|
369
351
|
return [3 /*break*/, 24];
|
|
352
|
+
case 23:
|
|
353
|
+
this.store.loading = false;
|
|
354
|
+
return [7 /*endfinally*/];
|
|
370
355
|
case 24: return [2 /*return*/];
|
|
371
356
|
}
|
|
372
357
|
});
|
|
@@ -384,19 +369,6 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
384
369
|
});
|
|
385
370
|
// set last params to undefined for compare in search
|
|
386
371
|
_this.storage.set('lastStringyParams', undefined);
|
|
387
|
-
// add 'beforeSearch' middleware
|
|
388
|
-
_this.eventManager.on('beforeSearch', function (search, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
389
|
-
return __generator(this, function (_a) {
|
|
390
|
-
switch (_a.label) {
|
|
391
|
-
case 0:
|
|
392
|
-
search.controller.store.loading = true;
|
|
393
|
-
return [4 /*yield*/, next()];
|
|
394
|
-
case 1:
|
|
395
|
-
_a.sent();
|
|
396
|
-
return [2 /*return*/];
|
|
397
|
-
}
|
|
398
|
-
});
|
|
399
|
-
}); });
|
|
400
372
|
// add 'afterSearch' middleware
|
|
401
373
|
_this.eventManager.on('afterSearch', function (search, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
402
374
|
var config, redirectURL, searchStore, nonBackgroundFilters;
|
|
@@ -415,8 +387,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
415
387
|
if (((_k = (_j = config === null || config === void 0 ? void 0 : config.settings) === null || _j === void 0 ? void 0 : _j.redirects) === null || _k === void 0 ? void 0 : _k.singleResult) &&
|
|
416
388
|
((_m = (_l = search === null || search === void 0 ? void 0 : search.response) === null || _l === void 0 ? void 0 : _l.search) === null || _m === void 0 ? void 0 : _m.query) &&
|
|
417
389
|
((_p = (_o = search === null || search === void 0 ? void 0 : search.response) === null || _o === void 0 ? void 0 : _o.pagination) === null || _p === void 0 ? void 0 : _p.totalResults) === 1 &&
|
|
418
|
-
!(nonBackgroundFilters === null || nonBackgroundFilters === void 0 ? void 0 : nonBackgroundFilters.length)
|
|
419
|
-
!search.controller.previousResults.length) {
|
|
390
|
+
!(nonBackgroundFilters === null || nonBackgroundFilters === void 0 ? void 0 : nonBackgroundFilters.length)) {
|
|
420
391
|
window.location.replace(search === null || search === void 0 ? void 0 : search.response.results[0].mappings.core.url);
|
|
421
392
|
return [2 /*return*/, false];
|
|
422
393
|
}
|
|
@@ -447,7 +418,6 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
447
418
|
return [4 /*yield*/, this.eventManager.fire('restorePosition', { controller: this, element: elementPosition })];
|
|
448
419
|
case 2:
|
|
449
420
|
_a.sent();
|
|
450
|
-
search.controller.store.loading = false;
|
|
451
421
|
return [2 /*return*/];
|
|
452
422
|
}
|
|
453
423
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAa,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,
|
|
1
|
+
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAa,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,EAAiC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAElI,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAG1E,eAAO,MAAM,WAAW,MAAM,CAAC;AA+B/B,KAAK,wBAAwB,GAAG;IAC/B,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;KAC5C,CAAC;CACF,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,kBAAkB;IACtD,IAAI,kBAAgC;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,YAAY,CAAC;gBAG5B,MAAM,EAAE,4BAA4B,EACpC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IAwD3B,KAAK,EAAE,wBAAwB,CAO7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CA0CrC;IAEK,UAAU,CAAC,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BhE,KAAK,IAAI,IAAI;IASb,QAAQ;;0BAEc,aAAa,KAAG,QAAQ,OAAO,GAAG,SAAS,CAAC;wBAkDpD,aAAa,KAAG,IAAI;uBAMrB,UAAU,KAAG,IAAI;4BAQN,MAAM,SAAS,CAAC,gBAAgB,CAAC,KAAG,QAAQ,IAAI,CAAC;mCAgDhD,MAAM,WAAW,CAAC,gBAAgB,CAAC,KAAG,IAAI;uBAqBtD,KAAK;;;;uBAyDL,UAAU,KAAG,IAAI;;MAS5B;IAEF,MAAM,IAAI,IAAI;IAgBR,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgF3B,cAAc,QAAa,QAAQ,IAAI,CAAC,CAwBtC;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CA0I9B;CACF"}
|
|
@@ -27,6 +27,10 @@ const defaultConfig = {
|
|
|
27
27
|
merchandising: true,
|
|
28
28
|
singleResult: false,
|
|
29
29
|
},
|
|
30
|
+
bind: {
|
|
31
|
+
input: true,
|
|
32
|
+
submit: true,
|
|
33
|
+
},
|
|
30
34
|
},
|
|
31
35
|
};
|
|
32
36
|
export class AutocompleteController extends AbstractController {
|
|
@@ -176,6 +180,8 @@ export class AutocompleteController extends AbstractController {
|
|
|
176
180
|
return;
|
|
177
181
|
}
|
|
178
182
|
this.store.state.input = value;
|
|
183
|
+
// remove merch redirect to prevent race condition
|
|
184
|
+
this.store.merchandising.redirect = '';
|
|
179
185
|
if (this.config?.settings?.syncInputs) {
|
|
180
186
|
const inputs = document.querySelectorAll(this.config.selector);
|
|
181
187
|
inputs.forEach((input) => {
|
|
@@ -247,16 +253,20 @@ export class AutocompleteController extends AbstractController {
|
|
|
247
253
|
this.store.updateTrendingTerms(terms);
|
|
248
254
|
};
|
|
249
255
|
this.search = async () => {
|
|
250
|
-
// if urlManager has no query, there will be no need to get params and no query
|
|
251
|
-
if (!this.urlManager.state.query) {
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
const params = this.params;
|
|
255
|
-
// if params have no query do not search
|
|
256
|
-
if (!params?.search?.query?.string) {
|
|
257
|
-
return;
|
|
258
|
-
}
|
|
259
256
|
try {
|
|
257
|
+
if (!this.initialized) {
|
|
258
|
+
await this.init();
|
|
259
|
+
}
|
|
260
|
+
// if urlManager has no query, there will be no need to get params and no query
|
|
261
|
+
if (!this.urlManager.state.query) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
const params = this.params;
|
|
265
|
+
// if params have no query do not search
|
|
266
|
+
if (!params?.search?.query?.string) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
this.store.loading = true;
|
|
260
270
|
try {
|
|
261
271
|
await this.eventManager.fire('beforeSearch', {
|
|
262
272
|
controller: this,
|
|
@@ -366,9 +376,11 @@ export class AutocompleteController extends AbstractController {
|
|
|
366
376
|
this.log.error(err);
|
|
367
377
|
this.handleError(err);
|
|
368
378
|
}
|
|
369
|
-
this.store.loading = false;
|
|
370
379
|
}
|
|
371
380
|
}
|
|
381
|
+
finally {
|
|
382
|
+
this.store.loading = false;
|
|
383
|
+
}
|
|
372
384
|
};
|
|
373
385
|
// deep merge config with defaults
|
|
374
386
|
this.config = deepmerge(defaultConfig, this.config);
|
|
@@ -385,25 +397,14 @@ export class AutocompleteController extends AbstractController {
|
|
|
385
397
|
type: 'session',
|
|
386
398
|
key: `ss-controller-${this.config.id}`,
|
|
387
399
|
});
|
|
388
|
-
// add 'beforeSearch' middleware
|
|
389
|
-
this.eventManager.on('beforeSearch', async (ac, next) => {
|
|
390
|
-
ac.controller.store.loading = true;
|
|
391
|
-
await next();
|
|
392
|
-
});
|
|
393
400
|
// add 'afterSearch' middleware
|
|
394
401
|
this.eventManager.on('afterSearch', async (ac, next) => {
|
|
395
402
|
await next();
|
|
396
403
|
// cancel search if no input or query doesn't match current urlState
|
|
397
404
|
if (ac.response.autocomplete.query != ac.controller.urlManager.state.query) {
|
|
398
|
-
ac.controller.store.loading = false;
|
|
399
405
|
return false;
|
|
400
406
|
}
|
|
401
407
|
});
|
|
402
|
-
// add 'afterStore' middleware
|
|
403
|
-
this.eventManager.on('afterStore', async (ac, next) => {
|
|
404
|
-
await next();
|
|
405
|
-
ac.controller.store.loading = false;
|
|
406
|
-
});
|
|
407
408
|
this.eventManager.on('beforeSubmit', async (ac, next) => {
|
|
408
409
|
await next();
|
|
409
410
|
const redirectURL = ac.controller.store.merchandising?.redirect;
|
|
@@ -521,7 +522,7 @@ export class AutocompleteController extends AbstractController {
|
|
|
521
522
|
input.setAttribute('autocorrect', 'off');
|
|
522
523
|
input.setAttribute('autocapitalize', 'none');
|
|
523
524
|
input.setAttribute(INPUT_ATTRIBUTE, '');
|
|
524
|
-
input.addEventListener('input', this.handlers.input.input);
|
|
525
|
+
this.config.settings?.bind?.input && input.addEventListener('input', this.handlers.input.input);
|
|
525
526
|
if (this.config?.settings?.initializeFromUrl && !input.value && this.store.state.input) {
|
|
526
527
|
input.value = this.store.state.input;
|
|
527
528
|
}
|
|
@@ -530,11 +531,11 @@ export class AutocompleteController extends AbstractController {
|
|
|
530
531
|
const form = input.form;
|
|
531
532
|
let formActionUrl;
|
|
532
533
|
if (this.config.action) {
|
|
533
|
-
input.addEventListener('keydown', this.handlers.input.enterKey);
|
|
534
|
+
this.config.settings?.bind?.submit && input.addEventListener('keydown', this.handlers.input.enterKey);
|
|
534
535
|
formActionUrl = this.config.action;
|
|
535
536
|
}
|
|
536
537
|
else if (form) {
|
|
537
|
-
form.addEventListener('submit', this.handlers.input.formSubmit);
|
|
538
|
+
this.config.settings?.bind?.submit && form.addEventListener('submit', this.handlers.input.formSubmit);
|
|
538
539
|
formActionUrl = form.action || '';
|
|
539
540
|
// serializeForm will include additional form element in our urlManager as globals
|
|
540
541
|
if (this.config.settings?.serializeForm) {
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"FinderController.d.ts","sourceRoot":"","sources":["../../../src/Finder/FinderController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,sBAAsB,EAAkB,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiB7G,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;gBAGtC,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA+B3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+BhC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAkB5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAoI9B;CACF"}
|
|
@@ -46,14 +46,15 @@ export class FinderController extends AbstractController {
|
|
|
46
46
|
this.store.setService('urlManager', this.urlManager);
|
|
47
47
|
};
|
|
48
48
|
this.search = async () => {
|
|
49
|
-
if (!this.initialized) {
|
|
50
|
-
await this.init();
|
|
51
|
-
}
|
|
52
|
-
if (this.store.state.persisted) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
const params = this.params;
|
|
56
49
|
try {
|
|
50
|
+
if (!this.initialized) {
|
|
51
|
+
await this.init();
|
|
52
|
+
}
|
|
53
|
+
if (this.store.state.persisted) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const params = this.params;
|
|
57
|
+
this.store.loading = true;
|
|
57
58
|
try {
|
|
58
59
|
await this.eventManager.fire('beforeSearch', {
|
|
59
60
|
controller: this,
|
|
@@ -164,9 +165,11 @@ export class FinderController extends AbstractController {
|
|
|
164
165
|
this.log.error(err);
|
|
165
166
|
this.handleError(err);
|
|
166
167
|
}
|
|
167
|
-
this.store.loading = false;
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
|
+
finally {
|
|
171
|
+
this.store.loading = false;
|
|
172
|
+
}
|
|
170
173
|
};
|
|
171
174
|
// deep merge config with defaults
|
|
172
175
|
this.config = deepmerge(defaultConfig, this.config);
|
|
@@ -180,11 +183,7 @@ export class FinderController extends AbstractController {
|
|
|
180
183
|
};
|
|
181
184
|
});
|
|
182
185
|
}
|
|
183
|
-
this
|
|
184
|
-
finder.controller.store.loading = true;
|
|
185
|
-
await next();
|
|
186
|
-
});
|
|
187
|
-
// TODO: move this to afterStore
|
|
186
|
+
// TODO: remove this aftersearch when store interface changes
|
|
188
187
|
this.eventManager.on('afterSearch', async (finder, next) => {
|
|
189
188
|
await next();
|
|
190
189
|
finder.controller.store.loading = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,8BAA8B,
|
|
1
|
+
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,8BAA8B,EAAiB,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEpH,KAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACnE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACrD,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACzD,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QAChE,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;KAC5D,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;IAC1E,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;CACzD,CAAC;AAUF,qBAAa,wBAAyB,SAAQ,kBAAkB;IACxD,IAAI,kBAAkC;IACrC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,8BAA8B,CAAC;IAE/C,MAAM,EAAE;QACP,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,UAAU,CAAC,EAAE,WAAW,CAAC;QACzB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,UAAU,CAAC,EAAE,WAAW,CAAC;YAAC,MAAM,CAAC,EAAE,WAAW,CAAA;SAAE,CAAC,CAAC;KAC7E,CAKC;gBAGD,MAAM,EAAE,8BAA8B,EACtC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA4C3B,KAAK,EAAE,0BAA0B,CAwS5B;IAEL,IAAI,MAAM,IAAI,qBAAqB,CA2BlC;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CA0H9B;CACF"}
|
|
@@ -311,11 +311,12 @@ export class RecommendationController extends AbstractController {
|
|
|
311
311
|
};
|
|
312
312
|
})();
|
|
313
313
|
this.search = async () => {
|
|
314
|
-
if (!this.initialized) {
|
|
315
|
-
await this.init();
|
|
316
|
-
}
|
|
317
|
-
const params = this.params;
|
|
318
314
|
try {
|
|
315
|
+
if (!this.initialized) {
|
|
316
|
+
await this.init();
|
|
317
|
+
}
|
|
318
|
+
const params = this.params;
|
|
319
|
+
this.store.loading = true;
|
|
319
320
|
try {
|
|
320
321
|
await this.eventManager.fire('beforeSearch', {
|
|
321
322
|
controller: this,
|
|
@@ -420,21 +421,27 @@ export class RecommendationController extends AbstractController {
|
|
|
420
421
|
this.log.error(err);
|
|
421
422
|
this.handleError(err);
|
|
422
423
|
}
|
|
423
|
-
this.store.loading = false;
|
|
424
424
|
}
|
|
425
425
|
}
|
|
426
|
+
finally {
|
|
427
|
+
this.store.loading = false;
|
|
428
|
+
}
|
|
426
429
|
};
|
|
427
430
|
if (!config.tag) {
|
|
428
431
|
throw new Error(`Invalid config passed to RecommendationController. The "tag" attribute is required.`);
|
|
429
432
|
}
|
|
433
|
+
// attach to bfCache restore event and re-run search on the controller
|
|
434
|
+
// enabled by default
|
|
435
|
+
if (config.settings?.searchOnPageShow !== false) {
|
|
436
|
+
window.addEventListener('pageshow', (e) => {
|
|
437
|
+
if (e.persisted && !this.store.error && this.store.loaded && !this.store.loading) {
|
|
438
|
+
this.search();
|
|
439
|
+
}
|
|
440
|
+
});
|
|
441
|
+
}
|
|
430
442
|
// deep merge config with defaults
|
|
431
443
|
this.config = deepmerge(defaultConfig, this.config);
|
|
432
444
|
this.store.setConfig(this.config);
|
|
433
|
-
// add 'beforeSearch' middleware
|
|
434
|
-
this.eventManager.on('beforeSearch', async (recommend, next) => {
|
|
435
|
-
recommend.controller.store.loading = true;
|
|
436
|
-
await next();
|
|
437
|
-
});
|
|
438
445
|
// add 'afterStore' middleware
|
|
439
446
|
this.eventManager.on('afterStore', async (recommend, next) => {
|
|
440
447
|
await next();
|
|
@@ -449,7 +456,6 @@ export class RecommendationController extends AbstractController {
|
|
|
449
456
|
this.track.product.removedFromBundle(item);
|
|
450
457
|
});
|
|
451
458
|
});
|
|
452
|
-
recommend.controller.store.loading = false;
|
|
453
459
|
});
|
|
454
460
|
// attach config plugins and event middleware
|
|
455
461
|
this.use(this.config);
|
|
@@ -15,7 +15,6 @@ export declare class SearchController extends AbstractController {
|
|
|
15
15
|
store: SearchStore;
|
|
16
16
|
config: SearchControllerConfig;
|
|
17
17
|
storage: StorageStore;
|
|
18
|
-
private previousResults;
|
|
19
18
|
constructor(config: SearchControllerConfig, { client, store, urlManager, eventManager, profiler, logger, tracker }: ControllerServices, context?: ContextVariables);
|
|
20
19
|
track: SearchTrackMethods;
|
|
21
20
|
get params(): SearchRequestModel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAa,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACX,sBAAsB,
|
|
1
|
+
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAa,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACX,sBAAsB,EAGtB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,EAKlB,MAAM,2BAA2B,CAAC;AAmBnC,KAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KAC/D,CAAC;CACF,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;IACvC,OAAO,EAAE,YAAY,CAAC;gBAGrB,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IAsJ3B,KAAK,EAAE,kBAAkB,CA+CvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAiD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CA2M9B;CACF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAiBxF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,GAAG,SAAS,CAgCvG"}
|