@searchspring/snap-controller 0.27.3 → 0.27.6
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/Abstract/AbstractController.d.ts +5 -4
- package/dist/cjs/Abstract/AbstractController.d.ts.map +1 -1
- package/dist/cjs/Autocomplete/AutocompleteController.d.ts +6 -5
- package/dist/cjs/Autocomplete/AutocompleteController.d.ts.map +1 -1
- package/dist/cjs/Autocomplete/AutocompleteController.js +18 -14
- package/dist/cjs/Finder/FinderController.d.ts.map +1 -1
- package/dist/cjs/Finder/FinderController.js +4 -1
- package/dist/cjs/Recommendation/RecommendationController.d.ts +26 -12
- package/dist/cjs/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/cjs/Recommendation/RecommendationController.js +10 -10
- package/dist/cjs/Search/SearchController.d.ts +1 -1
- package/dist/cjs/Search/SearchController.d.ts.map +1 -1
- package/dist/cjs/Search/SearchController.js +39 -36
- package/dist/cjs/types.d.ts +3 -3
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/utils/getParams.d.ts +2 -1
- package/dist/cjs/utils/getParams.d.ts.map +1 -1
- package/dist/cjs/utils/getParams.js +0 -1
- package/dist/esm/Abstract/AbstractController.d.ts +5 -4
- package/dist/esm/Abstract/AbstractController.d.ts.map +1 -1
- package/dist/esm/Autocomplete/AutocompleteController.d.ts +6 -5
- package/dist/esm/Autocomplete/AutocompleteController.d.ts.map +1 -1
- package/dist/esm/Autocomplete/AutocompleteController.js +10 -7
- package/dist/esm/Finder/FinderController.d.ts.map +1 -1
- package/dist/esm/Finder/FinderController.js +4 -1
- package/dist/esm/Recommendation/RecommendationController.d.ts +26 -12
- package/dist/esm/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/esm/Recommendation/RecommendationController.js +10 -10
- package/dist/esm/Search/SearchController.d.ts +1 -1
- package/dist/esm/Search/SearchController.d.ts.map +1 -1
- package/dist/esm/Search/SearchController.js +8 -5
- package/dist/esm/types.d.ts +3 -3
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/utils/getParams.d.ts +2 -1
- package/dist/esm/utils/getParams.d.ts.map +1 -1
- package/dist/esm/utils/getParams.js +0 -1
- package/package.json +10 -10
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { LogMode } from '@searchspring/snap-logger';
|
|
2
2
|
import { DomTargeter } from '@searchspring/snap-toolbox';
|
|
3
|
+
import type { Client } from '@searchspring/snap-client';
|
|
3
4
|
import type { AbstractStore } from '@searchspring/snap-store-mobx';
|
|
4
5
|
import type { UrlManager } from '@searchspring/snap-url-manager';
|
|
5
6
|
import type { EventManager, Middleware } from '@searchspring/snap-event-manager';
|
|
@@ -12,7 +13,7 @@ export declare abstract class AbstractController {
|
|
|
12
13
|
id: string;
|
|
13
14
|
type: string;
|
|
14
15
|
config: ControllerConfig;
|
|
15
|
-
client:
|
|
16
|
+
client: Client;
|
|
16
17
|
store: AbstractStore;
|
|
17
18
|
urlManager: UrlManager;
|
|
18
19
|
eventManager: EventManager;
|
|
@@ -27,14 +28,14 @@ export declare abstract class AbstractController {
|
|
|
27
28
|
private _environment;
|
|
28
29
|
get initialized(): boolean;
|
|
29
30
|
constructor(config: ControllerConfig, { client, store, urlManager, eventManager, profiler, logger, tracker }: ControllerServices, context?: ContextVariables);
|
|
30
|
-
createTargeter(target: Target, onTarget: OnTarget, document?: Document): DomTargeter;
|
|
31
|
-
addTargeter(target: DomTargeter): DomTargeter;
|
|
31
|
+
createTargeter(target: Target, onTarget: OnTarget, document?: Document): DomTargeter | undefined;
|
|
32
|
+
addTargeter(target: DomTargeter): DomTargeter | undefined;
|
|
32
33
|
set environment(env: LogMode);
|
|
33
34
|
get environment(): LogMode;
|
|
34
35
|
init(): Promise<void>;
|
|
35
36
|
retarget(): void;
|
|
36
37
|
abstract search(): Promise<void>;
|
|
37
|
-
plugin(func: (cntrlr: AbstractController, ...args: any
|
|
38
|
+
plugin(func: (cntrlr: AbstractController, ...args: any) => Promise<void>, ...args: unknown[]): Promise<void>;
|
|
38
39
|
on<T>(event: string, ...func: Middleware<T>[]): void;
|
|
39
40
|
use(attachments: Attachments): void;
|
|
40
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractController.d.ts","sourceRoot":"","sources":["../../../src/Abstract/AbstractController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAgB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"AbstractController.d.ts","sourceRoot":"","sources":["../../../src/Abstract/AbstractController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAgB,MAAM,4BAA4B,CAAC;AAEvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGpG,8BAAsB,kBAAkB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,SAAc;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,gBAAgB,CAAC;IAE1B,SAAS,EAAE;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;KAC3B,CAAM;IAEP,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAsB;IAE1C,IAAI,WAAW,IAAI,OAAO,CAEzB;gBAGA,MAAM,EAAE,gBAAgB,EACxB,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,GAAE,gBAAqB;IA2ExB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS;IAIhG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS;IAShE,IAAW,WAAW,CAAC,GAAG,EAAE,OAAO,EAKlC;IAED,IAAW,WAAW,IAAI,OAAO,CAEhC;IAEY,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA+C3B,QAAQ,IAAI,IAAI;aAMP,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAE1B,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlH,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAIpD,GAAG,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;CAoC1C"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import { StorageStore } from '@searchspring/snap-store-mobx';
|
|
2
3
|
import { AbstractController } from '../Abstract/AbstractController';
|
|
3
4
|
import { ControllerTypes } from '../types';
|
|
4
|
-
import
|
|
5
|
+
import { AutocompleteStore } from '@searchspring/snap-store-mobx';
|
|
5
6
|
import type { AutocompleteControllerConfig, ControllerServices, ContextVariables } from '../types';
|
|
6
7
|
import type { AutocompleteRequestModel } from '@searchspring/snapi-types';
|
|
7
8
|
export declare const INPUT_DELAY = 200;
|
|
8
9
|
declare type AutocompleteTrackMethods = {
|
|
9
10
|
product: {
|
|
10
|
-
click: (e:
|
|
11
|
+
click: (e: MouseEvent, result: any) => void;
|
|
11
12
|
};
|
|
12
13
|
};
|
|
13
14
|
export declare class AutocompleteController extends AbstractController {
|
|
@@ -22,12 +23,12 @@ export declare class AutocompleteController extends AbstractController {
|
|
|
22
23
|
reset(): void;
|
|
23
24
|
handlers: {
|
|
24
25
|
input: {
|
|
25
|
-
enterKey: (e: KeyboardEvent) => Promise<boolean>;
|
|
26
|
+
enterKey: (e: KeyboardEvent) => Promise<boolean | undefined>;
|
|
26
27
|
escKey: (e: KeyboardEvent) => void;
|
|
27
28
|
focus: (e: FocusEvent) => void;
|
|
28
|
-
formSubmit: (e:
|
|
29
|
+
formSubmit: (e: React.FormEvent<HTMLInputElement>) => Promise<void>;
|
|
29
30
|
keyUp: (e: KeyboardEvent) => void;
|
|
30
|
-
timeoutDelay:
|
|
31
|
+
timeoutDelay: NodeJS.Timeout;
|
|
31
32
|
};
|
|
32
33
|
document: {
|
|
33
34
|
click: (e: MouseEvent) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,
|
|
1
|
+
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EACX,4BAA4B,EAI5B,kBAAkB,EAElB,gBAAgB,EAChB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAG1E,eAAO,MAAM,WAAW,MAAM,CAAC;AAoB/B,aAAK,wBAAwB,GAAG;IAC/B,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;KAC5C,CAAC;CACF,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,kBAAkB;IACtD,IAAI,kBAAgC;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,YAAY,CAAC;gBAG5B,MAAM,EAAE,4BAA4B,EACpC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IAoD3B,KAAK,EAAE,wBAAwB,CAO7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CA+BrC;IAEK,UAAU,CAAC,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsChE,KAAK,IAAI,IAAI;IASb,QAAQ;;0BAEc,aAAa,KAAG,QAAQ,OAAO,GAAG,SAAS,CAAC;wBA6CpD,aAAa,KAAG,IAAI;uBAMrB,UAAU,KAAG,IAAI;4BAQN,MAAM,SAAS,CAAC,gBAAgB,CAAC,KAAG,QAAQ,IAAI,CAAC;uBAwC5D,aAAa,KAAG,IAAI;;;;uBA8CpB,UAAU,KAAG,IAAI;;MAS5B;IAEF,MAAM,IAAI,IAAI;IAYR,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2D3B,cAAc,QAAa,QAAQ,IAAI,CAAC,CAsBtC;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAgH9B;CACF"}
|
|
@@ -135,11 +135,11 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
135
135
|
// use corrected query and originalQuery
|
|
136
136
|
if (this.store.search.originalQuery) {
|
|
137
137
|
input.value = this.store.search.query.string;
|
|
138
|
-
actionUrl = actionUrl.set(PARAM_ORIGINAL_QUERY, this.store.search.originalQuery.string);
|
|
138
|
+
actionUrl = actionUrl === null || actionUrl === void 0 ? void 0 : actionUrl.set(PARAM_ORIGINAL_QUERY, this.store.search.originalQuery.string);
|
|
139
139
|
}
|
|
140
140
|
_d.label = 5;
|
|
141
141
|
case 5:
|
|
142
|
-
actionUrl = actionUrl.set('query', input.value);
|
|
142
|
+
actionUrl = actionUrl === null || actionUrl === void 0 ? void 0 : actionUrl.set('query', input.value);
|
|
143
143
|
_d.label = 6;
|
|
144
144
|
case 6:
|
|
145
145
|
_d.trys.push([6, 8, , 9]);
|
|
@@ -162,7 +162,7 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
162
162
|
}
|
|
163
163
|
return [3 /*break*/, 9];
|
|
164
164
|
case 9:
|
|
165
|
-
window.location.href = actionUrl.href;
|
|
165
|
+
window.location.href = (actionUrl === null || actionUrl === void 0 ? void 0 : actionUrl.href) || '';
|
|
166
166
|
_d.label = 10;
|
|
167
167
|
case 10: return [2 /*return*/];
|
|
168
168
|
}
|
|
@@ -238,7 +238,7 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
238
238
|
});
|
|
239
239
|
}); },
|
|
240
240
|
keyUp: function (e) {
|
|
241
|
-
var _a, _b, _c;
|
|
241
|
+
var _a, _b, _c, _d, _e;
|
|
242
242
|
// ignore enter and escape keys
|
|
243
243
|
if ((e === null || e === void 0 ? void 0 : e.keyCode) == KEY_ENTER || (e === null || e === void 0 ? void 0 : e.keyCode) == KEY_ESCAPE)
|
|
244
244
|
return;
|
|
@@ -252,7 +252,7 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
252
252
|
return;
|
|
253
253
|
}
|
|
254
254
|
_this.store.state.input = value;
|
|
255
|
-
if (_this.config.settings.syncInputs) {
|
|
255
|
+
if ((_b = (_a = _this.config) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b.syncInputs) {
|
|
256
256
|
var inputs = document.querySelectorAll(_this.config.selector);
|
|
257
257
|
inputs.forEach(function (input) {
|
|
258
258
|
input.value = value;
|
|
@@ -263,7 +263,7 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
263
263
|
// TODO cancel any current requests?
|
|
264
264
|
_this.store.reset();
|
|
265
265
|
_this.urlManager.reset().go();
|
|
266
|
-
if (((
|
|
266
|
+
if (((_c = _this.store.trending) === null || _c === void 0 ? void 0 : _c.length) && ((_e = (_d = _this.config.settings) === null || _d === void 0 ? void 0 : _d.trending) === null || _e === void 0 ? void 0 : _e.showResults)) {
|
|
267
267
|
_this.store.trending[0].preview();
|
|
268
268
|
}
|
|
269
269
|
}
|
|
@@ -357,11 +357,13 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
357
357
|
return [4 /*yield*/, this.client.autocomplete(params)];
|
|
358
358
|
case 6:
|
|
359
359
|
_a = _d.sent(), meta = _a[0], response = _a[1];
|
|
360
|
+
// @ts-ignore
|
|
360
361
|
if (!response.meta) {
|
|
361
362
|
/**
|
|
362
363
|
* MockClient will overwrite the client search() method and use
|
|
363
364
|
* SearchData to return mock data which already contains meta data
|
|
364
365
|
*/
|
|
366
|
+
// @ts-ignore
|
|
365
367
|
response.meta = meta;
|
|
366
368
|
}
|
|
367
369
|
searchProfile.stop();
|
|
@@ -394,6 +396,7 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
394
396
|
afterSearchProfile.stop();
|
|
395
397
|
this.log.profile(afterSearchProfile);
|
|
396
398
|
// update the store
|
|
399
|
+
// @ts-ignore
|
|
397
400
|
this.store.update(response);
|
|
398
401
|
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
399
402
|
_d.label = 11;
|
|
@@ -459,7 +462,7 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
459
462
|
_this.store.setConfig(_this.config);
|
|
460
463
|
// get current search from url before detaching
|
|
461
464
|
if (_this.config.settings.initializeFromUrl) {
|
|
462
|
-
_this.store.state.input = _this.urlManager.state.query;
|
|
465
|
+
_this.store.state.input = _this.urlManager.state.query || '';
|
|
463
466
|
// reset to force search on focus
|
|
464
467
|
// TODO: make a config setting for this
|
|
465
468
|
_this.urlManager.reset().go();
|
|
@@ -623,27 +626,28 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
623
626
|
document.removeEventListener('click', this.handlers.document.click);
|
|
624
627
|
};
|
|
625
628
|
AutocompleteController.prototype.bind = function () {
|
|
626
|
-
var _a, _b, _c;
|
|
629
|
+
var _a, _b, _c, _d, _e;
|
|
627
630
|
return __awaiter(this, void 0, void 0, function () {
|
|
628
631
|
var inputs;
|
|
629
632
|
var _this = this;
|
|
630
|
-
return __generator(this, function (
|
|
631
|
-
switch (
|
|
633
|
+
return __generator(this, function (_f) {
|
|
634
|
+
switch (_f.label) {
|
|
632
635
|
case 0:
|
|
633
636
|
if (!!this.initialized) return [3 /*break*/, 2];
|
|
634
637
|
return [4 /*yield*/, this.init()];
|
|
635
638
|
case 1:
|
|
636
|
-
|
|
637
|
-
|
|
639
|
+
_f.sent();
|
|
640
|
+
_f.label = 2;
|
|
638
641
|
case 2:
|
|
639
642
|
this.unbind();
|
|
640
643
|
inputs = document.querySelectorAll(this.config.selector);
|
|
641
644
|
inputs.forEach(function (input) {
|
|
645
|
+
var _a, _b;
|
|
642
646
|
input.setAttribute('spellcheck', 'false');
|
|
643
647
|
input.setAttribute('autocomplete', 'off');
|
|
644
648
|
input.setAttribute(INPUT_ATTRIBUTE, '');
|
|
645
649
|
input.addEventListener('keyup', _this.handlers.input.keyUp);
|
|
646
|
-
if (_this.config.settings.initializeFromUrl && !input.value && _this.store.state.input) {
|
|
650
|
+
if (((_b = (_a = _this.config) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b.initializeFromUrl) && !input.value && _this.store.state.input) {
|
|
647
651
|
input.value = _this.store.state.input;
|
|
648
652
|
}
|
|
649
653
|
input.addEventListener('focus', _this.handlers.input.focus);
|
|
@@ -668,7 +672,7 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
668
672
|
_this.setFocused(input);
|
|
669
673
|
}
|
|
670
674
|
});
|
|
671
|
-
if (((_b = (_a = this.config.settings) === null || _a === void 0 ? void 0 : _a.trending) === null || _b === void 0 ? void 0 : _b.limit) > 0 && !((
|
|
675
|
+
if (((_b = (_a = this.config.settings) === null || _a === void 0 ? void 0 : _a.trending) === null || _b === void 0 ? void 0 : _b.limit) && ((_d = (_c = this.config.settings) === null || _c === void 0 ? void 0 : _c.trending) === null || _d === void 0 ? void 0 : _d.limit) > 0 && !((_e = this.store.trending) === null || _e === void 0 ? void 0 : _e.length)) {
|
|
672
676
|
this.searchTrending();
|
|
673
677
|
}
|
|
674
678
|
document.addEventListener('click', this.handlers.document.click);
|
|
@@ -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;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAmC,kBAAkB,EAAa,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiBzI,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;
|
|
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;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAmC,kBAAkB,EAAa,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiBzI,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;gBAGtC,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA2C3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAchC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAe5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAoH9B;CACF"}
|
|
@@ -167,14 +167,16 @@ var FinderController = /** @class */ (function (_super) {
|
|
|
167
167
|
return [3 /*break*/, 7];
|
|
168
168
|
case 7:
|
|
169
169
|
searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
|
|
170
|
-
return [4 /*yield*/, this.client.
|
|
170
|
+
return [4 /*yield*/, this.client.finder(params)];
|
|
171
171
|
case 8:
|
|
172
172
|
_a = _b.sent(), meta = _a[0], response = _a[1];
|
|
173
|
+
// @ts-ignore
|
|
173
174
|
if (!response.meta) {
|
|
174
175
|
/**
|
|
175
176
|
* MockClient will overwrite the client search() method and use
|
|
176
177
|
* SearchData to return mock data which already contains meta data
|
|
177
178
|
*/
|
|
179
|
+
// @ts-ignore
|
|
178
180
|
response.meta = meta;
|
|
179
181
|
}
|
|
180
182
|
searchProfile.stop();
|
|
@@ -207,6 +209,7 @@ var FinderController = /** @class */ (function (_super) {
|
|
|
207
209
|
afterSearchProfile.stop();
|
|
208
210
|
this.log.profile(afterSearchProfile);
|
|
209
211
|
// update the store
|
|
212
|
+
// @ts-ignore
|
|
210
213
|
this.store.update(response);
|
|
211
214
|
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
212
215
|
_b.label = 13;
|
|
@@ -1,31 +1,45 @@
|
|
|
1
1
|
import { AbstractController } from '../Abstract/AbstractController';
|
|
2
2
|
import { ControllerTypes } from '../types';
|
|
3
|
-
import
|
|
3
|
+
import { BeaconEvent } from '@searchspring/snap-tracker';
|
|
4
4
|
import type { RecommendationStore } from '@searchspring/snap-store-mobx';
|
|
5
5
|
import type { RecommendationControllerConfig, ControllerServices, ContextVariables } from '../types';
|
|
6
6
|
declare type RecommendationTrackMethods = {
|
|
7
7
|
product: {
|
|
8
|
-
click: (e:
|
|
9
|
-
render: (result: any) => BeaconEvent;
|
|
10
|
-
impression: (result: any) => BeaconEvent;
|
|
8
|
+
click: (e: MouseEvent, result: any) => BeaconEvent | undefined;
|
|
9
|
+
render: (result: any) => BeaconEvent | undefined;
|
|
10
|
+
impression: (result: any) => BeaconEvent | undefined;
|
|
11
11
|
};
|
|
12
|
-
click: (e:
|
|
13
|
-
impression: () => BeaconEvent;
|
|
14
|
-
render: () => BeaconEvent;
|
|
12
|
+
click: (e: MouseEvent) => BeaconEvent | undefined;
|
|
13
|
+
impression: () => BeaconEvent | undefined;
|
|
14
|
+
render: () => BeaconEvent | undefined;
|
|
15
|
+
};
|
|
16
|
+
declare type RecommendCombinedRequestModel = {
|
|
17
|
+
tag: string;
|
|
18
|
+
siteId: string;
|
|
19
|
+
product?: string;
|
|
20
|
+
shopper?: string;
|
|
21
|
+
categories?: string[];
|
|
22
|
+
cart?: string[];
|
|
23
|
+
lastViewed?: string[];
|
|
24
|
+
test?: boolean;
|
|
25
|
+
branch?: string;
|
|
15
26
|
};
|
|
16
27
|
export declare class RecommendationController extends AbstractController {
|
|
17
28
|
type: ControllerTypes;
|
|
18
29
|
store: RecommendationStore;
|
|
19
30
|
config: RecommendationControllerConfig;
|
|
20
31
|
events: {
|
|
21
|
-
click
|
|
22
|
-
impression
|
|
23
|
-
render
|
|
24
|
-
product
|
|
32
|
+
click?: BeaconEvent;
|
|
33
|
+
impression?: BeaconEvent;
|
|
34
|
+
render?: BeaconEvent;
|
|
35
|
+
product?: Record<string, {
|
|
36
|
+
impression?: BeaconEvent;
|
|
37
|
+
render?: BeaconEvent;
|
|
38
|
+
}>;
|
|
25
39
|
};
|
|
26
40
|
constructor(config: RecommendationControllerConfig, { client, store, urlManager, eventManager, profiler, logger, tracker }: ControllerServices, context?: ContextVariables);
|
|
27
41
|
track: RecommendationTrackMethods;
|
|
28
|
-
get params():
|
|
42
|
+
get params(): RecommendCombinedRequestModel;
|
|
29
43
|
search: () => Promise<void>;
|
|
30
44
|
}
|
|
31
45
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,OAAO,
|
|
1
|
+
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,8BAA8B,EAAkC,kBAAkB,EAAa,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEhJ,aAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QACjD,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KACrD,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF,aAAK,6BAA6B,GAAG;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAUF,qBAAa,wBAAyB,SAAQ,kBAAkB;IACxD,IAAI,kBAAkC;IACrC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,8BAA8B,CAAC;IAE/C,MAAM,EAAE;QACP,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,UAAU,CAAC,EAAE,WAAW,CAAC;QACzB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,UAAU,CAAC,EAAE,WAAW,CAAC;YAAC,MAAM,CAAC,EAAE,WAAW,CAAA;SAAE,CAAC,CAAC;KAC7E,CAKC;gBAGD,MAAM,EAAE,8BAA8B,EACtC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA8B3B,KAAK,EAAE,0BAA0B,CAqK/B;IAEF,IAAI,MAAM,IAAI,6BAA6B,CAyB1C;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAqG9B;CACF"}
|
|
@@ -86,9 +86,9 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
86
86
|
var _this = _super.call(this, config, { client: client, store: store, urlManager: urlManager, eventManager: eventManager, profiler: profiler, logger: logger, tracker: tracker }, context) || this;
|
|
87
87
|
_this.type = types_1.ControllerTypes.recommendation;
|
|
88
88
|
_this.events = {
|
|
89
|
-
click:
|
|
90
|
-
impression:
|
|
91
|
-
render:
|
|
89
|
+
click: undefined,
|
|
90
|
+
impression: undefined,
|
|
91
|
+
render: undefined,
|
|
92
92
|
product: {},
|
|
93
93
|
};
|
|
94
94
|
_this.track = {
|
|
@@ -99,7 +99,7 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
99
99
|
var payload = {
|
|
100
100
|
type: snap_tracker_1.BeaconType.PROFILE_PRODUCT_CLICK,
|
|
101
101
|
category: snap_tracker_1.BeaconCategory.RECOMMENDATIONS,
|
|
102
|
-
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } :
|
|
102
|
+
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } : undefined,
|
|
103
103
|
event: {
|
|
104
104
|
context: {
|
|
105
105
|
action: 'navigate',
|
|
@@ -123,12 +123,12 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
123
123
|
},
|
|
124
124
|
impression: function (result) {
|
|
125
125
|
var _a;
|
|
126
|
-
if (!_this.store.profile.tag || !result || !_this.events.impression || ((_a = _this.events.product[result.id]) === null || _a === void 0 ? void 0 : _a.impression))
|
|
126
|
+
if (!_this.store.profile.tag || !result || !_this.events.impression || (_this.events.product && ((_a = _this.events.product[result.id]) === null || _a === void 0 ? void 0 : _a.impression)))
|
|
127
127
|
return;
|
|
128
128
|
var payload = {
|
|
129
129
|
type: snap_tracker_1.BeaconType.PROFILE_PRODUCT_IMPRESSION,
|
|
130
130
|
category: snap_tracker_1.BeaconCategory.RECOMMENDATIONS,
|
|
131
|
-
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } :
|
|
131
|
+
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } : undefined,
|
|
132
132
|
event: {
|
|
133
133
|
context: {
|
|
134
134
|
placement: _this.store.profile.placement,
|
|
@@ -157,7 +157,7 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
157
157
|
var payload = {
|
|
158
158
|
type: snap_tracker_1.BeaconType.PROFILE_PRODUCT_RENDER,
|
|
159
159
|
category: snap_tracker_1.BeaconCategory.RECOMMENDATIONS,
|
|
160
|
-
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } :
|
|
160
|
+
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } : undefined,
|
|
161
161
|
event: {
|
|
162
162
|
context: {
|
|
163
163
|
placement: _this.store.profile.placement,
|
|
@@ -186,7 +186,7 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
186
186
|
var event = _this.tracker.track.event({
|
|
187
187
|
type: snap_tracker_1.BeaconType.PROFILE_CLICK,
|
|
188
188
|
category: snap_tracker_1.BeaconCategory.RECOMMENDATIONS,
|
|
189
|
-
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } :
|
|
189
|
+
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } : undefined,
|
|
190
190
|
event: {
|
|
191
191
|
context: {
|
|
192
192
|
action: 'navigate',
|
|
@@ -212,7 +212,7 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
212
212
|
var event = _this.tracker.track.event({
|
|
213
213
|
type: snap_tracker_1.BeaconType.PROFILE_IMPRESSION,
|
|
214
214
|
category: snap_tracker_1.BeaconCategory.RECOMMENDATIONS,
|
|
215
|
-
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } :
|
|
215
|
+
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } : undefined,
|
|
216
216
|
event: {
|
|
217
217
|
context: {
|
|
218
218
|
placement: _this.store.profile.placement,
|
|
@@ -237,7 +237,7 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
237
237
|
var event = _this.tracker.track.event({
|
|
238
238
|
type: snap_tracker_1.BeaconType.PROFILE_RENDER,
|
|
239
239
|
category: snap_tracker_1.BeaconCategory.RECOMMENDATIONS,
|
|
240
|
-
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } :
|
|
240
|
+
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } : undefined,
|
|
241
241
|
event: {
|
|
242
242
|
context: {
|
|
243
243
|
placement: _this.store.profile.placement,
|
|
@@ -7,7 +7,7 @@ import type { SearchControllerConfig, ControllerServices, ContextVariables } fro
|
|
|
7
7
|
import type { SearchRequestModel } from '@searchspring/snapi-types';
|
|
8
8
|
declare type SearchTrackMethods = {
|
|
9
9
|
product: {
|
|
10
|
-
click: (e:
|
|
10
|
+
click: (e: MouseEvent, result: any) => BeaconEvent | undefined;
|
|
11
11
|
};
|
|
12
12
|
};
|
|
13
13
|
export declare class SearchController extends AbstractController {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAErF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACX,sBAAsB,EAItB,kBAAkB,EAElB,gBAAgB,EAChB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,kBAAkB,EAAgD,MAAM,2BAA2B,CAAC;AAoBlH,aAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAErF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACX,sBAAsB,EAItB,kBAAkB,EAElB,gBAAgB,EAChB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,kBAAkB,EAAgD,MAAM,2BAA2B,CAAC;AAoBlH,aAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KAC/D,CAAC;CACF,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;IACvC,OAAO,EAAE,YAAY,CAAC;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;IAkF3B,KAAK,EAAE,kBAAkB,CA0BvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAsC/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CA0J9B;CACF"}
|
|
@@ -105,18 +105,18 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
105
105
|
_this.track = {
|
|
106
106
|
product: {
|
|
107
107
|
click: function (e, result) {
|
|
108
|
-
var _a;
|
|
108
|
+
var _a, _b;
|
|
109
109
|
// store scroll position
|
|
110
|
-
if (_this.config.settings.infinite) {
|
|
110
|
+
if ((_a = _this.config.settings) === null || _a === void 0 ? void 0 : _a.infinite) {
|
|
111
111
|
var stringyParams = _this.storage.get('lastStringyParams');
|
|
112
112
|
var scrollMap = {};
|
|
113
113
|
scrollMap[stringyParams] = window.scrollY;
|
|
114
114
|
_this.storage.set('scrollMap', scrollMap);
|
|
115
115
|
}
|
|
116
116
|
// track
|
|
117
|
-
var
|
|
117
|
+
var _c = result.attributes, intellisuggestData = _c.intellisuggestData, intellisuggestSignature = _c.intellisuggestSignature;
|
|
118
118
|
var target = e.target;
|
|
119
|
-
var href = (target === null || target === void 0 ? void 0 : target.href) || ((
|
|
119
|
+
var href = (target === null || target === void 0 ? void 0 : target.href) || ((_b = result.mappings.core) === null || _b === void 0 ? void 0 : _b.url) || undefined;
|
|
120
120
|
var event = _this.tracker.track.product.click({
|
|
121
121
|
intellisuggestData: intellisuggestData,
|
|
122
122
|
intellisuggestSignature: intellisuggestSignature,
|
|
@@ -129,32 +129,32 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
129
129
|
};
|
|
130
130
|
_this.search = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
131
131
|
var params, err_1, stringyParams, prevStringyParams, preventBackfill, dontBackfill, searchProfile, _a, meta, response, previousResults_1, backfills, page, backfillParams, backfillResponses, afterSearchProfile, err_2, afterStoreProfile, err_3, err_4;
|
|
132
|
-
var _b, _c, _d, _e, _f, _g, _h;
|
|
133
|
-
return __generator(this, function (
|
|
134
|
-
switch (
|
|
132
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
133
|
+
return __generator(this, function (_m) {
|
|
134
|
+
switch (_m.label) {
|
|
135
135
|
case 0:
|
|
136
136
|
if (!!this.initialized) return [3 /*break*/, 2];
|
|
137
137
|
return [4 /*yield*/, this.init()];
|
|
138
138
|
case 1:
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
_m.sent();
|
|
140
|
+
_m.label = 2;
|
|
141
141
|
case 2:
|
|
142
142
|
params = this.params;
|
|
143
|
-
|
|
143
|
+
_m.label = 3;
|
|
144
144
|
case 3:
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
_m.trys.push([3, 20, , 21]);
|
|
146
|
+
_m.label = 4;
|
|
147
147
|
case 4:
|
|
148
|
-
|
|
148
|
+
_m.trys.push([4, 6, , 7]);
|
|
149
149
|
return [4 /*yield*/, this.eventManager.fire('beforeSearch', {
|
|
150
150
|
controller: this,
|
|
151
151
|
request: params,
|
|
152
152
|
})];
|
|
153
153
|
case 5:
|
|
154
|
-
|
|
154
|
+
_m.sent();
|
|
155
155
|
return [3 /*break*/, 7];
|
|
156
156
|
case 6:
|
|
157
|
-
err_1 =
|
|
157
|
+
err_1 = _m.sent();
|
|
158
158
|
if ((err_1 === null || err_1 === void 0 ? void 0 : err_1.message) == 'cancelled') {
|
|
159
159
|
this.log.warn("'beforeSearch' middleware cancelled");
|
|
160
160
|
return [2 /*return*/];
|
|
@@ -171,9 +171,9 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
171
171
|
// no param change - not searching
|
|
172
172
|
return [2 /*return*/];
|
|
173
173
|
}
|
|
174
|
-
if (this.config.settings.infinite) {
|
|
175
|
-
preventBackfill = ((
|
|
176
|
-
dontBackfill = !((
|
|
174
|
+
if ((_b = this.config.settings) === null || _b === void 0 ? void 0 : _b.infinite) {
|
|
175
|
+
preventBackfill = ((_c = this.config.settings.infinite) === null || _c === void 0 ? void 0 : _c.backfill) && !this.store.results.length && ((_d = params.pagination) === null || _d === void 0 ? void 0 : _d.page) > this.config.settings.infinite.backfill;
|
|
176
|
+
dontBackfill = !((_e = this.config.settings.infinite) === null || _e === void 0 ? void 0 : _e.backfill) && !this.store.results.length && ((_f = params.pagination) === null || _f === void 0 ? void 0 : _f.page) > 1;
|
|
177
177
|
if (preventBackfill || dontBackfill) {
|
|
178
178
|
this.storage.set('scrollMap', {});
|
|
179
179
|
this.urlManager.set('page', 1).go();
|
|
@@ -183,50 +183,52 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
183
183
|
searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
|
|
184
184
|
return [4 /*yield*/, this.client.search(params)];
|
|
185
185
|
case 8:
|
|
186
|
-
_a =
|
|
186
|
+
_a = _m.sent(), meta = _a[0], response = _a[1];
|
|
187
|
+
// @ts-ignore
|
|
187
188
|
if (!response.meta) {
|
|
188
189
|
/**
|
|
189
190
|
* MockClient will overwrite the client search() method and use
|
|
190
191
|
* SearchData to return mock data which already contains meta data
|
|
191
192
|
*/
|
|
193
|
+
// @ts-ignore
|
|
192
194
|
response.meta = meta;
|
|
193
195
|
}
|
|
194
|
-
if (!(this.config.settings.infinite && ((
|
|
195
|
-
previousResults_1 = ((
|
|
196
|
-
if (!(((
|
|
196
|
+
if (!(((_g = this.config.settings) === null || _g === void 0 ? void 0 : _g.infinite) && ((_h = params.pagination) === null || _h === void 0 ? void 0 : _h.page) > 1)) return [3 /*break*/, 11];
|
|
197
|
+
previousResults_1 = ((_j = this.store.data) === null || _j === void 0 ? void 0 : _j.results) || [];
|
|
198
|
+
if (!(((_k = this.config.settings) === null || _k === void 0 ? void 0 : _k.infinite.backfill) && !previousResults_1.length)) return [3 /*break*/, 10];
|
|
197
199
|
backfills = [];
|
|
198
|
-
for (page = 1; page < params.pagination.page; page++) {
|
|
200
|
+
for (page = 1; page < ((_l = params.pagination) === null || _l === void 0 ? void 0 : _l.page); page++) {
|
|
199
201
|
backfillParams = (0, deepmerge_1.default)(__assign({}, params), { pagination: { page: page } });
|
|
200
202
|
backfills.push(this.client.search(backfillParams));
|
|
201
203
|
}
|
|
202
204
|
return [4 /*yield*/, Promise.all(backfills)];
|
|
203
205
|
case 9:
|
|
204
|
-
backfillResponses =
|
|
206
|
+
backfillResponses = _m.sent();
|
|
205
207
|
backfillResponses.map(function (_a) {
|
|
206
208
|
var meta = _a[0], data = _a[1];
|
|
207
209
|
previousResults_1 = previousResults_1.concat(data.results);
|
|
208
210
|
});
|
|
209
|
-
|
|
211
|
+
_m.label = 10;
|
|
210
212
|
case 10:
|
|
211
213
|
response.results = __spreadArray(__spreadArray([], previousResults_1, true), (response.results || []), true);
|
|
212
|
-
|
|
214
|
+
_m.label = 11;
|
|
213
215
|
case 11:
|
|
214
216
|
searchProfile.stop();
|
|
215
217
|
this.log.profile(searchProfile);
|
|
216
218
|
afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params }).start();
|
|
217
|
-
|
|
219
|
+
_m.label = 12;
|
|
218
220
|
case 12:
|
|
219
|
-
|
|
221
|
+
_m.trys.push([12, 14, , 15]);
|
|
220
222
|
return [4 /*yield*/, this.eventManager.fire('afterSearch', {
|
|
221
223
|
controller: this,
|
|
222
224
|
request: params,
|
|
223
225
|
response: response,
|
|
224
226
|
})];
|
|
225
227
|
case 13:
|
|
226
|
-
|
|
228
|
+
_m.sent();
|
|
227
229
|
return [3 /*break*/, 15];
|
|
228
230
|
case 14:
|
|
229
|
-
err_2 =
|
|
231
|
+
err_2 = _m.sent();
|
|
230
232
|
if ((err_2 === null || err_2 === void 0 ? void 0 : err_2.message) == 'cancelled') {
|
|
231
233
|
this.log.warn("'afterSearch' middleware cancelled");
|
|
232
234
|
afterSearchProfile.stop();
|
|
@@ -241,21 +243,22 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
241
243
|
afterSearchProfile.stop();
|
|
242
244
|
this.log.profile(afterSearchProfile);
|
|
243
245
|
// update the store
|
|
246
|
+
// @ts-ignore
|
|
244
247
|
this.store.update(response);
|
|
245
248
|
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
246
|
-
|
|
249
|
+
_m.label = 16;
|
|
247
250
|
case 16:
|
|
248
|
-
|
|
251
|
+
_m.trys.push([16, 18, , 19]);
|
|
249
252
|
return [4 /*yield*/, this.eventManager.fire('afterStore', {
|
|
250
253
|
controller: this,
|
|
251
254
|
request: params,
|
|
252
255
|
response: response,
|
|
253
256
|
})];
|
|
254
257
|
case 17:
|
|
255
|
-
|
|
258
|
+
_m.sent();
|
|
256
259
|
return [3 /*break*/, 19];
|
|
257
260
|
case 18:
|
|
258
|
-
err_3 =
|
|
261
|
+
err_3 = _m.sent();
|
|
259
262
|
if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
|
|
260
263
|
this.log.warn("'afterStore' middleware cancelled");
|
|
261
264
|
afterStoreProfile.stop();
|
|
@@ -271,7 +274,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
271
274
|
this.log.profile(afterStoreProfile);
|
|
272
275
|
return [3 /*break*/, 21];
|
|
273
276
|
case 20:
|
|
274
|
-
err_4 =
|
|
277
|
+
err_4 = _m.sent();
|
|
275
278
|
if (err_4) {
|
|
276
279
|
switch (err_4) {
|
|
277
280
|
case 429:
|
|
@@ -392,7 +395,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
392
395
|
Object.defineProperty(SearchController.prototype, "params", {
|
|
393
396
|
get: function () {
|
|
394
397
|
var _a, _b, _c, _d;
|
|
395
|
-
var params = (0, deepmerge_1.default)(__assign({}, (0, getParams_1.getSearchParams)(this.urlManager.state)), this.config.globals);
|
|
398
|
+
var params = (0, deepmerge_1.default)(__assign({}, (0, getParams_1.getSearchParams)(this.urlManager.state)), this.config.globals || {});
|
|
396
399
|
// redirect setting
|
|
397
400
|
if (!((_b = (_a = this.config.settings) === null || _a === void 0 ? void 0 : _a.redirects) === null || _b === void 0 ? void 0 : _b.merchandising) || this.store.loaded) {
|
|
398
401
|
params.search = params.search || {};
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AbstractController } from './Abstract/AbstractController';
|
|
2
2
|
import type { EventManager, Middleware, Next } from '@searchspring/snap-event-manager';
|
|
3
3
|
import type { Client } from '@searchspring/snap-client';
|
|
4
|
-
import type {
|
|
4
|
+
import type { SearchStore, AutocompleteStore, FinderStore, RecommendationStore, StoreConfig, SearchStoreConfig, FinderStoreConfig, AutocompleteStoreConfig, RecommendationStoreConfig } from '@searchspring/snap-store-mobx';
|
|
5
5
|
import type { Tracker, ProductViewEvent } from '@searchspring/snap-tracker';
|
|
6
6
|
import type { Profiler } from '@searchspring/snap-profiler';
|
|
7
7
|
import type { UrlManager } from '@searchspring/snap-url-manager';
|
|
@@ -12,7 +12,7 @@ declare global {
|
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
export declare type NextEvent = Next;
|
|
15
|
-
export declare type PluginFunction = (cntrlr: AbstractController, ...args: any
|
|
15
|
+
export declare type PluginFunction = (cntrlr: AbstractController, ...args: any) => Promise<void>;
|
|
16
16
|
export declare type PluginGrouping = [func: PluginFunction, ...args: unknown[]];
|
|
17
17
|
export declare type BeforeSearchObj = {
|
|
18
18
|
controller: AbstractController;
|
|
@@ -35,7 +35,7 @@ export declare enum ControllerTypes {
|
|
|
35
35
|
}
|
|
36
36
|
export declare type ControllerServices = {
|
|
37
37
|
client: Client;
|
|
38
|
-
store:
|
|
38
|
+
store: SearchStore | AutocompleteStore | FinderStore | RecommendationStore;
|
|
39
39
|
urlManager: UrlManager;
|
|
40
40
|
eventManager: EventManager;
|
|
41
41
|
profiler: Profiler;
|
package/dist/cjs/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AAEvF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EACX,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import type { ImmutableUrlState } from '@searchspring/snap-url-manager';
|
|
2
|
+
export declare function getSearchParams(state: ImmutableUrlState): Record<string, any>;
|
|
2
3
|
//# sourceMappingURL=getParams.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getParams.d.ts","sourceRoot":"","sources":["../../../src/utils/getParams.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getParams.d.ts","sourceRoot":"","sources":["../../../src/utils/getParams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAqCxE,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAgF7E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { LogMode } from '@searchspring/snap-logger';
|
|
2
2
|
import { DomTargeter } from '@searchspring/snap-toolbox';
|
|
3
|
+
import type { Client } from '@searchspring/snap-client';
|
|
3
4
|
import type { AbstractStore } from '@searchspring/snap-store-mobx';
|
|
4
5
|
import type { UrlManager } from '@searchspring/snap-url-manager';
|
|
5
6
|
import type { EventManager, Middleware } from '@searchspring/snap-event-manager';
|
|
@@ -12,7 +13,7 @@ export declare abstract class AbstractController {
|
|
|
12
13
|
id: string;
|
|
13
14
|
type: string;
|
|
14
15
|
config: ControllerConfig;
|
|
15
|
-
client:
|
|
16
|
+
client: Client;
|
|
16
17
|
store: AbstractStore;
|
|
17
18
|
urlManager: UrlManager;
|
|
18
19
|
eventManager: EventManager;
|
|
@@ -27,14 +28,14 @@ export declare abstract class AbstractController {
|
|
|
27
28
|
private _environment;
|
|
28
29
|
get initialized(): boolean;
|
|
29
30
|
constructor(config: ControllerConfig, { client, store, urlManager, eventManager, profiler, logger, tracker }: ControllerServices, context?: ContextVariables);
|
|
30
|
-
createTargeter(target: Target, onTarget: OnTarget, document?: Document): DomTargeter;
|
|
31
|
-
addTargeter(target: DomTargeter): DomTargeter;
|
|
31
|
+
createTargeter(target: Target, onTarget: OnTarget, document?: Document): DomTargeter | undefined;
|
|
32
|
+
addTargeter(target: DomTargeter): DomTargeter | undefined;
|
|
32
33
|
set environment(env: LogMode);
|
|
33
34
|
get environment(): LogMode;
|
|
34
35
|
init(): Promise<void>;
|
|
35
36
|
retarget(): void;
|
|
36
37
|
abstract search(): Promise<void>;
|
|
37
|
-
plugin(func: (cntrlr: AbstractController, ...args: any
|
|
38
|
+
plugin(func: (cntrlr: AbstractController, ...args: any) => Promise<void>, ...args: unknown[]): Promise<void>;
|
|
38
39
|
on<T>(event: string, ...func: Middleware<T>[]): void;
|
|
39
40
|
use(attachments: Attachments): void;
|
|
40
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractController.d.ts","sourceRoot":"","sources":["../../../src/Abstract/AbstractController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAgB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"AbstractController.d.ts","sourceRoot":"","sources":["../../../src/Abstract/AbstractController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAgB,MAAM,4BAA4B,CAAC;AAEvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGpG,8BAAsB,kBAAkB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,SAAc;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,gBAAgB,CAAC;IAE1B,SAAS,EAAE;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;KAC3B,CAAM;IAEP,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAsB;IAE1C,IAAI,WAAW,IAAI,OAAO,CAEzB;gBAGA,MAAM,EAAE,gBAAgB,EACxB,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,GAAE,gBAAqB;IA2ExB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS;IAIhG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS;IAShE,IAAW,WAAW,CAAC,GAAG,EAAE,OAAO,EAKlC;IAED,IAAW,WAAW,IAAI,OAAO,CAEhC;IAEY,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA+C3B,QAAQ,IAAI,IAAI;aAMP,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAE1B,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlH,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAIpD,GAAG,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;CAoC1C"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import { StorageStore } from '@searchspring/snap-store-mobx';
|
|
2
3
|
import { AbstractController } from '../Abstract/AbstractController';
|
|
3
4
|
import { ControllerTypes } from '../types';
|
|
4
|
-
import
|
|
5
|
+
import { AutocompleteStore } from '@searchspring/snap-store-mobx';
|
|
5
6
|
import type { AutocompleteControllerConfig, ControllerServices, ContextVariables } from '../types';
|
|
6
7
|
import type { AutocompleteRequestModel } from '@searchspring/snapi-types';
|
|
7
8
|
export declare const INPUT_DELAY = 200;
|
|
8
9
|
declare type AutocompleteTrackMethods = {
|
|
9
10
|
product: {
|
|
10
|
-
click: (e:
|
|
11
|
+
click: (e: MouseEvent, result: any) => void;
|
|
11
12
|
};
|
|
12
13
|
};
|
|
13
14
|
export declare class AutocompleteController extends AbstractController {
|
|
@@ -22,12 +23,12 @@ export declare class AutocompleteController extends AbstractController {
|
|
|
22
23
|
reset(): void;
|
|
23
24
|
handlers: {
|
|
24
25
|
input: {
|
|
25
|
-
enterKey: (e: KeyboardEvent) => Promise<boolean>;
|
|
26
|
+
enterKey: (e: KeyboardEvent) => Promise<boolean | undefined>;
|
|
26
27
|
escKey: (e: KeyboardEvent) => void;
|
|
27
28
|
focus: (e: FocusEvent) => void;
|
|
28
|
-
formSubmit: (e:
|
|
29
|
+
formSubmit: (e: React.FormEvent<HTMLInputElement>) => Promise<void>;
|
|
29
30
|
keyUp: (e: KeyboardEvent) => void;
|
|
30
|
-
timeoutDelay:
|
|
31
|
+
timeoutDelay: NodeJS.Timeout | undefined;
|
|
31
32
|
};
|
|
32
33
|
document: {
|
|
33
34
|
click: (e: MouseEvent) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,
|
|
1
|
+
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EACX,4BAA4B,EAI5B,kBAAkB,EAElB,gBAAgB,EAChB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAG1E,eAAO,MAAM,WAAW,MAAM,CAAC;AAoB/B,aAAK,wBAAwB,GAAG;IAC/B,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;KAC5C,CAAC;CACF,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,kBAAkB;IACtD,IAAI,kBAAgC;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,YAAY,CAAC;gBAG5B,MAAM,EAAE,4BAA4B,EACpC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IAoD3B,KAAK,EAAE,wBAAwB,CAO7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CA+BrC;IAEK,UAAU,CAAC,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsChE,KAAK,IAAI,IAAI;IASb,QAAQ;;0BAEc,aAAa,KAAG,QAAQ,OAAO,GAAG,SAAS,CAAC;wBA6CpD,aAAa,KAAG,IAAI;uBAMrB,UAAU,KAAG,IAAI;4BAQN,MAAM,SAAS,CAAC,gBAAgB,CAAC,KAAG,QAAQ,IAAI,CAAC;uBAwC5D,aAAa,KAAG,IAAI;;;;uBA8CpB,UAAU,KAAG,IAAI;;MAS5B;IAEF,MAAM,IAAI,IAAI;IAYR,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2D3B,cAAc,QAAa,QAAQ,IAAI,CAAC,CAsBtC;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAgH9B;CACF"}
|
|
@@ -52,10 +52,10 @@ export class AutocompleteController extends AbstractController {
|
|
|
52
52
|
// use corrected query and originalQuery
|
|
53
53
|
if (this.store.search.originalQuery) {
|
|
54
54
|
input.value = this.store.search.query.string;
|
|
55
|
-
actionUrl = actionUrl
|
|
55
|
+
actionUrl = actionUrl?.set(PARAM_ORIGINAL_QUERY, this.store.search.originalQuery.string);
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
actionUrl = actionUrl
|
|
58
|
+
actionUrl = actionUrl?.set('query', input.value);
|
|
59
59
|
// TODO expected spell correct behavior queryAssumption
|
|
60
60
|
try {
|
|
61
61
|
await this.eventManager.fire('beforeSubmit', {
|
|
@@ -73,7 +73,7 @@ export class AutocompleteController extends AbstractController {
|
|
|
73
73
|
console.error(err);
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
-
window.location.href = actionUrl
|
|
76
|
+
window.location.href = actionUrl?.href || '';
|
|
77
77
|
}
|
|
78
78
|
},
|
|
79
79
|
escKey: (e) => {
|
|
@@ -139,7 +139,7 @@ export class AutocompleteController extends AbstractController {
|
|
|
139
139
|
return;
|
|
140
140
|
}
|
|
141
141
|
this.store.state.input = value;
|
|
142
|
-
if (this.config
|
|
142
|
+
if (this.config?.settings?.syncInputs) {
|
|
143
143
|
const inputs = document.querySelectorAll(this.config.selector);
|
|
144
144
|
inputs.forEach((input) => {
|
|
145
145
|
input.value = value;
|
|
@@ -220,11 +220,13 @@ export class AutocompleteController extends AbstractController {
|
|
|
220
220
|
}
|
|
221
221
|
const searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
|
|
222
222
|
const [meta, response] = await this.client.autocomplete(params);
|
|
223
|
+
// @ts-ignore
|
|
223
224
|
if (!response.meta) {
|
|
224
225
|
/**
|
|
225
226
|
* MockClient will overwrite the client search() method and use
|
|
226
227
|
* SearchData to return mock data which already contains meta data
|
|
227
228
|
*/
|
|
229
|
+
// @ts-ignore
|
|
228
230
|
response.meta = meta;
|
|
229
231
|
}
|
|
230
232
|
searchProfile.stop();
|
|
@@ -251,6 +253,7 @@ export class AutocompleteController extends AbstractController {
|
|
|
251
253
|
afterSearchProfile.stop();
|
|
252
254
|
this.log.profile(afterSearchProfile);
|
|
253
255
|
// update the store
|
|
256
|
+
// @ts-ignore
|
|
254
257
|
this.store.update(response);
|
|
255
258
|
const afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
256
259
|
try {
|
|
@@ -306,7 +309,7 @@ export class AutocompleteController extends AbstractController {
|
|
|
306
309
|
this.store.setConfig(this.config);
|
|
307
310
|
// get current search from url before detaching
|
|
308
311
|
if (this.config.settings.initializeFromUrl) {
|
|
309
|
-
this.store.state.input = this.urlManager.state.query;
|
|
312
|
+
this.store.state.input = this.urlManager.state.query || '';
|
|
310
313
|
// reset to force search on focus
|
|
311
314
|
// TODO: make a config setting for this
|
|
312
315
|
this.urlManager.reset().go();
|
|
@@ -433,7 +436,7 @@ export class AutocompleteController extends AbstractController {
|
|
|
433
436
|
input.setAttribute('autocomplete', 'off');
|
|
434
437
|
input.setAttribute(INPUT_ATTRIBUTE, '');
|
|
435
438
|
input.addEventListener('keyup', this.handlers.input.keyUp);
|
|
436
|
-
if (this.config
|
|
439
|
+
if (this.config?.settings?.initializeFromUrl && !input.value && this.store.state.input) {
|
|
437
440
|
input.value = this.store.state.input;
|
|
438
441
|
}
|
|
439
442
|
input.addEventListener('focus', this.handlers.input.focus);
|
|
@@ -461,7 +464,7 @@ export class AutocompleteController extends AbstractController {
|
|
|
461
464
|
this.setFocused(input);
|
|
462
465
|
}
|
|
463
466
|
});
|
|
464
|
-
if (this.config.settings?.trending?.limit > 0 && !this.store.trending?.length) {
|
|
467
|
+
if (this.config.settings?.trending?.limit && this.config.settings?.trending?.limit > 0 && !this.store.trending?.length) {
|
|
465
468
|
this.searchTrending();
|
|
466
469
|
}
|
|
467
470
|
document.addEventListener('click', this.handlers.document.click);
|
|
@@ -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;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAmC,kBAAkB,EAAa,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiBzI,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;
|
|
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;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAmC,kBAAkB,EAAa,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiBzI,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;gBAGtC,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA2C3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAchC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAe5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAoH9B;CACF"}
|
|
@@ -69,12 +69,14 @@ export class FinderController extends AbstractController {
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
const searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
|
|
72
|
-
const [meta, response] = await this.client.
|
|
72
|
+
const [meta, response] = await this.client.finder(params);
|
|
73
|
+
// @ts-ignore
|
|
73
74
|
if (!response.meta) {
|
|
74
75
|
/**
|
|
75
76
|
* MockClient will overwrite the client search() method and use
|
|
76
77
|
* SearchData to return mock data which already contains meta data
|
|
77
78
|
*/
|
|
79
|
+
// @ts-ignore
|
|
78
80
|
response.meta = meta;
|
|
79
81
|
}
|
|
80
82
|
searchProfile.stop();
|
|
@@ -101,6 +103,7 @@ export class FinderController extends AbstractController {
|
|
|
101
103
|
afterSearchProfile.stop();
|
|
102
104
|
this.log.profile(afterSearchProfile);
|
|
103
105
|
// update the store
|
|
106
|
+
// @ts-ignore
|
|
104
107
|
this.store.update(response);
|
|
105
108
|
const afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
106
109
|
try {
|
|
@@ -1,31 +1,45 @@
|
|
|
1
1
|
import { AbstractController } from '../Abstract/AbstractController';
|
|
2
2
|
import { ControllerTypes } from '../types';
|
|
3
|
-
import
|
|
3
|
+
import { BeaconEvent } from '@searchspring/snap-tracker';
|
|
4
4
|
import type { RecommendationStore } from '@searchspring/snap-store-mobx';
|
|
5
5
|
import type { RecommendationControllerConfig, ControllerServices, ContextVariables } from '../types';
|
|
6
6
|
declare type RecommendationTrackMethods = {
|
|
7
7
|
product: {
|
|
8
|
-
click: (e:
|
|
9
|
-
render: (result: any) => BeaconEvent;
|
|
10
|
-
impression: (result: any) => BeaconEvent;
|
|
8
|
+
click: (e: MouseEvent, result: any) => BeaconEvent | undefined;
|
|
9
|
+
render: (result: any) => BeaconEvent | undefined;
|
|
10
|
+
impression: (result: any) => BeaconEvent | undefined;
|
|
11
11
|
};
|
|
12
|
-
click: (e:
|
|
13
|
-
impression: () => BeaconEvent;
|
|
14
|
-
render: () => BeaconEvent;
|
|
12
|
+
click: (e: MouseEvent) => BeaconEvent | undefined;
|
|
13
|
+
impression: () => BeaconEvent | undefined;
|
|
14
|
+
render: () => BeaconEvent | undefined;
|
|
15
|
+
};
|
|
16
|
+
declare type RecommendCombinedRequestModel = {
|
|
17
|
+
tag: string;
|
|
18
|
+
siteId: string;
|
|
19
|
+
product?: string;
|
|
20
|
+
shopper?: string;
|
|
21
|
+
categories?: string[];
|
|
22
|
+
cart?: string[];
|
|
23
|
+
lastViewed?: string[];
|
|
24
|
+
test?: boolean;
|
|
25
|
+
branch?: string;
|
|
15
26
|
};
|
|
16
27
|
export declare class RecommendationController extends AbstractController {
|
|
17
28
|
type: ControllerTypes;
|
|
18
29
|
store: RecommendationStore;
|
|
19
30
|
config: RecommendationControllerConfig;
|
|
20
31
|
events: {
|
|
21
|
-
click
|
|
22
|
-
impression
|
|
23
|
-
render
|
|
24
|
-
product
|
|
32
|
+
click?: BeaconEvent;
|
|
33
|
+
impression?: BeaconEvent;
|
|
34
|
+
render?: BeaconEvent;
|
|
35
|
+
product?: Record<string, {
|
|
36
|
+
impression?: BeaconEvent;
|
|
37
|
+
render?: BeaconEvent;
|
|
38
|
+
}>;
|
|
25
39
|
};
|
|
26
40
|
constructor(config: RecommendationControllerConfig, { client, store, urlManager, eventManager, profiler, logger, tracker }: ControllerServices, context?: ContextVariables);
|
|
27
41
|
track: RecommendationTrackMethods;
|
|
28
|
-
get params():
|
|
42
|
+
get params(): RecommendCombinedRequestModel;
|
|
29
43
|
search: () => Promise<void>;
|
|
30
44
|
}
|
|
31
45
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,OAAO,
|
|
1
|
+
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,8BAA8B,EAAkC,kBAAkB,EAAa,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEhJ,aAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QACjD,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KACrD,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF,aAAK,6BAA6B,GAAG;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAUF,qBAAa,wBAAyB,SAAQ,kBAAkB;IACxD,IAAI,kBAAkC;IACrC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,8BAA8B,CAAC;IAE/C,MAAM,EAAE;QACP,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,UAAU,CAAC,EAAE,WAAW,CAAC;QACzB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,UAAU,CAAC,EAAE,WAAW,CAAC;YAAC,MAAM,CAAC,EAAE,WAAW,CAAA;SAAE,CAAC,CAAC;KAC7E,CAKC;gBAGD,MAAM,EAAE,8BAA8B,EACtC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA8B3B,KAAK,EAAE,0BAA0B,CAqK/B;IAEF,IAAI,MAAM,IAAI,6BAA6B,CAyB1C;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAqG9B;CACF"}
|
|
@@ -16,9 +16,9 @@ export class RecommendationController extends AbstractController {
|
|
|
16
16
|
super(config, { client, store, urlManager, eventManager, profiler, logger, tracker }, context);
|
|
17
17
|
this.type = ControllerTypes.recommendation;
|
|
18
18
|
this.events = {
|
|
19
|
-
click:
|
|
20
|
-
impression:
|
|
21
|
-
render:
|
|
19
|
+
click: undefined,
|
|
20
|
+
impression: undefined,
|
|
21
|
+
render: undefined,
|
|
22
22
|
product: {},
|
|
23
23
|
};
|
|
24
24
|
this.track = {
|
|
@@ -29,7 +29,7 @@ export class RecommendationController extends AbstractController {
|
|
|
29
29
|
const payload = {
|
|
30
30
|
type: BeaconType.PROFILE_PRODUCT_CLICK,
|
|
31
31
|
category: BeaconCategory.RECOMMENDATIONS,
|
|
32
|
-
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } :
|
|
32
|
+
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } : undefined,
|
|
33
33
|
event: {
|
|
34
34
|
context: {
|
|
35
35
|
action: 'navigate',
|
|
@@ -52,12 +52,12 @@ export class RecommendationController extends AbstractController {
|
|
|
52
52
|
return event;
|
|
53
53
|
},
|
|
54
54
|
impression: (result) => {
|
|
55
|
-
if (!this.store.profile.tag || !result || !this.events.impression || this.events.product[result.id]?.impression)
|
|
55
|
+
if (!this.store.profile.tag || !result || !this.events.impression || (this.events.product && this.events.product[result.id]?.impression))
|
|
56
56
|
return;
|
|
57
57
|
const payload = {
|
|
58
58
|
type: BeaconType.PROFILE_PRODUCT_IMPRESSION,
|
|
59
59
|
category: BeaconCategory.RECOMMENDATIONS,
|
|
60
|
-
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } :
|
|
60
|
+
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } : undefined,
|
|
61
61
|
event: {
|
|
62
62
|
context: {
|
|
63
63
|
placement: this.store.profile.placement,
|
|
@@ -85,7 +85,7 @@ export class RecommendationController extends AbstractController {
|
|
|
85
85
|
const payload = {
|
|
86
86
|
type: BeaconType.PROFILE_PRODUCT_RENDER,
|
|
87
87
|
category: BeaconCategory.RECOMMENDATIONS,
|
|
88
|
-
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } :
|
|
88
|
+
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } : undefined,
|
|
89
89
|
event: {
|
|
90
90
|
context: {
|
|
91
91
|
placement: this.store.profile.placement,
|
|
@@ -114,7 +114,7 @@ export class RecommendationController extends AbstractController {
|
|
|
114
114
|
const event = this.tracker.track.event({
|
|
115
115
|
type: BeaconType.PROFILE_CLICK,
|
|
116
116
|
category: BeaconCategory.RECOMMENDATIONS,
|
|
117
|
-
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } :
|
|
117
|
+
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } : undefined,
|
|
118
118
|
event: {
|
|
119
119
|
context: {
|
|
120
120
|
action: 'navigate',
|
|
@@ -140,7 +140,7 @@ export class RecommendationController extends AbstractController {
|
|
|
140
140
|
const event = this.tracker.track.event({
|
|
141
141
|
type: BeaconType.PROFILE_IMPRESSION,
|
|
142
142
|
category: BeaconCategory.RECOMMENDATIONS,
|
|
143
|
-
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } :
|
|
143
|
+
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } : undefined,
|
|
144
144
|
event: {
|
|
145
145
|
context: {
|
|
146
146
|
placement: this.store.profile.placement,
|
|
@@ -165,7 +165,7 @@ export class RecommendationController extends AbstractController {
|
|
|
165
165
|
const event = this.tracker.track.event({
|
|
166
166
|
type: BeaconType.PROFILE_RENDER,
|
|
167
167
|
category: BeaconCategory.RECOMMENDATIONS,
|
|
168
|
-
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } :
|
|
168
|
+
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } : undefined,
|
|
169
169
|
event: {
|
|
170
170
|
context: {
|
|
171
171
|
placement: this.store.profile.placement,
|
|
@@ -7,7 +7,7 @@ import type { SearchControllerConfig, ControllerServices, ContextVariables } fro
|
|
|
7
7
|
import type { SearchRequestModel } from '@searchspring/snapi-types';
|
|
8
8
|
declare type SearchTrackMethods = {
|
|
9
9
|
product: {
|
|
10
|
-
click: (e:
|
|
10
|
+
click: (e: MouseEvent, result: any) => BeaconEvent | undefined;
|
|
11
11
|
};
|
|
12
12
|
};
|
|
13
13
|
export declare class SearchController extends AbstractController {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAErF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACX,sBAAsB,EAItB,kBAAkB,EAElB,gBAAgB,EAChB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,kBAAkB,EAAgD,MAAM,2BAA2B,CAAC;AAoBlH,aAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAErF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACX,sBAAsB,EAItB,kBAAkB,EAElB,gBAAgB,EAChB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,kBAAkB,EAAgD,MAAM,2BAA2B,CAAC;AAoBlH,aAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KAC/D,CAAC;CACF,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;IACvC,OAAO,EAAE,YAAY,CAAC;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;IAkF3B,KAAK,EAAE,kBAAkB,CA0BvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAsC/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CA0J9B;CACF"}
|
|
@@ -27,7 +27,7 @@ export class SearchController extends AbstractController {
|
|
|
27
27
|
product: {
|
|
28
28
|
click: (e, result) => {
|
|
29
29
|
// store scroll position
|
|
30
|
-
if (this.config.settings
|
|
30
|
+
if (this.config.settings?.infinite) {
|
|
31
31
|
const stringyParams = this.storage.get('lastStringyParams');
|
|
32
32
|
const scrollMap = {};
|
|
33
33
|
scrollMap[stringyParams] = window.scrollY;
|
|
@@ -75,7 +75,7 @@ export class SearchController extends AbstractController {
|
|
|
75
75
|
// no param change - not searching
|
|
76
76
|
return;
|
|
77
77
|
}
|
|
78
|
-
if (this.config.settings
|
|
78
|
+
if (this.config.settings?.infinite) {
|
|
79
79
|
// TODO: refactor this
|
|
80
80
|
const preventBackfill = this.config.settings.infinite?.backfill && !this.store.results.length && params.pagination?.page > this.config.settings.infinite.backfill;
|
|
81
81
|
const dontBackfill = !this.config.settings.infinite?.backfill && !this.store.results.length && params.pagination?.page > 1;
|
|
@@ -87,22 +87,24 @@ export class SearchController extends AbstractController {
|
|
|
87
87
|
}
|
|
88
88
|
const searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
|
|
89
89
|
const [meta, response] = await this.client.search(params);
|
|
90
|
+
// @ts-ignore
|
|
90
91
|
if (!response.meta) {
|
|
91
92
|
/**
|
|
92
93
|
* MockClient will overwrite the client search() method and use
|
|
93
94
|
* SearchData to return mock data which already contains meta data
|
|
94
95
|
*/
|
|
96
|
+
// @ts-ignore
|
|
95
97
|
response.meta = meta;
|
|
96
98
|
}
|
|
97
99
|
// infinite functionality
|
|
98
100
|
// if params.page > 1 and infinite setting exists we should append results
|
|
99
|
-
if (this.config.settings
|
|
101
|
+
if (this.config.settings?.infinite && params.pagination?.page > 1) {
|
|
100
102
|
// if no results fetch results...
|
|
101
103
|
let previousResults = this.store.data?.results || [];
|
|
102
104
|
if (this.config.settings?.infinite.backfill && !previousResults.length) {
|
|
103
105
|
// figure out how many pages of results to backfill and wait on all responses
|
|
104
106
|
const backfills = [];
|
|
105
|
-
for (let page = 1; page < params.pagination
|
|
107
|
+
for (let page = 1; page < params.pagination?.page; page++) {
|
|
106
108
|
const backfillParams = deepmerge({ ...params }, { pagination: { page } });
|
|
107
109
|
backfills.push(this.client.search(backfillParams));
|
|
108
110
|
}
|
|
@@ -137,6 +139,7 @@ export class SearchController extends AbstractController {
|
|
|
137
139
|
afterSearchProfile.stop();
|
|
138
140
|
this.log.profile(afterSearchProfile);
|
|
139
141
|
// update the store
|
|
142
|
+
// @ts-ignore
|
|
140
143
|
this.store.update(response);
|
|
141
144
|
const afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
142
145
|
try {
|
|
@@ -250,7 +253,7 @@ export class SearchController extends AbstractController {
|
|
|
250
253
|
this.use(this.config);
|
|
251
254
|
}
|
|
252
255
|
get params() {
|
|
253
|
-
const params = deepmerge({ ...getSearchParams(this.urlManager.state) }, this.config.globals);
|
|
256
|
+
const params = deepmerge({ ...getSearchParams(this.urlManager.state) }, this.config.globals || {});
|
|
254
257
|
// redirect setting
|
|
255
258
|
if (!this.config.settings?.redirects?.merchandising || this.store.loaded) {
|
|
256
259
|
params.search = params.search || {};
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AbstractController } from './Abstract/AbstractController';
|
|
2
2
|
import type { EventManager, Middleware, Next } from '@searchspring/snap-event-manager';
|
|
3
3
|
import type { Client } from '@searchspring/snap-client';
|
|
4
|
-
import type {
|
|
4
|
+
import type { SearchStore, AutocompleteStore, FinderStore, RecommendationStore, StoreConfig, SearchStoreConfig, FinderStoreConfig, AutocompleteStoreConfig, RecommendationStoreConfig } from '@searchspring/snap-store-mobx';
|
|
5
5
|
import type { Tracker, ProductViewEvent } from '@searchspring/snap-tracker';
|
|
6
6
|
import type { Profiler } from '@searchspring/snap-profiler';
|
|
7
7
|
import type { UrlManager } from '@searchspring/snap-url-manager';
|
|
@@ -12,7 +12,7 @@ declare global {
|
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
export declare type NextEvent = Next;
|
|
15
|
-
export declare type PluginFunction = (cntrlr: AbstractController, ...args: any
|
|
15
|
+
export declare type PluginFunction = (cntrlr: AbstractController, ...args: any) => Promise<void>;
|
|
16
16
|
export declare type PluginGrouping = [func: PluginFunction, ...args: unknown[]];
|
|
17
17
|
export declare type BeforeSearchObj = {
|
|
18
18
|
controller: AbstractController;
|
|
@@ -35,7 +35,7 @@ export declare enum ControllerTypes {
|
|
|
35
35
|
}
|
|
36
36
|
export declare type ControllerServices = {
|
|
37
37
|
client: Client;
|
|
38
|
-
store:
|
|
38
|
+
store: SearchStore | AutocompleteStore | FinderStore | RecommendationStore;
|
|
39
39
|
urlManager: UrlManager;
|
|
40
40
|
eventManager: EventManager;
|
|
41
41
|
profiler: Profiler;
|
package/dist/esm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AAEvF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EACX,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import type { ImmutableUrlState } from '@searchspring/snap-url-manager';
|
|
2
|
+
export declare function getSearchParams(state: ImmutableUrlState): Record<string, any>;
|
|
2
3
|
//# sourceMappingURL=getParams.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getParams.d.ts","sourceRoot":"","sources":["../../../src/utils/getParams.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getParams.d.ts","sourceRoot":"","sources":["../../../src/utils/getParams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAqCxE,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAgF7E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@searchspring/snap-controller",
|
|
3
|
-
"version": "0.27.
|
|
3
|
+
"version": "0.27.6",
|
|
4
4
|
"description": "Snap Controllers",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -20,21 +20,21 @@
|
|
|
20
20
|
"test:watch": "jest --watch"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@searchspring/snap-toolbox": "^0.27.
|
|
23
|
+
"@searchspring/snap-toolbox": "^0.27.6",
|
|
24
24
|
"deepmerge": "^4.2.2"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@searchspring/snap-client": "^0.27.
|
|
28
|
-
"@searchspring/snap-event-manager": "^0.27.
|
|
29
|
-
"@searchspring/snap-logger": "^0.27.
|
|
30
|
-
"@searchspring/snap-profiler": "^0.27.
|
|
31
|
-
"@searchspring/snap-store-mobx": "^0.27.
|
|
32
|
-
"@searchspring/snap-tracker": "^0.27.
|
|
33
|
-
"@searchspring/snap-url-manager": "^0.27.
|
|
27
|
+
"@searchspring/snap-client": "^0.27.6",
|
|
28
|
+
"@searchspring/snap-event-manager": "^0.27.6",
|
|
29
|
+
"@searchspring/snap-logger": "^0.27.6",
|
|
30
|
+
"@searchspring/snap-profiler": "^0.27.6",
|
|
31
|
+
"@searchspring/snap-store-mobx": "^0.27.6",
|
|
32
|
+
"@searchspring/snap-tracker": "^0.27.6",
|
|
33
|
+
"@searchspring/snap-url-manager": "^0.27.6"
|
|
34
34
|
},
|
|
35
35
|
"sideEffects": false,
|
|
36
36
|
"files": [
|
|
37
37
|
"dist/**/*"
|
|
38
38
|
],
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "13df7179bc5f3b4b6ddd7c3b9933a78ef020aa92"
|
|
40
40
|
}
|