@searchspring/snap-controller 0.30.2 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/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 +81 -6
- package/dist/cjs/Finder/FinderController.d.ts.map +1 -1
- package/dist/cjs/Finder/FinderController.js +1 -0
- package/dist/cjs/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/cjs/Recommendation/RecommendationController.js +1 -0
- package/dist/cjs/Search/SearchController.d.ts +1 -0
- package/dist/cjs/Search/SearchController.d.ts.map +1 -1
- package/dist/cjs/Search/SearchController.js +48 -32
- 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 +79 -4
- package/dist/esm/Finder/FinderController.d.ts.map +1 -1
- package/dist/esm/Finder/FinderController.js +1 -0
- package/dist/esm/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/esm/Recommendation/RecommendationController.js +1 -0
- package/dist/esm/Search/SearchController.d.ts +1 -0
- package/dist/esm/Search/SearchController.d.ts.map +1 -1
- package/dist/esm/Search/SearchController.js +18 -4
- 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,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;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*/];
|
|
@@ -618,12 +639,14 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
618
639
|
var _this = this;
|
|
619
640
|
var inputs = document.querySelectorAll("input[".concat(INPUT_ATTRIBUTE, "]"));
|
|
620
641
|
inputs === null || inputs === void 0 ? void 0 : inputs.forEach(function (input) {
|
|
621
|
-
var _a;
|
|
622
642
|
input.removeEventListener('keyup', _this.handlers.input.keyUp);
|
|
623
643
|
input.removeEventListener('keydown', _this.handlers.input.enterKey);
|
|
624
644
|
input.removeEventListener('keydown', _this.handlers.input.escKey);
|
|
625
645
|
input.removeEventListener('focus', _this.handlers.input.focus);
|
|
626
|
-
(
|
|
646
|
+
if (input.form) {
|
|
647
|
+
input.form.removeEventListener('submit', _this.handlers.input.formSubmit);
|
|
648
|
+
unbindFormParameters(input.form, _this.handlers.input.formElementChange);
|
|
649
|
+
}
|
|
627
650
|
});
|
|
628
651
|
document.removeEventListener('click', this.handlers.document.click);
|
|
629
652
|
};
|
|
@@ -644,7 +667,7 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
644
667
|
this.unbind();
|
|
645
668
|
inputs = document.querySelectorAll(this.config.selector);
|
|
646
669
|
inputs.forEach(function (input) {
|
|
647
|
-
var _a, _b;
|
|
670
|
+
var _a, _b, _c;
|
|
648
671
|
input.setAttribute('spellcheck', 'false');
|
|
649
672
|
input.setAttribute('autocomplete', 'off');
|
|
650
673
|
input.setAttribute(INPUT_ATTRIBUTE, '');
|
|
@@ -657,16 +680,26 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
657
680
|
var form = input.form;
|
|
658
681
|
var formActionUrl;
|
|
659
682
|
if (_this.config.action) {
|
|
660
|
-
formActionUrl = _this.config.action;
|
|
661
683
|
input.addEventListener('keydown', _this.handlers.input.enterKey);
|
|
684
|
+
formActionUrl = _this.config.action;
|
|
662
685
|
}
|
|
663
686
|
else if (form) {
|
|
664
|
-
formActionUrl = form.action;
|
|
665
687
|
form.addEventListener('submit', _this.handlers.input.formSubmit);
|
|
688
|
+
formActionUrl = form.action || '';
|
|
689
|
+
if ((_c = _this.config.settings) === null || _c === void 0 ? void 0 : _c.serializeForm) {
|
|
690
|
+
bindFormParameters(form, _this.handlers.input.formElementChange, function (elem) {
|
|
691
|
+
return elem != input;
|
|
692
|
+
});
|
|
693
|
+
var formParameters = getFormParameters(form, function (elem) {
|
|
694
|
+
return elem != input;
|
|
695
|
+
});
|
|
696
|
+
// set parameters as globals
|
|
697
|
+
_this.store.setService('urlManager', _this.urlManager.reset().withGlobals(formParameters));
|
|
698
|
+
}
|
|
666
699
|
}
|
|
667
700
|
// set the root URL on urlManager
|
|
668
701
|
if (formActionUrl) {
|
|
669
|
-
_this.store.setService('urlManager', _this.urlManager.withConfig(function (translatorConfig) {
|
|
702
|
+
_this.store.setService('urlManager', _this.store.services.urlManager.withConfig(function (translatorConfig) {
|
|
670
703
|
return __assign(__assign({}, translatorConfig), { urlRoot: formActionUrl });
|
|
671
704
|
}));
|
|
672
705
|
}
|
|
@@ -702,3 +735,45 @@ function timeout(time) {
|
|
|
702
735
|
});
|
|
703
736
|
});
|
|
704
737
|
}
|
|
738
|
+
// for grabbing other parameters from the form and using them in UrlManager
|
|
739
|
+
var INPUT_TYPE_BLACKLIST = ['file', 'reset', 'submit', 'button', 'image', 'password'];
|
|
740
|
+
function getFormParameters(form, filterFn) {
|
|
741
|
+
var parameters = {};
|
|
742
|
+
if (typeof form == 'object' && form.nodeName == 'FORM') {
|
|
743
|
+
for (var i = form.elements.length - 1; i >= 0; i--) {
|
|
744
|
+
var elem = form.elements[i];
|
|
745
|
+
if (typeof filterFn == 'function' && !filterFn(elem)) {
|
|
746
|
+
continue;
|
|
747
|
+
}
|
|
748
|
+
if (elem.name && !INPUT_TYPE_BLACKLIST.includes(elem.type)) {
|
|
749
|
+
if ((elem.type != 'checkbox' && elem.type != 'radio') || elem.checked) {
|
|
750
|
+
parameters[elem.name] = elem.value;
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
return parameters;
|
|
756
|
+
}
|
|
757
|
+
function bindFormParameters(form, fn, filterFn) {
|
|
758
|
+
if (typeof form == 'object' && form.nodeName == 'FORM') {
|
|
759
|
+
for (var i = form.elements.length - 1; i >= 0; i--) {
|
|
760
|
+
var elem = form.elements[i];
|
|
761
|
+
if (typeof filterFn == 'function' && !filterFn(elem)) {
|
|
762
|
+
continue;
|
|
763
|
+
}
|
|
764
|
+
if (elem.name && !INPUT_TYPE_BLACKLIST.includes(elem.type)) {
|
|
765
|
+
elem.addEventListener('change', fn);
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
function unbindFormParameters(form, fn) {
|
|
771
|
+
if (typeof form == 'object' && form.nodeName == 'FORM') {
|
|
772
|
+
for (var i = form.elements.length - 1; i >= 0; i--) {
|
|
773
|
+
var elem = form.elements[i];
|
|
774
|
+
if (elem.name && !INPUT_TYPE_BLACKLIST.includes(elem.type)) {
|
|
775
|
+
elem.removeEventListener('change', fn);
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
}
|
|
@@ -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,CAchC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAe5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,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,CAchC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAe5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAqH9B;CACF"}
|
|
@@ -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,CAsB1C;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,
|
|
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,CAsB1C;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAsG9B;CACF"}
|
|
@@ -15,6 +15,7 @@ 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;
|
|
@@ -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;IAmG3B,KAAK,EAAE,kBAAkB,CAwCvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAsC/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CA8J9B;CACF"}
|
|
@@ -100,8 +100,11 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
100
100
|
__extends(SearchController, _super);
|
|
101
101
|
function SearchController(config, _a, context) {
|
|
102
102
|
var client = _a.client, store = _a.store, urlManager = _a.urlManager, eventManager = _a.eventManager, profiler = _a.profiler, logger = _a.logger, tracker = _a.tracker;
|
|
103
|
-
var _this =
|
|
103
|
+
var _this = this;
|
|
104
|
+
var _b, _c, _d;
|
|
105
|
+
_this = _super.call(this, config, { client: client, store: store, urlManager: urlManager, eventManager: eventManager, profiler: profiler, logger: logger, tracker: tracker }, context) || this;
|
|
104
106
|
_this.type = types_1.ControllerTypes.search;
|
|
107
|
+
_this.previousResults = [];
|
|
105
108
|
_this.track = {
|
|
106
109
|
product: {
|
|
107
110
|
click: function (e, result) {
|
|
@@ -112,6 +115,10 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
112
115
|
var paramsObj = JSON.parse(stringyParams);
|
|
113
116
|
if ((_b = paramsObj === null || paramsObj === void 0 ? void 0 : paramsObj.search) === null || _b === void 0 ? void 0 : _b.redirectResponse) {
|
|
114
117
|
(_c = paramsObj === null || paramsObj === void 0 ? void 0 : paramsObj.search) === null || _c === void 0 ? true : delete _c.redirectResponse;
|
|
118
|
+
if ((paramsObj === null || paramsObj === void 0 ? void 0 : paramsObj.search) && Object.keys(paramsObj === null || paramsObj === void 0 ? void 0 : paramsObj.search).length === 0) {
|
|
119
|
+
// if redirectResponse was the only key, also delete the empty search object
|
|
120
|
+
delete paramsObj.search;
|
|
121
|
+
}
|
|
115
122
|
}
|
|
116
123
|
if (paramsObj === null || paramsObj === void 0 ? void 0 : paramsObj.personalization) {
|
|
117
124
|
paramsObj === null || paramsObj === void 0 ? true : delete paramsObj.personalization;
|
|
@@ -137,32 +144,32 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
137
144
|
};
|
|
138
145
|
_this.search = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
139
146
|
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;
|
|
140
|
-
var _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
141
|
-
return __generator(this, function (
|
|
142
|
-
switch (
|
|
147
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
148
|
+
return __generator(this, function (_m) {
|
|
149
|
+
switch (_m.label) {
|
|
143
150
|
case 0:
|
|
144
151
|
if (!!this.initialized) return [3 /*break*/, 2];
|
|
145
152
|
return [4 /*yield*/, this.init()];
|
|
146
153
|
case 1:
|
|
147
|
-
|
|
148
|
-
|
|
154
|
+
_m.sent();
|
|
155
|
+
_m.label = 2;
|
|
149
156
|
case 2:
|
|
150
157
|
params = this.params;
|
|
151
|
-
|
|
158
|
+
_m.label = 3;
|
|
152
159
|
case 3:
|
|
153
|
-
|
|
154
|
-
|
|
160
|
+
_m.trys.push([3, 20, , 21]);
|
|
161
|
+
_m.label = 4;
|
|
155
162
|
case 4:
|
|
156
|
-
|
|
163
|
+
_m.trys.push([4, 6, , 7]);
|
|
157
164
|
return [4 /*yield*/, this.eventManager.fire('beforeSearch', {
|
|
158
165
|
controller: this,
|
|
159
166
|
request: params,
|
|
160
167
|
})];
|
|
161
168
|
case 5:
|
|
162
|
-
|
|
169
|
+
_m.sent();
|
|
163
170
|
return [3 /*break*/, 7];
|
|
164
171
|
case 6:
|
|
165
|
-
err_1 =
|
|
172
|
+
err_1 = _m.sent();
|
|
166
173
|
if ((err_1 === null || err_1 === void 0 ? void 0 : err_1.message) == 'cancelled') {
|
|
167
174
|
this.log.warn("'beforeSearch' middleware cancelled");
|
|
168
175
|
return [2 /*return*/];
|
|
@@ -191,7 +198,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
191
198
|
searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
|
|
192
199
|
return [4 /*yield*/, this.client.search(params)];
|
|
193
200
|
case 8:
|
|
194
|
-
_a =
|
|
201
|
+
_a = _m.sent(), meta = _a[0], response = _a[1];
|
|
195
202
|
// @ts-ignore
|
|
196
203
|
if (!response.meta) {
|
|
197
204
|
/**
|
|
@@ -202,7 +209,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
202
209
|
response.meta = meta;
|
|
203
210
|
}
|
|
204
211
|
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];
|
|
205
|
-
previousResults_1 =
|
|
212
|
+
previousResults_1 = this.previousResults;
|
|
206
213
|
if (!(((_j = this.config.settings) === null || _j === void 0 ? void 0 : _j.infinite.backfill) && !previousResults_1.length)) return [3 /*break*/, 10];
|
|
207
214
|
backfills = [];
|
|
208
215
|
for (page = 1; page < ((_k = params.pagination) === null || _k === void 0 ? void 0 : _k.page); page++) {
|
|
@@ -211,32 +218,32 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
211
218
|
}
|
|
212
219
|
return [4 /*yield*/, Promise.all(backfills)];
|
|
213
220
|
case 9:
|
|
214
|
-
backfillResponses =
|
|
221
|
+
backfillResponses = _m.sent();
|
|
215
222
|
backfillResponses.map(function (_a) {
|
|
216
223
|
var meta = _a[0], data = _a[1];
|
|
217
224
|
previousResults_1 = previousResults_1.concat(data.results);
|
|
218
225
|
});
|
|
219
|
-
|
|
226
|
+
_m.label = 10;
|
|
220
227
|
case 10:
|
|
221
228
|
response.results = __spreadArray(__spreadArray([], previousResults_1, true), (response.results || []), true);
|
|
222
|
-
|
|
229
|
+
_m.label = 11;
|
|
223
230
|
case 11:
|
|
224
231
|
searchProfile.stop();
|
|
225
232
|
this.log.profile(searchProfile);
|
|
226
233
|
afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params }).start();
|
|
227
|
-
|
|
234
|
+
_m.label = 12;
|
|
228
235
|
case 12:
|
|
229
|
-
|
|
236
|
+
_m.trys.push([12, 14, , 15]);
|
|
230
237
|
return [4 /*yield*/, this.eventManager.fire('afterSearch', {
|
|
231
238
|
controller: this,
|
|
232
239
|
request: params,
|
|
233
240
|
response: response,
|
|
234
241
|
})];
|
|
235
242
|
case 13:
|
|
236
|
-
|
|
243
|
+
_m.sent();
|
|
237
244
|
return [3 /*break*/, 15];
|
|
238
245
|
case 14:
|
|
239
|
-
err_2 =
|
|
246
|
+
err_2 = _m.sent();
|
|
240
247
|
if ((err_2 === null || err_2 === void 0 ? void 0 : err_2.message) == 'cancelled') {
|
|
241
248
|
this.log.warn("'afterSearch' middleware cancelled");
|
|
242
249
|
afterSearchProfile.stop();
|
|
@@ -250,23 +257,25 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
250
257
|
case 15:
|
|
251
258
|
afterSearchProfile.stop();
|
|
252
259
|
this.log.profile(afterSearchProfile);
|
|
260
|
+
if ((_l = this.config.settings) === null || _l === void 0 ? void 0 : _l.infinite) {
|
|
261
|
+
this.previousResults = JSON.parse(JSON.stringify(response.results));
|
|
262
|
+
}
|
|
253
263
|
// update the store
|
|
254
|
-
// @ts-ignore
|
|
255
264
|
this.store.update(response);
|
|
256
265
|
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
257
|
-
|
|
266
|
+
_m.label = 16;
|
|
258
267
|
case 16:
|
|
259
|
-
|
|
268
|
+
_m.trys.push([16, 18, , 19]);
|
|
260
269
|
return [4 /*yield*/, this.eventManager.fire('afterStore', {
|
|
261
270
|
controller: this,
|
|
262
271
|
request: params,
|
|
263
272
|
response: response,
|
|
264
273
|
})];
|
|
265
274
|
case 17:
|
|
266
|
-
|
|
275
|
+
_m.sent();
|
|
267
276
|
return [3 /*break*/, 19];
|
|
268
277
|
case 18:
|
|
269
|
-
err_3 =
|
|
278
|
+
err_3 = _m.sent();
|
|
270
279
|
if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
|
|
271
280
|
this.log.warn("'afterStore' middleware cancelled");
|
|
272
281
|
afterStoreProfile.stop();
|
|
@@ -282,7 +291,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
282
291
|
this.log.profile(afterStoreProfile);
|
|
283
292
|
return [3 /*break*/, 21];
|
|
284
293
|
case 20:
|
|
285
|
-
err_4 =
|
|
294
|
+
err_4 = _m.sent();
|
|
286
295
|
if (err_4) {
|
|
287
296
|
switch (err_4) {
|
|
288
297
|
case 429:
|
|
@@ -306,6 +315,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
306
315
|
break;
|
|
307
316
|
}
|
|
308
317
|
this.store.loading = false;
|
|
318
|
+
this.handleError(err_4);
|
|
309
319
|
}
|
|
310
320
|
return [3 /*break*/, 21];
|
|
311
321
|
case 21: return [2 /*return*/];
|
|
@@ -314,6 +324,12 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
314
324
|
}); };
|
|
315
325
|
// deep merge config with defaults
|
|
316
326
|
_this.config = (0, deepmerge_1.default)(defaultConfig, _this.config);
|
|
327
|
+
if (((_b = _this.config.settings) === null || _b === void 0 ? void 0 : _b.infinite) && typeof _this.config.settings.infinite.restorePosition == 'undefined') {
|
|
328
|
+
_this.config.settings.infinite.restorePosition = true;
|
|
329
|
+
}
|
|
330
|
+
if ((window === null || window === void 0 ? void 0 : window.history) && ((_d = (_c = _this.config.settings) === null || _c === void 0 ? void 0 : _c.infinite) === null || _d === void 0 ? void 0 : _d.restorePosition)) {
|
|
331
|
+
window.history.scrollRestoration = 'manual';
|
|
332
|
+
}
|
|
317
333
|
_this.store.setConfig(_this.config);
|
|
318
334
|
_this.storage = new snap_store_mobx_1.StorageStore({
|
|
319
335
|
type: snap_store_mobx_1.StorageType.SESSION,
|
|
@@ -365,12 +381,12 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
365
381
|
_this.eventManager.on('afterStore', function (search, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
366
382
|
var requestParams, stringyParams, scrollMap_1, scrollToPosition_1, checkCount_1, heightCheck_1;
|
|
367
383
|
var _this = this;
|
|
368
|
-
var _a, _b;
|
|
369
|
-
return __generator(this, function (
|
|
370
|
-
switch (
|
|
384
|
+
var _a, _b, _c;
|
|
385
|
+
return __generator(this, function (_d) {
|
|
386
|
+
switch (_d.label) {
|
|
371
387
|
case 0: return [4 /*yield*/, next()];
|
|
372
388
|
case 1:
|
|
373
|
-
|
|
389
|
+
_d.sent();
|
|
374
390
|
search.controller.store.loading = false;
|
|
375
391
|
// save last params
|
|
376
392
|
this.storage.set('lastStringyParams', JSON.stringify(search.request));
|
|
@@ -382,7 +398,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
382
398
|
delete requestParams.search.redirectResponse;
|
|
383
399
|
}
|
|
384
400
|
stringyParams = JSON.stringify(requestParams);
|
|
385
|
-
if (((_b = this.config.settings) === null || _b === void 0 ? void 0 : _b.infinite)
|
|
401
|
+
if ((_c = (_b = this.config.settings) === null || _b === void 0 ? void 0 : _b.infinite) === null || _c === void 0 ? void 0 : _c.restorePosition) {
|
|
386
402
|
scrollMap_1 = this.storage.get('scrollMap') || {};
|
|
387
403
|
scrollToPosition_1 = scrollMap_1[stringyParams];
|
|
388
404
|
if (scrollToPosition_1) {
|
|
@@ -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,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;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
|
};
|
|
@@ -423,7 +443,10 @@ export class AutocompleteController extends AbstractController {
|
|
|
423
443
|
input.removeEventListener('keydown', this.handlers.input.enterKey);
|
|
424
444
|
input.removeEventListener('keydown', this.handlers.input.escKey);
|
|
425
445
|
input.removeEventListener('focus', this.handlers.input.focus);
|
|
426
|
-
input.form
|
|
446
|
+
if (input.form) {
|
|
447
|
+
input.form.removeEventListener('submit', this.handlers.input.formSubmit);
|
|
448
|
+
unbindFormParameters(input.form, this.handlers.input.formElementChange);
|
|
449
|
+
}
|
|
427
450
|
});
|
|
428
451
|
document.removeEventListener('click', this.handlers.document.click);
|
|
429
452
|
}
|
|
@@ -446,16 +469,26 @@ export class AutocompleteController extends AbstractController {
|
|
|
446
469
|
const form = input.form;
|
|
447
470
|
let formActionUrl;
|
|
448
471
|
if (this.config.action) {
|
|
449
|
-
formActionUrl = this.config.action;
|
|
450
472
|
input.addEventListener('keydown', this.handlers.input.enterKey);
|
|
473
|
+
formActionUrl = this.config.action;
|
|
451
474
|
}
|
|
452
475
|
else if (form) {
|
|
453
|
-
formActionUrl = form.action;
|
|
454
476
|
form.addEventListener('submit', this.handlers.input.formSubmit);
|
|
477
|
+
formActionUrl = form.action || '';
|
|
478
|
+
if (this.config.settings?.serializeForm) {
|
|
479
|
+
bindFormParameters(form, this.handlers.input.formElementChange, function (elem) {
|
|
480
|
+
return elem != input;
|
|
481
|
+
});
|
|
482
|
+
const formParameters = getFormParameters(form, function (elem) {
|
|
483
|
+
return elem != input;
|
|
484
|
+
});
|
|
485
|
+
// set parameters as globals
|
|
486
|
+
this.store.setService('urlManager', this.urlManager.reset().withGlobals(formParameters));
|
|
487
|
+
}
|
|
455
488
|
}
|
|
456
489
|
// set the root URL on urlManager
|
|
457
490
|
if (formActionUrl) {
|
|
458
|
-
this.store.setService('urlManager', this.urlManager.withConfig((translatorConfig) => {
|
|
491
|
+
this.store.setService('urlManager', this.store.services.urlManager.withConfig((translatorConfig) => {
|
|
459
492
|
return {
|
|
460
493
|
...translatorConfig,
|
|
461
494
|
urlRoot: formActionUrl,
|
|
@@ -484,3 +517,45 @@ async function timeout(time) {
|
|
|
484
517
|
window.setTimeout(resolve, time);
|
|
485
518
|
});
|
|
486
519
|
}
|
|
520
|
+
// for grabbing other parameters from the form and using them in UrlManager
|
|
521
|
+
const INPUT_TYPE_BLACKLIST = ['file', 'reset', 'submit', 'button', 'image', 'password'];
|
|
522
|
+
function getFormParameters(form, filterFn) {
|
|
523
|
+
const parameters = {};
|
|
524
|
+
if (typeof form == 'object' && form.nodeName == 'FORM') {
|
|
525
|
+
for (let i = form.elements.length - 1; i >= 0; i--) {
|
|
526
|
+
const elem = form.elements[i];
|
|
527
|
+
if (typeof filterFn == 'function' && !filterFn(elem)) {
|
|
528
|
+
continue;
|
|
529
|
+
}
|
|
530
|
+
if (elem.name && !INPUT_TYPE_BLACKLIST.includes(elem.type)) {
|
|
531
|
+
if ((elem.type != 'checkbox' && elem.type != 'radio') || elem.checked) {
|
|
532
|
+
parameters[elem.name] = elem.value;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
return parameters;
|
|
538
|
+
}
|
|
539
|
+
function bindFormParameters(form, fn, filterFn) {
|
|
540
|
+
if (typeof form == 'object' && form.nodeName == 'FORM') {
|
|
541
|
+
for (let i = form.elements.length - 1; i >= 0; i--) {
|
|
542
|
+
const elem = form.elements[i];
|
|
543
|
+
if (typeof filterFn == 'function' && !filterFn(elem)) {
|
|
544
|
+
continue;
|
|
545
|
+
}
|
|
546
|
+
if (elem.name && !INPUT_TYPE_BLACKLIST.includes(elem.type)) {
|
|
547
|
+
elem.addEventListener('change', fn);
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
function unbindFormParameters(form, fn) {
|
|
553
|
+
if (typeof form == 'object' && form.nodeName == 'FORM') {
|
|
554
|
+
for (let i = form.elements.length - 1; i >= 0; i--) {
|
|
555
|
+
const elem = form.elements[i];
|
|
556
|
+
if (elem.name && !INPUT_TYPE_BLACKLIST.includes(elem.type)) {
|
|
557
|
+
elem.removeEventListener('change', fn);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
@@ -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,CAchC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAe5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,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,CAchC;IAED,IAAI,QAAa,QAAQ,IAAI,CAAC,CAe5B;IAEF,KAAK,QAAO,IAAI,CAId;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAqH9B;CACF"}
|
|
@@ -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,CAsB1C;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,
|
|
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,CAsB1C;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAsG9B;CACF"}
|
|
@@ -15,6 +15,7 @@ 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;
|
|
@@ -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;IAmG3B,KAAK,EAAE,kBAAkB,CAwCvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAsC/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CA8J9B;CACF"}
|
|
@@ -23,6 +23,7 @@ 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) => {
|
|
@@ -32,6 +33,10 @@ export class SearchController extends AbstractController {
|
|
|
32
33
|
const paramsObj = JSON.parse(stringyParams);
|
|
33
34
|
if (paramsObj?.search?.redirectResponse) {
|
|
34
35
|
delete paramsObj?.search?.redirectResponse;
|
|
36
|
+
if (paramsObj?.search && Object.keys(paramsObj?.search).length === 0) {
|
|
37
|
+
// if redirectResponse was the only key, also delete the empty search object
|
|
38
|
+
delete paramsObj.search;
|
|
39
|
+
}
|
|
35
40
|
}
|
|
36
41
|
if (paramsObj?.personalization) {
|
|
37
42
|
delete paramsObj?.personalization;
|
|
@@ -108,7 +113,7 @@ export class SearchController extends AbstractController {
|
|
|
108
113
|
// if params.page > 1 and infinite setting exists we should append results
|
|
109
114
|
if (this.config.settings?.infinite && params.pagination?.page > 1) {
|
|
110
115
|
// if no results fetch results...
|
|
111
|
-
let previousResults =
|
|
116
|
+
let previousResults = this.previousResults;
|
|
112
117
|
if (this.config.settings?.infinite.backfill && !previousResults.length) {
|
|
113
118
|
// figure out how many pages of results to backfill and wait on all responses
|
|
114
119
|
const backfills = [];
|
|
@@ -146,8 +151,10 @@ export class SearchController extends AbstractController {
|
|
|
146
151
|
}
|
|
147
152
|
afterSearchProfile.stop();
|
|
148
153
|
this.log.profile(afterSearchProfile);
|
|
154
|
+
if (this.config.settings?.infinite) {
|
|
155
|
+
this.previousResults = JSON.parse(JSON.stringify(response.results));
|
|
156
|
+
}
|
|
149
157
|
// update the store
|
|
150
|
-
// @ts-ignore
|
|
151
158
|
this.store.update(response);
|
|
152
159
|
const afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
153
160
|
try {
|
|
@@ -195,11 +202,18 @@ export class SearchController extends AbstractController {
|
|
|
195
202
|
break;
|
|
196
203
|
}
|
|
197
204
|
this.store.loading = false;
|
|
205
|
+
this.handleError(err);
|
|
198
206
|
}
|
|
199
207
|
}
|
|
200
208
|
};
|
|
201
209
|
// deep merge config with defaults
|
|
202
210
|
this.config = deepmerge(defaultConfig, this.config);
|
|
211
|
+
if (this.config.settings?.infinite && typeof this.config.settings.infinite.restorePosition == 'undefined') {
|
|
212
|
+
this.config.settings.infinite.restorePosition = true;
|
|
213
|
+
}
|
|
214
|
+
if (window?.history && this.config.settings?.infinite?.restorePosition) {
|
|
215
|
+
window.history.scrollRestoration = 'manual';
|
|
216
|
+
}
|
|
203
217
|
this.store.setConfig(this.config);
|
|
204
218
|
this.storage = new StorageStore({
|
|
205
219
|
type: StorageType.SESSION,
|
|
@@ -243,8 +257,8 @@ export class SearchController extends AbstractController {
|
|
|
243
257
|
delete requestParams.search.redirectResponse;
|
|
244
258
|
}
|
|
245
259
|
const stringyParams = JSON.stringify(requestParams);
|
|
246
|
-
if (this.config.settings?.infinite
|
|
247
|
-
//
|
|
260
|
+
if (this.config.settings?.infinite?.restorePosition) {
|
|
261
|
+
// restore the scroll position saved previously
|
|
248
262
|
const scrollMap = this.storage.get('scrollMap') || {};
|
|
249
263
|
// interval we ony need to keep checking until the page height > than our stored value
|
|
250
264
|
const scrollToPosition = scrollMap[stringyParams];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@searchspring/snap-controller",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.33.0",
|
|
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.33.0",
|
|
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.33.0",
|
|
28
|
+
"@searchspring/snap-event-manager": "^0.33.0",
|
|
29
|
+
"@searchspring/snap-logger": "^0.33.0",
|
|
30
|
+
"@searchspring/snap-profiler": "^0.33.0",
|
|
31
|
+
"@searchspring/snap-store-mobx": "^0.33.0",
|
|
32
|
+
"@searchspring/snap-tracker": "^0.33.0",
|
|
33
|
+
"@searchspring/snap-url-manager": "^0.33.0"
|
|
34
34
|
},
|
|
35
35
|
"sideEffects": false,
|
|
36
36
|
"files": [
|
|
37
37
|
"dist/**/*"
|
|
38
38
|
],
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "e8b01cef364c79bc56e64e695c8bd672ba0859b1"
|
|
40
40
|
}
|