@searchspring/snap-controller 0.32.0 → 0.34.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Abstract/AbstractController.d.ts +1 -0
- package/dist/cjs/Abstract/AbstractController.d.ts.map +1 -1
- package/dist/cjs/Abstract/AbstractController.js +38 -0
- package/dist/cjs/Autocomplete/AutocompleteController.d.ts +1 -0
- package/dist/cjs/Autocomplete/AutocompleteController.d.ts.map +1 -1
- package/dist/cjs/Autocomplete/AutocompleteController.js +91 -7
- package/dist/cjs/Finder/FinderController.d.ts.map +1 -1
- package/dist/cjs/Finder/FinderController.js +16 -0
- package/dist/cjs/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/cjs/Recommendation/RecommendationController.js +2 -1
- package/dist/cjs/Search/SearchController.d.ts +2 -0
- package/dist/cjs/Search/SearchController.d.ts.map +1 -1
- package/dist/cjs/Search/SearchController.js +73 -56
- package/dist/esm/Abstract/AbstractController.d.ts +1 -0
- package/dist/esm/Abstract/AbstractController.d.ts.map +1 -1
- package/dist/esm/Abstract/AbstractController.js +37 -0
- package/dist/esm/Autocomplete/AutocompleteController.d.ts +1 -0
- package/dist/esm/Autocomplete/AutocompleteController.d.ts.map +1 -1
- package/dist/esm/Autocomplete/AutocompleteController.js +89 -5
- package/dist/esm/Finder/FinderController.d.ts.map +1 -1
- package/dist/esm/Finder/FinderController.js +16 -0
- package/dist/esm/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/esm/Recommendation/RecommendationController.js +2 -1
- package/dist/esm/Search/SearchController.d.ts +2 -0
- package/dist/esm/Search/SearchController.d.ts.map +1 -1
- package/dist/esm/Search/SearchController.js +37 -22
- package/package.json +10 -10
|
@@ -25,6 +25,7 @@ export declare abstract class AbstractController {
|
|
|
25
25
|
};
|
|
26
26
|
protected _initialized: boolean;
|
|
27
27
|
get initialized(): boolean;
|
|
28
|
+
handleError: (err: unknown) => void;
|
|
28
29
|
constructor(config: ControllerConfig, { client, store, urlManager, eventManager, profiler, logger, tracker }: ControllerServices, context?: ContextVariables);
|
|
29
30
|
createTargeter(target: Target, onTarget: OnTarget, document?: Document): DomTargeter | undefined;
|
|
30
31
|
addTargeter(target: DomTargeter): DomTargeter | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractController.d.ts","sourceRoot":"","sources":["../../../src/Abstract/AbstractController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"AbstractController.d.ts","sourceRoot":"","sources":["../../../src/Abstract/AbstractController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEpH,8BAAsB,kBAAkB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,SAAc;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,gBAAgB,CAAC;IAE1B,SAAS,EAAE;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;KAC3B,CAAM;IAEP,SAAS,CAAC,YAAY,UAAS;IAE/B,IAAI,WAAW,IAAI,OAAO,CAEzB;IAEM,WAAW,QAAS,OAAO,KAAG,IAAI,CA0CvC;gBAGD,MAAM,EAAE,gBAAgB,EACxB,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,GAAE,gBAAqB;IA2DxB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS;IAIhG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS;IASnD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgD3B,QAAQ,IAAI,IAAI;aAMP,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAE1B,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAIpD,GAAG,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;CAoC1C"}
|
|
@@ -51,9 +51,46 @@ var AbstractController = /** @class */ (function () {
|
|
|
51
51
|
function AbstractController(config, _a, context) {
|
|
52
52
|
var client = _a.client, store = _a.store, urlManager = _a.urlManager, eventManager = _a.eventManager, profiler = _a.profiler, logger = _a.logger, tracker = _a.tracker;
|
|
53
53
|
if (context === void 0) { context = {}; }
|
|
54
|
+
var _this = this;
|
|
54
55
|
this.type = 'abstract';
|
|
55
56
|
this.targeters = {};
|
|
56
57
|
this._initialized = false;
|
|
58
|
+
this.handleError = function (err) {
|
|
59
|
+
var event;
|
|
60
|
+
if (err instanceof ErrorEvent) {
|
|
61
|
+
event = err;
|
|
62
|
+
}
|
|
63
|
+
else if (err instanceof Error) {
|
|
64
|
+
event = new ErrorEvent('error', {
|
|
65
|
+
error: err,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
else if (typeof err === 'string') {
|
|
69
|
+
event = new ErrorEvent('error', {
|
|
70
|
+
error: new Error(err),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
else if (typeof err === 'object' && Object.keys(err).length) {
|
|
74
|
+
try {
|
|
75
|
+
event = new ErrorEvent('error', {
|
|
76
|
+
error: new Error(JSON.stringify(err)),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch (e) { }
|
|
80
|
+
}
|
|
81
|
+
if (event) {
|
|
82
|
+
var filename = event.filename, colno = event.colno, lineno = event.lineno, stack = event.error.stack, message = event.message, timeStamp = event.timeStamp;
|
|
83
|
+
var beaconPayload = {
|
|
84
|
+
filename: filename || "".concat(_this.id, " (").concat(_this.type.charAt(0).toUpperCase() + _this.type.slice(1), "Controller)"),
|
|
85
|
+
stack: stack,
|
|
86
|
+
message: message,
|
|
87
|
+
colno: colno,
|
|
88
|
+
lineno: lineno,
|
|
89
|
+
errortimestamp: timeStamp,
|
|
90
|
+
};
|
|
91
|
+
_this.tracker.track.error(beaconPayload);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
57
94
|
if (typeof config != 'object' || typeof config.id != 'string' || !config.id.match(/^[a-zA-Z0-9_-]*$/)) {
|
|
58
95
|
throw new Error("Invalid config passed to controller. The \"id\" attribute must be an alphanumeric string.");
|
|
59
96
|
}
|
|
@@ -156,6 +193,7 @@ var AbstractController = /** @class */ (function () {
|
|
|
156
193
|
err_2 = _a.sent();
|
|
157
194
|
if (err_2) {
|
|
158
195
|
console.error(err_2);
|
|
196
|
+
this.handleError(err_2);
|
|
159
197
|
}
|
|
160
198
|
return [3 /*break*/, 7];
|
|
161
199
|
case 7:
|
|
@@ -27,6 +27,7 @@ export declare class AutocompleteController extends AbstractController {
|
|
|
27
27
|
escKey: (e: KeyboardEvent) => void;
|
|
28
28
|
focus: (e: FocusEvent) => void;
|
|
29
29
|
formSubmit: (e: React.FormEvent<HTMLInputElement>) => Promise<void>;
|
|
30
|
+
formElementChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
30
31
|
keyUp: (e: KeyboardEvent) => void;
|
|
31
32
|
timeoutDelay: NodeJS.Timeout | undefined;
|
|
32
33
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,EAAkD,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEnJ,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAG1E,eAAO,MAAM,WAAW,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,EAAkD,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEnJ,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAG1E,eAAO,MAAM,WAAW,MAAM,CAAC;AAqB/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,CA0CrC;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;mCA0ChD,MAAM,WAAW,CAAC,gBAAgB,CAAC,KAAG,IAAI;uBAqBtD,aAAa,KAAG,IAAI;;;;uBA8CpB,UAAU,KAAG,IAAI;;MAS5B;IAEF,MAAM,IAAI,IAAI;IAgBR,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwE3B,cAAc,QAAa,QAAQ,IAAI,CAAC,CAuBtC;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAiH9B;CACF"}
|
|
@@ -84,6 +84,7 @@ var defaultConfig = {
|
|
|
84
84
|
settings: {
|
|
85
85
|
initializeFromUrl: true,
|
|
86
86
|
syncInputs: true,
|
|
87
|
+
serializeForm: false,
|
|
87
88
|
facets: {
|
|
88
89
|
trim: true,
|
|
89
90
|
pinFiltered: true,
|
|
@@ -239,6 +240,25 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
239
240
|
}
|
|
240
241
|
});
|
|
241
242
|
}); },
|
|
243
|
+
formElementChange: function (e) {
|
|
244
|
+
var _a, _b, _c, _d, _e;
|
|
245
|
+
var input = e.target;
|
|
246
|
+
var form = input === null || input === void 0 ? void 0 : input.form;
|
|
247
|
+
var searchInput = form === null || form === void 0 ? void 0 : form.querySelector("input[".concat(INPUT_ATTRIBUTE, "]"));
|
|
248
|
+
if (form && searchInput && ((_a = _this.config.settings) === null || _a === void 0 ? void 0 : _a.serializeForm)) {
|
|
249
|
+
// get other form parameters (except the input)
|
|
250
|
+
var formParameters = getFormParameters(form, function (elem) {
|
|
251
|
+
return elem != searchInput;
|
|
252
|
+
});
|
|
253
|
+
// set parameters as globals
|
|
254
|
+
_this.store.setService('urlManager', _this.store.services.urlManager.reset().withGlobals(formParameters));
|
|
255
|
+
_this.store.reset();
|
|
256
|
+
// rebuild trending terms with new UrlManager settings
|
|
257
|
+
if (((_c = (_b = _this.config.settings) === null || _b === void 0 ? void 0 : _b.trending) === null || _c === void 0 ? void 0 : _c.limit) && ((_e = (_d = _this.config.settings) === null || _d === void 0 ? void 0 : _d.trending) === null || _e === void 0 ? void 0 : _e.limit) > 0) {
|
|
258
|
+
_this.searchTrending();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
},
|
|
242
262
|
keyUp: function (e) {
|
|
243
263
|
var _a, _b, _c, _d, _e;
|
|
244
264
|
// ignore enter and escape keys
|
|
@@ -453,6 +473,7 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
453
473
|
break;
|
|
454
474
|
}
|
|
455
475
|
this.store.loading = false;
|
|
476
|
+
this.handleError(err_6);
|
|
456
477
|
}
|
|
457
478
|
return [3 /*break*/, 16];
|
|
458
479
|
case 16: return [2 /*return*/];
|
|
@@ -525,10 +546,19 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
525
546
|
var urlState = this.urlManager.state;
|
|
526
547
|
var params = (0, deepmerge_1.default)(__assign({}, (0, getParams_1.getSearchParams)(urlState)), this.config.globals);
|
|
527
548
|
var userId = this.tracker.getUserId();
|
|
549
|
+
var sessionId = this.tracker.getContext().sessionId;
|
|
550
|
+
var pageLoadId = this.tracker.getContext().pageLoadId;
|
|
551
|
+
params.tracking = params.tracking || {};
|
|
552
|
+
params.tracking.domain = window.location.href;
|
|
528
553
|
if (userId) {
|
|
529
|
-
params.tracking = params.tracking || {};
|
|
530
554
|
params.tracking.userId = userId;
|
|
531
555
|
}
|
|
556
|
+
if (sessionId) {
|
|
557
|
+
params.tracking.sessionId = sessionId;
|
|
558
|
+
}
|
|
559
|
+
if (pageLoadId) {
|
|
560
|
+
params.tracking.pageLoadId = pageLoadId;
|
|
561
|
+
}
|
|
532
562
|
if (!((_b = (_a = this.config.globals) === null || _a === void 0 ? void 0 : _a.personalization) === null || _b === void 0 ? void 0 : _b.disabled)) {
|
|
533
563
|
var cartItems = this.tracker.cookies.cart.get();
|
|
534
564
|
if (cartItems.length) {
|
|
@@ -618,12 +648,14 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
618
648
|
var _this = this;
|
|
619
649
|
var inputs = document.querySelectorAll("input[".concat(INPUT_ATTRIBUTE, "]"));
|
|
620
650
|
inputs === null || inputs === void 0 ? void 0 : inputs.forEach(function (input) {
|
|
621
|
-
var _a;
|
|
622
651
|
input.removeEventListener('keyup', _this.handlers.input.keyUp);
|
|
623
652
|
input.removeEventListener('keydown', _this.handlers.input.enterKey);
|
|
624
653
|
input.removeEventListener('keydown', _this.handlers.input.escKey);
|
|
625
654
|
input.removeEventListener('focus', _this.handlers.input.focus);
|
|
626
|
-
(
|
|
655
|
+
if (input.form) {
|
|
656
|
+
input.form.removeEventListener('submit', _this.handlers.input.formSubmit);
|
|
657
|
+
unbindFormParameters(input.form, _this.handlers.input.formElementChange);
|
|
658
|
+
}
|
|
627
659
|
});
|
|
628
660
|
document.removeEventListener('click', this.handlers.document.click);
|
|
629
661
|
};
|
|
@@ -644,7 +676,7 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
644
676
|
this.unbind();
|
|
645
677
|
inputs = document.querySelectorAll(this.config.selector);
|
|
646
678
|
inputs.forEach(function (input) {
|
|
647
|
-
var _a, _b;
|
|
679
|
+
var _a, _b, _c;
|
|
648
680
|
input.setAttribute('spellcheck', 'false');
|
|
649
681
|
input.setAttribute('autocomplete', 'off');
|
|
650
682
|
input.setAttribute(INPUT_ATTRIBUTE, '');
|
|
@@ -657,16 +689,26 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
657
689
|
var form = input.form;
|
|
658
690
|
var formActionUrl;
|
|
659
691
|
if (_this.config.action) {
|
|
660
|
-
formActionUrl = _this.config.action;
|
|
661
692
|
input.addEventListener('keydown', _this.handlers.input.enterKey);
|
|
693
|
+
formActionUrl = _this.config.action;
|
|
662
694
|
}
|
|
663
695
|
else if (form) {
|
|
664
|
-
formActionUrl = form.action;
|
|
665
696
|
form.addEventListener('submit', _this.handlers.input.formSubmit);
|
|
697
|
+
formActionUrl = form.action || '';
|
|
698
|
+
if ((_c = _this.config.settings) === null || _c === void 0 ? void 0 : _c.serializeForm) {
|
|
699
|
+
bindFormParameters(form, _this.handlers.input.formElementChange, function (elem) {
|
|
700
|
+
return elem != input;
|
|
701
|
+
});
|
|
702
|
+
var formParameters = getFormParameters(form, function (elem) {
|
|
703
|
+
return elem != input;
|
|
704
|
+
});
|
|
705
|
+
// set parameters as globals
|
|
706
|
+
_this.store.setService('urlManager', _this.urlManager.reset().withGlobals(formParameters));
|
|
707
|
+
}
|
|
666
708
|
}
|
|
667
709
|
// set the root URL on urlManager
|
|
668
710
|
if (formActionUrl) {
|
|
669
|
-
_this.store.setService('urlManager', _this.urlManager.withConfig(function (translatorConfig) {
|
|
711
|
+
_this.store.setService('urlManager', _this.store.services.urlManager.withConfig(function (translatorConfig) {
|
|
670
712
|
return __assign(__assign({}, translatorConfig), { urlRoot: formActionUrl });
|
|
671
713
|
}));
|
|
672
714
|
}
|
|
@@ -702,3 +744,45 @@ function timeout(time) {
|
|
|
702
744
|
});
|
|
703
745
|
});
|
|
704
746
|
}
|
|
747
|
+
// for grabbing other parameters from the form and using them in UrlManager
|
|
748
|
+
var INPUT_TYPE_BLACKLIST = ['file', 'reset', 'submit', 'button', 'image', 'password'];
|
|
749
|
+
function getFormParameters(form, filterFn) {
|
|
750
|
+
var parameters = {};
|
|
751
|
+
if (typeof form == 'object' && form.nodeName == 'FORM') {
|
|
752
|
+
for (var i = form.elements.length - 1; i >= 0; i--) {
|
|
753
|
+
var elem = form.elements[i];
|
|
754
|
+
if (typeof filterFn == 'function' && !filterFn(elem)) {
|
|
755
|
+
continue;
|
|
756
|
+
}
|
|
757
|
+
if (elem.name && !INPUT_TYPE_BLACKLIST.includes(elem.type)) {
|
|
758
|
+
if ((elem.type != 'checkbox' && elem.type != 'radio') || elem.checked) {
|
|
759
|
+
parameters[elem.name] = elem.value;
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
return parameters;
|
|
765
|
+
}
|
|
766
|
+
function bindFormParameters(form, fn, filterFn) {
|
|
767
|
+
if (typeof form == 'object' && form.nodeName == 'FORM') {
|
|
768
|
+
for (var i = form.elements.length - 1; i >= 0; i--) {
|
|
769
|
+
var elem = form.elements[i];
|
|
770
|
+
if (typeof filterFn == 'function' && !filterFn(elem)) {
|
|
771
|
+
continue;
|
|
772
|
+
}
|
|
773
|
+
if (elem.name && !INPUT_TYPE_BLACKLIST.includes(elem.type)) {
|
|
774
|
+
elem.addEventListener('change', fn);
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
function unbindFormParameters(form, fn) {
|
|
780
|
+
if (typeof form == 'object' && form.nodeName == 'FORM') {
|
|
781
|
+
for (var i = form.elements.length - 1; i >= 0; i--) {
|
|
782
|
+
var elem = form.elements[i];
|
|
783
|
+
if (elem.name && !INPUT_TYPE_BLACKLIST.includes(elem.type)) {
|
|
784
|
+
elem.removeEventListener('change', fn);
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FinderController.d.ts","sourceRoot":"","sources":["../../../src/Finder/FinderController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,sBAAsB,EAAmC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiB9H,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;gBAGtC,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA2C3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"FinderController.d.ts","sourceRoot":"","sources":["../../../src/Finder/FinderController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,sBAAsB,EAAmC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiB9H,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;gBAGtC,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA2C3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+BhC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAe5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAqH9B;CACF"}
|
|
@@ -264,6 +264,7 @@ var FinderController = /** @class */ (function (_super) {
|
|
|
264
264
|
break;
|
|
265
265
|
}
|
|
266
266
|
this.store.loading = false;
|
|
267
|
+
this.handleError(err_5);
|
|
267
268
|
}
|
|
268
269
|
return [3 /*break*/, 18];
|
|
269
270
|
case 18: return [2 /*return*/];
|
|
@@ -322,12 +323,27 @@ var FinderController = /** @class */ (function (_super) {
|
|
|
322
323
|
Object.defineProperty(FinderController.prototype, "params", {
|
|
323
324
|
get: function () {
|
|
324
325
|
var urlState = this.urlManager.state;
|
|
326
|
+
var userId = this.tracker.getUserId();
|
|
327
|
+
var sessionId = this.tracker.getContext().sessionId;
|
|
328
|
+
var pageLoadId = this.tracker.getContext().pageLoadId;
|
|
329
|
+
var tracking = {};
|
|
330
|
+
if (userId) {
|
|
331
|
+
tracking.userId = userId;
|
|
332
|
+
}
|
|
333
|
+
if (sessionId) {
|
|
334
|
+
tracking.sessionId = sessionId;
|
|
335
|
+
}
|
|
336
|
+
if (pageLoadId) {
|
|
337
|
+
tracking.pageLoadId = pageLoadId;
|
|
338
|
+
}
|
|
339
|
+
tracking.domain = window.location.href;
|
|
325
340
|
// get only the finder fields and disable auto drill down
|
|
326
341
|
var defaultParams = {
|
|
327
342
|
facets: {
|
|
328
343
|
include: this.config.fields.map(function (fieldConfig) { return fieldConfig.field; }),
|
|
329
344
|
autoDrillDown: false,
|
|
330
345
|
},
|
|
346
|
+
tracking: tracking,
|
|
331
347
|
};
|
|
332
348
|
var params = (0, deepmerge_1.default)(__assign({}, (0, getParams_1.getSearchParams)(urlState)), (0, deepmerge_1.default)(defaultParams, this.config.globals));
|
|
333
349
|
return params;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,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;AAEzE,OAAO,KAAK,EAAE,8BAA8B,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,aAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QACjD,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KACrD,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,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,
|
|
1
|
+
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,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;AAEzE,OAAO,KAAK,EAAE,8BAA8B,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,aAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QACjD,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KACrD,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,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,CAuB1C;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAsG9B;CACF"}
|
|
@@ -383,6 +383,7 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
383
383
|
break;
|
|
384
384
|
}
|
|
385
385
|
this.store.loading = false;
|
|
386
|
+
this.handleError(err_4);
|
|
386
387
|
}
|
|
387
388
|
return [3 /*break*/, 18];
|
|
388
389
|
case 18: return [2 /*return*/];
|
|
@@ -428,7 +429,7 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
428
429
|
get: function () {
|
|
429
430
|
var _a, _b;
|
|
430
431
|
var params = __assign({ tag: this.config.tag, batched: this.config.batched, branch: this.config.branch || 'production', order: (_b = (_a = this.context) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.order }, this.config.globals);
|
|
431
|
-
var shopperId = this.tracker.
|
|
432
|
+
var shopperId = this.tracker.getContext().shopperId;
|
|
432
433
|
var cart = this.tracker.cookies.cart.get();
|
|
433
434
|
var lastViewed = this.tracker.cookies.viewed.get();
|
|
434
435
|
if (shopperId) {
|
|
@@ -15,10 +15,12 @@ export declare class SearchController extends AbstractController {
|
|
|
15
15
|
store: SearchStore;
|
|
16
16
|
config: SearchControllerConfig;
|
|
17
17
|
storage: StorageStore;
|
|
18
|
+
private previousResults;
|
|
18
19
|
constructor(config: SearchControllerConfig, { client, store, urlManager, eventManager, profiler, logger, tracker }: ControllerServices, context?: ContextVariables);
|
|
19
20
|
track: SearchTrackMethods;
|
|
20
21
|
get params(): SearchRequestModel;
|
|
21
22
|
search: () => Promise<void>;
|
|
22
23
|
}
|
|
24
|
+
export declare function getStorableRequestParams(request: SearchRequestModel): SearchRequestModel;
|
|
23
25
|
export {};
|
|
24
26
|
//# sourceMappingURL=SearchController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAErF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAkD,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE7I,OAAO,KAAK,EAAE,kBAAkB,EAA2E,MAAM,2BAA2B,CAAC;AAoB7I,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;
|
|
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,EAAE,sBAAsB,EAAkD,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE7I,OAAO,KAAK,EAAE,kBAAkB,EAA2E,MAAM,2BAA2B,CAAC;AAoB7I,aAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KAC/D,CAAC;CACF,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;IACvC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,eAAe,CAAwC;gBAG9D,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA+F3B,KAAK,EAAE,kBAAkB,CA+BvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAgD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CA8J9B;CACF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAiBxF"}
|
|
@@ -74,7 +74,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
74
74
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
75
75
|
};
|
|
76
76
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
77
|
-
exports.SearchController = void 0;
|
|
77
|
+
exports.getStorableRequestParams = exports.SearchController = void 0;
|
|
78
78
|
var deepmerge_1 = __importDefault(require("deepmerge"));
|
|
79
79
|
var AbstractController_1 = require("../Abstract/AbstractController");
|
|
80
80
|
var snap_store_mobx_1 = require("@searchspring/snap-store-mobx");
|
|
@@ -104,33 +104,25 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
104
104
|
var _b, _c, _d;
|
|
105
105
|
_this = _super.call(this, config, { client: client, store: store, urlManager: urlManager, eventManager: eventManager, profiler: profiler, logger: logger, tracker: tracker }, context) || this;
|
|
106
106
|
_this.type = types_1.ControllerTypes.search;
|
|
107
|
+
_this.previousResults = [];
|
|
107
108
|
_this.track = {
|
|
108
109
|
product: {
|
|
109
110
|
click: function (e, result) {
|
|
110
|
-
var _a, _b
|
|
111
|
+
var _a, _b;
|
|
111
112
|
// store scroll position
|
|
112
113
|
if ((_a = _this.config.settings) === null || _a === void 0 ? void 0 : _a.infinite) {
|
|
113
114
|
var stringyParams = _this.storage.get('lastStringyParams');
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if ((paramsObj === null || paramsObj === void 0 ? void 0 : paramsObj.search) && Object.keys(paramsObj === null || paramsObj === void 0 ? void 0 : paramsObj.search).length === 0) {
|
|
118
|
-
// if redirectResponse was the only key, also delete the empty search object
|
|
119
|
-
delete paramsObj.search;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
if (paramsObj === null || paramsObj === void 0 ? void 0 : paramsObj.personalization) {
|
|
123
|
-
paramsObj === null || paramsObj === void 0 ? true : delete paramsObj.personalization;
|
|
124
|
-
}
|
|
125
|
-
stringyParams = JSON.stringify(paramsObj);
|
|
115
|
+
stringyParams = JSON.parse(stringyParams);
|
|
116
|
+
var storableRequestParams = getStorableRequestParams(stringyParams);
|
|
117
|
+
stringyParams = JSON.stringify(storableRequestParams);
|
|
126
118
|
var scrollMap = {};
|
|
127
119
|
scrollMap[stringyParams] = window.scrollY;
|
|
128
120
|
_this.storage.set('scrollMap', scrollMap);
|
|
129
121
|
}
|
|
130
122
|
// track
|
|
131
|
-
var
|
|
123
|
+
var _c = result.attributes, intellisuggestData = _c.intellisuggestData, intellisuggestSignature = _c.intellisuggestSignature;
|
|
132
124
|
var target = e.target;
|
|
133
|
-
var href = (target === null || target === void 0 ? void 0 : target.href) || ((
|
|
125
|
+
var href = (target === null || target === void 0 ? void 0 : target.href) || ((_b = result.mappings.core) === null || _b === void 0 ? void 0 : _b.url) || undefined;
|
|
134
126
|
var event = _this.tracker.track.product.click({
|
|
135
127
|
intellisuggestData: intellisuggestData,
|
|
136
128
|
intellisuggestSignature: intellisuggestSignature,
|
|
@@ -143,32 +135,32 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
143
135
|
};
|
|
144
136
|
_this.search = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
145
137
|
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;
|
|
146
|
-
var _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
147
|
-
return __generator(this, function (
|
|
148
|
-
switch (
|
|
138
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
139
|
+
return __generator(this, function (_m) {
|
|
140
|
+
switch (_m.label) {
|
|
149
141
|
case 0:
|
|
150
142
|
if (!!this.initialized) return [3 /*break*/, 2];
|
|
151
143
|
return [4 /*yield*/, this.init()];
|
|
152
144
|
case 1:
|
|
153
|
-
|
|
154
|
-
|
|
145
|
+
_m.sent();
|
|
146
|
+
_m.label = 2;
|
|
155
147
|
case 2:
|
|
156
148
|
params = this.params;
|
|
157
|
-
|
|
149
|
+
_m.label = 3;
|
|
158
150
|
case 3:
|
|
159
|
-
|
|
160
|
-
|
|
151
|
+
_m.trys.push([3, 20, , 21]);
|
|
152
|
+
_m.label = 4;
|
|
161
153
|
case 4:
|
|
162
|
-
|
|
154
|
+
_m.trys.push([4, 6, , 7]);
|
|
163
155
|
return [4 /*yield*/, this.eventManager.fire('beforeSearch', {
|
|
164
156
|
controller: this,
|
|
165
157
|
request: params,
|
|
166
158
|
})];
|
|
167
159
|
case 5:
|
|
168
|
-
|
|
160
|
+
_m.sent();
|
|
169
161
|
return [3 /*break*/, 7];
|
|
170
162
|
case 6:
|
|
171
|
-
err_1 =
|
|
163
|
+
err_1 = _m.sent();
|
|
172
164
|
if ((err_1 === null || err_1 === void 0 ? void 0 : err_1.message) == 'cancelled') {
|
|
173
165
|
this.log.warn("'beforeSearch' middleware cancelled");
|
|
174
166
|
return [2 /*return*/];
|
|
@@ -197,7 +189,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
197
189
|
searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
|
|
198
190
|
return [4 /*yield*/, this.client.search(params)];
|
|
199
191
|
case 8:
|
|
200
|
-
_a =
|
|
192
|
+
_a = _m.sent(), meta = _a[0], response = _a[1];
|
|
201
193
|
// @ts-ignore
|
|
202
194
|
if (!response.meta) {
|
|
203
195
|
/**
|
|
@@ -208,7 +200,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
208
200
|
response.meta = meta;
|
|
209
201
|
}
|
|
210
202
|
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];
|
|
211
|
-
previousResults_1 =
|
|
203
|
+
previousResults_1 = this.previousResults;
|
|
212
204
|
if (!(((_j = this.config.settings) === null || _j === void 0 ? void 0 : _j.infinite.backfill) && !previousResults_1.length)) return [3 /*break*/, 10];
|
|
213
205
|
backfills = [];
|
|
214
206
|
for (page = 1; page < ((_k = params.pagination) === null || _k === void 0 ? void 0 : _k.page); page++) {
|
|
@@ -217,32 +209,32 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
217
209
|
}
|
|
218
210
|
return [4 /*yield*/, Promise.all(backfills)];
|
|
219
211
|
case 9:
|
|
220
|
-
backfillResponses =
|
|
212
|
+
backfillResponses = _m.sent();
|
|
221
213
|
backfillResponses.map(function (_a) {
|
|
222
214
|
var meta = _a[0], data = _a[1];
|
|
223
215
|
previousResults_1 = previousResults_1.concat(data.results);
|
|
224
216
|
});
|
|
225
|
-
|
|
217
|
+
_m.label = 10;
|
|
226
218
|
case 10:
|
|
227
219
|
response.results = __spreadArray(__spreadArray([], previousResults_1, true), (response.results || []), true);
|
|
228
|
-
|
|
220
|
+
_m.label = 11;
|
|
229
221
|
case 11:
|
|
230
222
|
searchProfile.stop();
|
|
231
223
|
this.log.profile(searchProfile);
|
|
232
224
|
afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params }).start();
|
|
233
|
-
|
|
225
|
+
_m.label = 12;
|
|
234
226
|
case 12:
|
|
235
|
-
|
|
227
|
+
_m.trys.push([12, 14, , 15]);
|
|
236
228
|
return [4 /*yield*/, this.eventManager.fire('afterSearch', {
|
|
237
229
|
controller: this,
|
|
238
230
|
request: params,
|
|
239
231
|
response: response,
|
|
240
232
|
})];
|
|
241
233
|
case 13:
|
|
242
|
-
|
|
234
|
+
_m.sent();
|
|
243
235
|
return [3 /*break*/, 15];
|
|
244
236
|
case 14:
|
|
245
|
-
err_2 =
|
|
237
|
+
err_2 = _m.sent();
|
|
246
238
|
if ((err_2 === null || err_2 === void 0 ? void 0 : err_2.message) == 'cancelled') {
|
|
247
239
|
this.log.warn("'afterSearch' middleware cancelled");
|
|
248
240
|
afterSearchProfile.stop();
|
|
@@ -256,23 +248,25 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
256
248
|
case 15:
|
|
257
249
|
afterSearchProfile.stop();
|
|
258
250
|
this.log.profile(afterSearchProfile);
|
|
251
|
+
if ((_l = this.config.settings) === null || _l === void 0 ? void 0 : _l.infinite) {
|
|
252
|
+
this.previousResults = JSON.parse(JSON.stringify(response.results));
|
|
253
|
+
}
|
|
259
254
|
// update the store
|
|
260
|
-
// @ts-ignore
|
|
261
255
|
this.store.update(response);
|
|
262
256
|
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
263
|
-
|
|
257
|
+
_m.label = 16;
|
|
264
258
|
case 16:
|
|
265
|
-
|
|
259
|
+
_m.trys.push([16, 18, , 19]);
|
|
266
260
|
return [4 /*yield*/, this.eventManager.fire('afterStore', {
|
|
267
261
|
controller: this,
|
|
268
262
|
request: params,
|
|
269
263
|
response: response,
|
|
270
264
|
})];
|
|
271
265
|
case 17:
|
|
272
|
-
|
|
266
|
+
_m.sent();
|
|
273
267
|
return [3 /*break*/, 19];
|
|
274
268
|
case 18:
|
|
275
|
-
err_3 =
|
|
269
|
+
err_3 = _m.sent();
|
|
276
270
|
if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
|
|
277
271
|
this.log.warn("'afterStore' middleware cancelled");
|
|
278
272
|
afterStoreProfile.stop();
|
|
@@ -288,7 +282,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
288
282
|
this.log.profile(afterStoreProfile);
|
|
289
283
|
return [3 /*break*/, 21];
|
|
290
284
|
case 20:
|
|
291
|
-
err_4 =
|
|
285
|
+
err_4 = _m.sent();
|
|
292
286
|
if (err_4) {
|
|
293
287
|
switch (err_4) {
|
|
294
288
|
case 429:
|
|
@@ -312,6 +306,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
312
306
|
break;
|
|
313
307
|
}
|
|
314
308
|
this.store.loading = false;
|
|
309
|
+
this.handleError(err_4);
|
|
315
310
|
}
|
|
316
311
|
return [3 /*break*/, 21];
|
|
317
312
|
case 21: return [2 /*return*/];
|
|
@@ -375,26 +370,20 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
375
370
|
});
|
|
376
371
|
}); });
|
|
377
372
|
_this.eventManager.on('afterStore', function (search, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
378
|
-
var
|
|
373
|
+
var storableRequestParams, stringyParams, scrollMap_1, scrollToPosition_1, checkCount_1, heightCheck_1;
|
|
379
374
|
var _this = this;
|
|
380
|
-
var _a, _b
|
|
381
|
-
return __generator(this, function (
|
|
382
|
-
switch (
|
|
375
|
+
var _a, _b;
|
|
376
|
+
return __generator(this, function (_c) {
|
|
377
|
+
switch (_c.label) {
|
|
383
378
|
case 0: return [4 /*yield*/, next()];
|
|
384
379
|
case 1:
|
|
385
|
-
|
|
380
|
+
_c.sent();
|
|
386
381
|
search.controller.store.loading = false;
|
|
387
382
|
// save last params
|
|
388
383
|
this.storage.set('lastStringyParams', JSON.stringify(search.request));
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
}
|
|
393
|
-
if ((_a = requestParams === null || requestParams === void 0 ? void 0 : requestParams.search) === null || _a === void 0 ? void 0 : _a.redirectResponse) {
|
|
394
|
-
delete requestParams.search.redirectResponse;
|
|
395
|
-
}
|
|
396
|
-
stringyParams = JSON.stringify(requestParams);
|
|
397
|
-
if ((_c = (_b = this.config.settings) === null || _b === void 0 ? void 0 : _b.infinite) === null || _c === void 0 ? void 0 : _c.restorePosition) {
|
|
384
|
+
storableRequestParams = getStorableRequestParams(search.request);
|
|
385
|
+
stringyParams = JSON.stringify(storableRequestParams);
|
|
386
|
+
if ((_b = (_a = this.config.settings) === null || _a === void 0 ? void 0 : _a.infinite) === null || _b === void 0 ? void 0 : _b.restorePosition) {
|
|
398
387
|
scrollMap_1 = this.storage.get('scrollMap') || {};
|
|
399
388
|
scrollToPosition_1 = scrollMap_1[stringyParams];
|
|
400
389
|
if (scrollToPosition_1) {
|
|
@@ -435,6 +424,14 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
435
424
|
if (userId) {
|
|
436
425
|
params.tracking.userId = userId;
|
|
437
426
|
}
|
|
427
|
+
var sessionId = this.tracker.getContext().sessionId;
|
|
428
|
+
if (sessionId) {
|
|
429
|
+
params.tracking.sessionId = sessionId;
|
|
430
|
+
}
|
|
431
|
+
var pageId = this.tracker.getContext().pageLoadId;
|
|
432
|
+
if (pageId) {
|
|
433
|
+
params.tracking.pageLoadId = pageId;
|
|
434
|
+
}
|
|
438
435
|
if (!((_d = (_c = this.config.globals) === null || _c === void 0 ? void 0 : _c.personalization) === null || _d === void 0 ? void 0 : _d.disabled)) {
|
|
439
436
|
var cartItems = this.tracker.cookies.cart.get();
|
|
440
437
|
if (cartItems.length) {
|
|
@@ -460,3 +457,23 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
460
457
|
return SearchController;
|
|
461
458
|
}(AbstractController_1.AbstractController));
|
|
462
459
|
exports.SearchController = SearchController;
|
|
460
|
+
function getStorableRequestParams(request) {
|
|
461
|
+
var _a, _b, _c, _d;
|
|
462
|
+
return {
|
|
463
|
+
siteId: request.siteId,
|
|
464
|
+
sorts: request.sorts,
|
|
465
|
+
search: {
|
|
466
|
+
query: {
|
|
467
|
+
string: ((_b = (_a = request === null || request === void 0 ? void 0 : request.search) === null || _a === void 0 ? void 0 : _a.query) === null || _b === void 0 ? void 0 : _b.string) || '',
|
|
468
|
+
},
|
|
469
|
+
subQuery: ((_c = request === null || request === void 0 ? void 0 : request.search) === null || _c === void 0 ? void 0 : _c.subQuery) || '',
|
|
470
|
+
},
|
|
471
|
+
filters: request.filters,
|
|
472
|
+
pagination: request.pagination,
|
|
473
|
+
facets: request.facets,
|
|
474
|
+
merchandising: {
|
|
475
|
+
landingPage: ((_d = request.merchandising) === null || _d === void 0 ? void 0 : _d.landingPage) || '',
|
|
476
|
+
},
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
exports.getStorableRequestParams = getStorableRequestParams;
|
|
@@ -25,6 +25,7 @@ export declare abstract class AbstractController {
|
|
|
25
25
|
};
|
|
26
26
|
protected _initialized: boolean;
|
|
27
27
|
get initialized(): boolean;
|
|
28
|
+
handleError: (err: unknown) => void;
|
|
28
29
|
constructor(config: ControllerConfig, { client, store, urlManager, eventManager, profiler, logger, tracker }: ControllerServices, context?: ContextVariables);
|
|
29
30
|
createTargeter(target: Target, onTarget: OnTarget, document?: Document): DomTargeter | undefined;
|
|
30
31
|
addTargeter(target: DomTargeter): DomTargeter | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractController.d.ts","sourceRoot":"","sources":["../../../src/Abstract/AbstractController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"AbstractController.d.ts","sourceRoot":"","sources":["../../../src/Abstract/AbstractController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEpH,8BAAsB,kBAAkB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,SAAc;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,gBAAgB,CAAC;IAE1B,SAAS,EAAE;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;KAC3B,CAAM;IAEP,SAAS,CAAC,YAAY,UAAS;IAE/B,IAAI,WAAW,IAAI,OAAO,CAEzB;IAEM,WAAW,QAAS,OAAO,KAAG,IAAI,CA0CvC;gBAGD,MAAM,EAAE,gBAAgB,EACxB,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,GAAE,gBAAqB;IA2DxB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS;IAIhG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS;IASnD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgD3B,QAAQ,IAAI,IAAI;aAMP,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAE1B,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAIpD,GAAG,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;CAoC1C"}
|
|
@@ -4,6 +4,42 @@ export class AbstractController {
|
|
|
4
4
|
this.type = 'abstract';
|
|
5
5
|
this.targeters = {};
|
|
6
6
|
this._initialized = false;
|
|
7
|
+
this.handleError = (err) => {
|
|
8
|
+
let event;
|
|
9
|
+
if (err instanceof ErrorEvent) {
|
|
10
|
+
event = err;
|
|
11
|
+
}
|
|
12
|
+
else if (err instanceof Error) {
|
|
13
|
+
event = new ErrorEvent('error', {
|
|
14
|
+
error: err,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
else if (typeof err === 'string') {
|
|
18
|
+
event = new ErrorEvent('error', {
|
|
19
|
+
error: new Error(err),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
else if (typeof err === 'object' && Object.keys(err).length) {
|
|
23
|
+
try {
|
|
24
|
+
event = new ErrorEvent('error', {
|
|
25
|
+
error: new Error(JSON.stringify(err)),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch (e) { }
|
|
29
|
+
}
|
|
30
|
+
if (event) {
|
|
31
|
+
const { filename, colno, lineno, error: { stack }, message, timeStamp, } = event;
|
|
32
|
+
const beaconPayload = {
|
|
33
|
+
filename: filename || `${this.id} (${this.type.charAt(0).toUpperCase() + this.type.slice(1)}Controller)`,
|
|
34
|
+
stack,
|
|
35
|
+
message,
|
|
36
|
+
colno,
|
|
37
|
+
lineno,
|
|
38
|
+
errortimestamp: timeStamp,
|
|
39
|
+
};
|
|
40
|
+
this.tracker.track.error(beaconPayload);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
7
43
|
if (typeof config != 'object' || typeof config.id != 'string' || !config.id.match(/^[a-zA-Z0-9_-]*$/)) {
|
|
8
44
|
throw new Error(`Invalid config passed to controller. The "id" attribute must be an alphanumeric string.`);
|
|
9
45
|
}
|
|
@@ -87,6 +123,7 @@ export class AbstractController {
|
|
|
87
123
|
catch (err) {
|
|
88
124
|
if (err) {
|
|
89
125
|
console.error(err);
|
|
126
|
+
this.handleError(err);
|
|
90
127
|
}
|
|
91
128
|
}
|
|
92
129
|
if (!this._initialized) {
|
|
@@ -27,6 +27,7 @@ export declare class AutocompleteController extends AbstractController {
|
|
|
27
27
|
escKey: (e: KeyboardEvent) => void;
|
|
28
28
|
focus: (e: FocusEvent) => void;
|
|
29
29
|
formSubmit: (e: React.FormEvent<HTMLInputElement>) => Promise<void>;
|
|
30
|
+
formElementChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
30
31
|
keyUp: (e: KeyboardEvent) => void;
|
|
31
32
|
timeoutDelay: NodeJS.Timeout | undefined;
|
|
32
33
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,EAAkD,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEnJ,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAG1E,eAAO,MAAM,WAAW,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,EAAkD,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEnJ,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAG1E,eAAO,MAAM,WAAW,MAAM,CAAC;AAqB/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,CA0CrC;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;mCA0ChD,MAAM,WAAW,CAAC,gBAAgB,CAAC,KAAG,IAAI;uBAqBtD,aAAa,KAAG,IAAI;;;;uBA8CpB,UAAU,KAAG,IAAI;;MAS5B;IAEF,MAAM,IAAI,IAAI;IAgBR,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwE3B,cAAc,QAAa,QAAQ,IAAI,CAAC,CAuBtC;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAiH9B;CACF"}
|
|
@@ -16,6 +16,7 @@ const defaultConfig = {
|
|
|
16
16
|
settings: {
|
|
17
17
|
initializeFromUrl: true,
|
|
18
18
|
syncInputs: true,
|
|
19
|
+
serializeForm: false,
|
|
19
20
|
facets: {
|
|
20
21
|
trim: true,
|
|
21
22
|
pinFiltered: true,
|
|
@@ -127,6 +128,24 @@ export class AutocompleteController extends AbstractController {
|
|
|
127
128
|
}
|
|
128
129
|
form.submit();
|
|
129
130
|
},
|
|
131
|
+
formElementChange: (e) => {
|
|
132
|
+
const input = e.target;
|
|
133
|
+
const form = input?.form;
|
|
134
|
+
const searchInput = form?.querySelector(`input[${INPUT_ATTRIBUTE}]`);
|
|
135
|
+
if (form && searchInput && this.config.settings?.serializeForm) {
|
|
136
|
+
// get other form parameters (except the input)
|
|
137
|
+
const formParameters = getFormParameters(form, function (elem) {
|
|
138
|
+
return elem != searchInput;
|
|
139
|
+
});
|
|
140
|
+
// set parameters as globals
|
|
141
|
+
this.store.setService('urlManager', this.store.services.urlManager.reset().withGlobals(formParameters));
|
|
142
|
+
this.store.reset();
|
|
143
|
+
// rebuild trending terms with new UrlManager settings
|
|
144
|
+
if (this.config.settings?.trending?.limit && this.config.settings?.trending?.limit > 0) {
|
|
145
|
+
this.searchTrending();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
},
|
|
130
149
|
keyUp: (e) => {
|
|
131
150
|
// ignore enter and escape keys
|
|
132
151
|
if (e?.keyCode == KEY_ENTER || e?.keyCode == KEY_ESCAPE)
|
|
@@ -303,6 +322,7 @@ export class AutocompleteController extends AbstractController {
|
|
|
303
322
|
break;
|
|
304
323
|
}
|
|
305
324
|
this.store.loading = false;
|
|
325
|
+
this.handleError(err);
|
|
306
326
|
}
|
|
307
327
|
}
|
|
308
328
|
};
|
|
@@ -347,10 +367,19 @@ export class AutocompleteController extends AbstractController {
|
|
|
347
367
|
const urlState = this.urlManager.state;
|
|
348
368
|
const params = deepmerge({ ...getSearchParams(urlState) }, this.config.globals);
|
|
349
369
|
const userId = this.tracker.getUserId();
|
|
370
|
+
const sessionId = this.tracker.getContext().sessionId;
|
|
371
|
+
const pageLoadId = this.tracker.getContext().pageLoadId;
|
|
372
|
+
params.tracking = params.tracking || {};
|
|
373
|
+
params.tracking.domain = window.location.href;
|
|
350
374
|
if (userId) {
|
|
351
|
-
params.tracking = params.tracking || {};
|
|
352
375
|
params.tracking.userId = userId;
|
|
353
376
|
}
|
|
377
|
+
if (sessionId) {
|
|
378
|
+
params.tracking.sessionId = sessionId;
|
|
379
|
+
}
|
|
380
|
+
if (pageLoadId) {
|
|
381
|
+
params.tracking.pageLoadId = pageLoadId;
|
|
382
|
+
}
|
|
354
383
|
if (!this.config.globals?.personalization?.disabled) {
|
|
355
384
|
const cartItems = this.tracker.cookies.cart.get();
|
|
356
385
|
if (cartItems.length) {
|
|
@@ -423,7 +452,10 @@ export class AutocompleteController extends AbstractController {
|
|
|
423
452
|
input.removeEventListener('keydown', this.handlers.input.enterKey);
|
|
424
453
|
input.removeEventListener('keydown', this.handlers.input.escKey);
|
|
425
454
|
input.removeEventListener('focus', this.handlers.input.focus);
|
|
426
|
-
input.form
|
|
455
|
+
if (input.form) {
|
|
456
|
+
input.form.removeEventListener('submit', this.handlers.input.formSubmit);
|
|
457
|
+
unbindFormParameters(input.form, this.handlers.input.formElementChange);
|
|
458
|
+
}
|
|
427
459
|
});
|
|
428
460
|
document.removeEventListener('click', this.handlers.document.click);
|
|
429
461
|
}
|
|
@@ -446,16 +478,26 @@ export class AutocompleteController extends AbstractController {
|
|
|
446
478
|
const form = input.form;
|
|
447
479
|
let formActionUrl;
|
|
448
480
|
if (this.config.action) {
|
|
449
|
-
formActionUrl = this.config.action;
|
|
450
481
|
input.addEventListener('keydown', this.handlers.input.enterKey);
|
|
482
|
+
formActionUrl = this.config.action;
|
|
451
483
|
}
|
|
452
484
|
else if (form) {
|
|
453
|
-
formActionUrl = form.action;
|
|
454
485
|
form.addEventListener('submit', this.handlers.input.formSubmit);
|
|
486
|
+
formActionUrl = form.action || '';
|
|
487
|
+
if (this.config.settings?.serializeForm) {
|
|
488
|
+
bindFormParameters(form, this.handlers.input.formElementChange, function (elem) {
|
|
489
|
+
return elem != input;
|
|
490
|
+
});
|
|
491
|
+
const formParameters = getFormParameters(form, function (elem) {
|
|
492
|
+
return elem != input;
|
|
493
|
+
});
|
|
494
|
+
// set parameters as globals
|
|
495
|
+
this.store.setService('urlManager', this.urlManager.reset().withGlobals(formParameters));
|
|
496
|
+
}
|
|
455
497
|
}
|
|
456
498
|
// set the root URL on urlManager
|
|
457
499
|
if (formActionUrl) {
|
|
458
|
-
this.store.setService('urlManager', this.urlManager.withConfig((translatorConfig) => {
|
|
500
|
+
this.store.setService('urlManager', this.store.services.urlManager.withConfig((translatorConfig) => {
|
|
459
501
|
return {
|
|
460
502
|
...translatorConfig,
|
|
461
503
|
urlRoot: formActionUrl,
|
|
@@ -484,3 +526,45 @@ async function timeout(time) {
|
|
|
484
526
|
window.setTimeout(resolve, time);
|
|
485
527
|
});
|
|
486
528
|
}
|
|
529
|
+
// for grabbing other parameters from the form and using them in UrlManager
|
|
530
|
+
const INPUT_TYPE_BLACKLIST = ['file', 'reset', 'submit', 'button', 'image', 'password'];
|
|
531
|
+
function getFormParameters(form, filterFn) {
|
|
532
|
+
const parameters = {};
|
|
533
|
+
if (typeof form == 'object' && form.nodeName == 'FORM') {
|
|
534
|
+
for (let i = form.elements.length - 1; i >= 0; i--) {
|
|
535
|
+
const elem = form.elements[i];
|
|
536
|
+
if (typeof filterFn == 'function' && !filterFn(elem)) {
|
|
537
|
+
continue;
|
|
538
|
+
}
|
|
539
|
+
if (elem.name && !INPUT_TYPE_BLACKLIST.includes(elem.type)) {
|
|
540
|
+
if ((elem.type != 'checkbox' && elem.type != 'radio') || elem.checked) {
|
|
541
|
+
parameters[elem.name] = elem.value;
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
return parameters;
|
|
547
|
+
}
|
|
548
|
+
function bindFormParameters(form, fn, filterFn) {
|
|
549
|
+
if (typeof form == 'object' && form.nodeName == 'FORM') {
|
|
550
|
+
for (let i = form.elements.length - 1; i >= 0; i--) {
|
|
551
|
+
const elem = form.elements[i];
|
|
552
|
+
if (typeof filterFn == 'function' && !filterFn(elem)) {
|
|
553
|
+
continue;
|
|
554
|
+
}
|
|
555
|
+
if (elem.name && !INPUT_TYPE_BLACKLIST.includes(elem.type)) {
|
|
556
|
+
elem.addEventListener('change', fn);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
function unbindFormParameters(form, fn) {
|
|
562
|
+
if (typeof form == 'object' && form.nodeName == 'FORM') {
|
|
563
|
+
for (let i = form.elements.length - 1; i >= 0; i--) {
|
|
564
|
+
const elem = form.elements[i];
|
|
565
|
+
if (elem.name && !INPUT_TYPE_BLACKLIST.includes(elem.type)) {
|
|
566
|
+
elem.removeEventListener('change', fn);
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FinderController.d.ts","sourceRoot":"","sources":["../../../src/Finder/FinderController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,sBAAsB,EAAmC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiB9H,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;gBAGtC,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA2C3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"FinderController.d.ts","sourceRoot":"","sources":["../../../src/Finder/FinderController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,sBAAsB,EAAmC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiB9H,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;gBAGtC,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA2C3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+BhC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAe5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAqH9B;CACF"}
|
|
@@ -151,6 +151,7 @@ export class FinderController extends AbstractController {
|
|
|
151
151
|
break;
|
|
152
152
|
}
|
|
153
153
|
this.store.loading = false;
|
|
154
|
+
this.handleError(err);
|
|
154
155
|
}
|
|
155
156
|
}
|
|
156
157
|
};
|
|
@@ -185,12 +186,27 @@ export class FinderController extends AbstractController {
|
|
|
185
186
|
}
|
|
186
187
|
get params() {
|
|
187
188
|
const urlState = this.urlManager.state;
|
|
189
|
+
const userId = this.tracker.getUserId();
|
|
190
|
+
const sessionId = this.tracker.getContext().sessionId;
|
|
191
|
+
const pageLoadId = this.tracker.getContext().pageLoadId;
|
|
192
|
+
let tracking = {};
|
|
193
|
+
if (userId) {
|
|
194
|
+
tracking.userId = userId;
|
|
195
|
+
}
|
|
196
|
+
if (sessionId) {
|
|
197
|
+
tracking.sessionId = sessionId;
|
|
198
|
+
}
|
|
199
|
+
if (pageLoadId) {
|
|
200
|
+
tracking.pageLoadId = pageLoadId;
|
|
201
|
+
}
|
|
202
|
+
tracking.domain = window.location.href;
|
|
188
203
|
// get only the finder fields and disable auto drill down
|
|
189
204
|
const defaultParams = {
|
|
190
205
|
facets: {
|
|
191
206
|
include: this.config.fields.map((fieldConfig) => fieldConfig.field),
|
|
192
207
|
autoDrillDown: false,
|
|
193
208
|
},
|
|
209
|
+
tracking: tracking,
|
|
194
210
|
};
|
|
195
211
|
const params = deepmerge({ ...getSearchParams(urlState) }, deepmerge(defaultParams, this.config.globals));
|
|
196
212
|
return params;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,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;AAEzE,OAAO,KAAK,EAAE,8BAA8B,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,aAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QACjD,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KACrD,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,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,
|
|
1
|
+
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,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;AAEzE,OAAO,KAAK,EAAE,8BAA8B,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,aAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;QACjD,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KACrD,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,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,CAuB1C;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAsG9B;CACF"}
|
|
@@ -281,6 +281,7 @@ export class RecommendationController extends AbstractController {
|
|
|
281
281
|
break;
|
|
282
282
|
}
|
|
283
283
|
this.store.loading = false;
|
|
284
|
+
this.handleError(err);
|
|
284
285
|
}
|
|
285
286
|
}
|
|
286
287
|
};
|
|
@@ -311,7 +312,7 @@ export class RecommendationController extends AbstractController {
|
|
|
311
312
|
order: this.context?.options?.order,
|
|
312
313
|
...this.config.globals,
|
|
313
314
|
};
|
|
314
|
-
const shopperId = this.tracker.
|
|
315
|
+
const shopperId = this.tracker.getContext().shopperId;
|
|
315
316
|
const cart = this.tracker.cookies.cart.get();
|
|
316
317
|
const lastViewed = this.tracker.cookies.viewed.get();
|
|
317
318
|
if (shopperId) {
|
|
@@ -15,10 +15,12 @@ export declare class SearchController extends AbstractController {
|
|
|
15
15
|
store: SearchStore;
|
|
16
16
|
config: SearchControllerConfig;
|
|
17
17
|
storage: StorageStore;
|
|
18
|
+
private previousResults;
|
|
18
19
|
constructor(config: SearchControllerConfig, { client, store, urlManager, eventManager, profiler, logger, tracker }: ControllerServices, context?: ContextVariables);
|
|
19
20
|
track: SearchTrackMethods;
|
|
20
21
|
get params(): SearchRequestModel;
|
|
21
22
|
search: () => Promise<void>;
|
|
22
23
|
}
|
|
24
|
+
export declare function getStorableRequestParams(request: SearchRequestModel): SearchRequestModel;
|
|
23
25
|
export {};
|
|
24
26
|
//# sourceMappingURL=SearchController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AAErF,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAkD,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE7I,OAAO,KAAK,EAAE,kBAAkB,EAA2E,MAAM,2BAA2B,CAAC;AAoB7I,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;
|
|
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,EAAE,sBAAsB,EAAkD,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE7I,OAAO,KAAK,EAAE,kBAAkB,EAA2E,MAAM,2BAA2B,CAAC;AAoB7I,aAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;KAC/D,CAAC;CACF,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,kBAAkB;IAChD,IAAI,kBAA0B;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;IACvC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,eAAe,CAAwC;gBAG9D,MAAM,EAAE,sBAAsB,EAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAC1F,OAAO,CAAC,EAAE,gBAAgB;IA+F3B,KAAK,EAAE,kBAAkB,CA+BvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAgD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CA8J9B;CACF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAiBxF"}
|
|
@@ -23,24 +23,16 @@ export class SearchController extends AbstractController {
|
|
|
23
23
|
constructor(config, { client, store, urlManager, eventManager, profiler, logger, tracker }, context) {
|
|
24
24
|
super(config, { client, store, urlManager, eventManager, profiler, logger, tracker }, context);
|
|
25
25
|
this.type = ControllerTypes.search;
|
|
26
|
+
this.previousResults = [];
|
|
26
27
|
this.track = {
|
|
27
28
|
product: {
|
|
28
29
|
click: (e, result) => {
|
|
29
30
|
// store scroll position
|
|
30
31
|
if (this.config.settings?.infinite) {
|
|
31
32
|
let stringyParams = this.storage.get('lastStringyParams');
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (paramsObj?.search && Object.keys(paramsObj?.search).length === 0) {
|
|
36
|
-
// if redirectResponse was the only key, also delete the empty search object
|
|
37
|
-
delete paramsObj.search;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
if (paramsObj?.personalization) {
|
|
41
|
-
delete paramsObj?.personalization;
|
|
42
|
-
}
|
|
43
|
-
stringyParams = JSON.stringify(paramsObj);
|
|
33
|
+
stringyParams = JSON.parse(stringyParams);
|
|
34
|
+
const storableRequestParams = getStorableRequestParams(stringyParams);
|
|
35
|
+
stringyParams = JSON.stringify(storableRequestParams);
|
|
44
36
|
const scrollMap = {};
|
|
45
37
|
scrollMap[stringyParams] = window.scrollY;
|
|
46
38
|
this.storage.set('scrollMap', scrollMap);
|
|
@@ -112,7 +104,7 @@ export class SearchController extends AbstractController {
|
|
|
112
104
|
// if params.page > 1 and infinite setting exists we should append results
|
|
113
105
|
if (this.config.settings?.infinite && params.pagination?.page > 1) {
|
|
114
106
|
// if no results fetch results...
|
|
115
|
-
let previousResults =
|
|
107
|
+
let previousResults = this.previousResults;
|
|
116
108
|
if (this.config.settings?.infinite.backfill && !previousResults.length) {
|
|
117
109
|
// figure out how many pages of results to backfill and wait on all responses
|
|
118
110
|
const backfills = [];
|
|
@@ -150,8 +142,10 @@ export class SearchController extends AbstractController {
|
|
|
150
142
|
}
|
|
151
143
|
afterSearchProfile.stop();
|
|
152
144
|
this.log.profile(afterSearchProfile);
|
|
145
|
+
if (this.config.settings?.infinite) {
|
|
146
|
+
this.previousResults = JSON.parse(JSON.stringify(response.results));
|
|
147
|
+
}
|
|
153
148
|
// update the store
|
|
154
|
-
// @ts-ignore
|
|
155
149
|
this.store.update(response);
|
|
156
150
|
const afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
157
151
|
try {
|
|
@@ -199,6 +193,7 @@ export class SearchController extends AbstractController {
|
|
|
199
193
|
break;
|
|
200
194
|
}
|
|
201
195
|
this.store.loading = false;
|
|
196
|
+
this.handleError(err);
|
|
202
197
|
}
|
|
203
198
|
}
|
|
204
199
|
};
|
|
@@ -245,14 +240,8 @@ export class SearchController extends AbstractController {
|
|
|
245
240
|
search.controller.store.loading = false;
|
|
246
241
|
// save last params
|
|
247
242
|
this.storage.set('lastStringyParams', JSON.stringify(search.request));
|
|
248
|
-
const
|
|
249
|
-
|
|
250
|
-
delete requestParams.personalization;
|
|
251
|
-
}
|
|
252
|
-
if (requestParams?.search?.redirectResponse) {
|
|
253
|
-
delete requestParams.search.redirectResponse;
|
|
254
|
-
}
|
|
255
|
-
const stringyParams = JSON.stringify(requestParams);
|
|
243
|
+
const storableRequestParams = getStorableRequestParams(search.request);
|
|
244
|
+
const stringyParams = JSON.stringify(storableRequestParams);
|
|
256
245
|
if (this.config.settings?.infinite?.restorePosition) {
|
|
257
246
|
// restore the scroll position saved previously
|
|
258
247
|
const scrollMap = this.storage.get('scrollMap') || {};
|
|
@@ -290,6 +279,14 @@ export class SearchController extends AbstractController {
|
|
|
290
279
|
if (userId) {
|
|
291
280
|
params.tracking.userId = userId;
|
|
292
281
|
}
|
|
282
|
+
const sessionId = this.tracker.getContext().sessionId;
|
|
283
|
+
if (sessionId) {
|
|
284
|
+
params.tracking.sessionId = sessionId;
|
|
285
|
+
}
|
|
286
|
+
const pageId = this.tracker.getContext().pageLoadId;
|
|
287
|
+
if (pageId) {
|
|
288
|
+
params.tracking.pageLoadId = pageId;
|
|
289
|
+
}
|
|
293
290
|
if (!this.config.globals?.personalization?.disabled) {
|
|
294
291
|
const cartItems = this.tracker.cookies.cart.get();
|
|
295
292
|
if (cartItems.length) {
|
|
@@ -310,3 +307,21 @@ export class SearchController extends AbstractController {
|
|
|
310
307
|
return params;
|
|
311
308
|
}
|
|
312
309
|
}
|
|
310
|
+
export function getStorableRequestParams(request) {
|
|
311
|
+
return {
|
|
312
|
+
siteId: request.siteId,
|
|
313
|
+
sorts: request.sorts,
|
|
314
|
+
search: {
|
|
315
|
+
query: {
|
|
316
|
+
string: request?.search?.query?.string || '',
|
|
317
|
+
},
|
|
318
|
+
subQuery: request?.search?.subQuery || '',
|
|
319
|
+
},
|
|
320
|
+
filters: request.filters,
|
|
321
|
+
pagination: request.pagination,
|
|
322
|
+
facets: request.facets,
|
|
323
|
+
merchandising: {
|
|
324
|
+
landingPage: request.merchandising?.landingPage || '',
|
|
325
|
+
},
|
|
326
|
+
};
|
|
327
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@searchspring/snap-controller",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.34.1",
|
|
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.
|
|
23
|
+
"@searchspring/snap-toolbox": "^0.34.1",
|
|
24
24
|
"deepmerge": "4.2.2"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@searchspring/snap-client": "^0.
|
|
28
|
-
"@searchspring/snap-event-manager": "^0.
|
|
29
|
-
"@searchspring/snap-logger": "^0.
|
|
30
|
-
"@searchspring/snap-profiler": "^0.
|
|
31
|
-
"@searchspring/snap-store-mobx": "^0.
|
|
32
|
-
"@searchspring/snap-tracker": "^0.
|
|
33
|
-
"@searchspring/snap-url-manager": "^0.
|
|
27
|
+
"@searchspring/snap-client": "^0.34.1",
|
|
28
|
+
"@searchspring/snap-event-manager": "^0.34.1",
|
|
29
|
+
"@searchspring/snap-logger": "^0.34.1",
|
|
30
|
+
"@searchspring/snap-profiler": "^0.34.1",
|
|
31
|
+
"@searchspring/snap-store-mobx": "^0.34.1",
|
|
32
|
+
"@searchspring/snap-tracker": "^0.34.1",
|
|
33
|
+
"@searchspring/snap-url-manager": "^0.34.1"
|
|
34
34
|
},
|
|
35
35
|
"sideEffects": false,
|
|
36
36
|
"files": [
|
|
37
37
|
"dist/**/*"
|
|
38
38
|
],
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "ca04548dde7220089c6ca07e88602ff9579a69bf"
|
|
40
40
|
}
|