@searchspring/snap-controller 0.32.0 → 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 +30 -26
- 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 +6 -2
- 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"}
|
|
@@ -104,6 +104,7 @@ 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) {
|
|
@@ -143,32 +144,32 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
143
144
|
};
|
|
144
145
|
_this.search = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
145
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;
|
|
146
|
-
var _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
147
|
-
return __generator(this, function (
|
|
148
|
-
switch (
|
|
147
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
148
|
+
return __generator(this, function (_m) {
|
|
149
|
+
switch (_m.label) {
|
|
149
150
|
case 0:
|
|
150
151
|
if (!!this.initialized) return [3 /*break*/, 2];
|
|
151
152
|
return [4 /*yield*/, this.init()];
|
|
152
153
|
case 1:
|
|
153
|
-
|
|
154
|
-
|
|
154
|
+
_m.sent();
|
|
155
|
+
_m.label = 2;
|
|
155
156
|
case 2:
|
|
156
157
|
params = this.params;
|
|
157
|
-
|
|
158
|
+
_m.label = 3;
|
|
158
159
|
case 3:
|
|
159
|
-
|
|
160
|
-
|
|
160
|
+
_m.trys.push([3, 20, , 21]);
|
|
161
|
+
_m.label = 4;
|
|
161
162
|
case 4:
|
|
162
|
-
|
|
163
|
+
_m.trys.push([4, 6, , 7]);
|
|
163
164
|
return [4 /*yield*/, this.eventManager.fire('beforeSearch', {
|
|
164
165
|
controller: this,
|
|
165
166
|
request: params,
|
|
166
167
|
})];
|
|
167
168
|
case 5:
|
|
168
|
-
|
|
169
|
+
_m.sent();
|
|
169
170
|
return [3 /*break*/, 7];
|
|
170
171
|
case 6:
|
|
171
|
-
err_1 =
|
|
172
|
+
err_1 = _m.sent();
|
|
172
173
|
if ((err_1 === null || err_1 === void 0 ? void 0 : err_1.message) == 'cancelled') {
|
|
173
174
|
this.log.warn("'beforeSearch' middleware cancelled");
|
|
174
175
|
return [2 /*return*/];
|
|
@@ -197,7 +198,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
197
198
|
searchProfile = this.profiler.create({ type: 'event', name: 'search', context: params }).start();
|
|
198
199
|
return [4 /*yield*/, this.client.search(params)];
|
|
199
200
|
case 8:
|
|
200
|
-
_a =
|
|
201
|
+
_a = _m.sent(), meta = _a[0], response = _a[1];
|
|
201
202
|
// @ts-ignore
|
|
202
203
|
if (!response.meta) {
|
|
203
204
|
/**
|
|
@@ -208,7 +209,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
208
209
|
response.meta = meta;
|
|
209
210
|
}
|
|
210
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];
|
|
211
|
-
previousResults_1 =
|
|
212
|
+
previousResults_1 = this.previousResults;
|
|
212
213
|
if (!(((_j = this.config.settings) === null || _j === void 0 ? void 0 : _j.infinite.backfill) && !previousResults_1.length)) return [3 /*break*/, 10];
|
|
213
214
|
backfills = [];
|
|
214
215
|
for (page = 1; page < ((_k = params.pagination) === null || _k === void 0 ? void 0 : _k.page); page++) {
|
|
@@ -217,32 +218,32 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
217
218
|
}
|
|
218
219
|
return [4 /*yield*/, Promise.all(backfills)];
|
|
219
220
|
case 9:
|
|
220
|
-
backfillResponses =
|
|
221
|
+
backfillResponses = _m.sent();
|
|
221
222
|
backfillResponses.map(function (_a) {
|
|
222
223
|
var meta = _a[0], data = _a[1];
|
|
223
224
|
previousResults_1 = previousResults_1.concat(data.results);
|
|
224
225
|
});
|
|
225
|
-
|
|
226
|
+
_m.label = 10;
|
|
226
227
|
case 10:
|
|
227
228
|
response.results = __spreadArray(__spreadArray([], previousResults_1, true), (response.results || []), true);
|
|
228
|
-
|
|
229
|
+
_m.label = 11;
|
|
229
230
|
case 11:
|
|
230
231
|
searchProfile.stop();
|
|
231
232
|
this.log.profile(searchProfile);
|
|
232
233
|
afterSearchProfile = this.profiler.create({ type: 'event', name: 'afterSearch', context: params }).start();
|
|
233
|
-
|
|
234
|
+
_m.label = 12;
|
|
234
235
|
case 12:
|
|
235
|
-
|
|
236
|
+
_m.trys.push([12, 14, , 15]);
|
|
236
237
|
return [4 /*yield*/, this.eventManager.fire('afterSearch', {
|
|
237
238
|
controller: this,
|
|
238
239
|
request: params,
|
|
239
240
|
response: response,
|
|
240
241
|
})];
|
|
241
242
|
case 13:
|
|
242
|
-
|
|
243
|
+
_m.sent();
|
|
243
244
|
return [3 /*break*/, 15];
|
|
244
245
|
case 14:
|
|
245
|
-
err_2 =
|
|
246
|
+
err_2 = _m.sent();
|
|
246
247
|
if ((err_2 === null || err_2 === void 0 ? void 0 : err_2.message) == 'cancelled') {
|
|
247
248
|
this.log.warn("'afterSearch' middleware cancelled");
|
|
248
249
|
afterSearchProfile.stop();
|
|
@@ -256,23 +257,25 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
256
257
|
case 15:
|
|
257
258
|
afterSearchProfile.stop();
|
|
258
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
|
+
}
|
|
259
263
|
// update the store
|
|
260
|
-
// @ts-ignore
|
|
261
264
|
this.store.update(response);
|
|
262
265
|
afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
263
|
-
|
|
266
|
+
_m.label = 16;
|
|
264
267
|
case 16:
|
|
265
|
-
|
|
268
|
+
_m.trys.push([16, 18, , 19]);
|
|
266
269
|
return [4 /*yield*/, this.eventManager.fire('afterStore', {
|
|
267
270
|
controller: this,
|
|
268
271
|
request: params,
|
|
269
272
|
response: response,
|
|
270
273
|
})];
|
|
271
274
|
case 17:
|
|
272
|
-
|
|
275
|
+
_m.sent();
|
|
273
276
|
return [3 /*break*/, 19];
|
|
274
277
|
case 18:
|
|
275
|
-
err_3 =
|
|
278
|
+
err_3 = _m.sent();
|
|
276
279
|
if ((err_3 === null || err_3 === void 0 ? void 0 : err_3.message) == 'cancelled') {
|
|
277
280
|
this.log.warn("'afterStore' middleware cancelled");
|
|
278
281
|
afterStoreProfile.stop();
|
|
@@ -288,7 +291,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
288
291
|
this.log.profile(afterStoreProfile);
|
|
289
292
|
return [3 /*break*/, 21];
|
|
290
293
|
case 20:
|
|
291
|
-
err_4 =
|
|
294
|
+
err_4 = _m.sent();
|
|
292
295
|
if (err_4) {
|
|
293
296
|
switch (err_4) {
|
|
294
297
|
case 429:
|
|
@@ -312,6 +315,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
312
315
|
break;
|
|
313
316
|
}
|
|
314
317
|
this.store.loading = false;
|
|
318
|
+
this.handleError(err_4);
|
|
315
319
|
}
|
|
316
320
|
return [3 /*break*/, 21];
|
|
317
321
|
case 21: return [2 /*return*/];
|
|
@@ -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) => {
|
|
@@ -112,7 +113,7 @@ export class SearchController extends AbstractController {
|
|
|
112
113
|
// if params.page > 1 and infinite setting exists we should append results
|
|
113
114
|
if (this.config.settings?.infinite && params.pagination?.page > 1) {
|
|
114
115
|
// if no results fetch results...
|
|
115
|
-
let previousResults =
|
|
116
|
+
let previousResults = this.previousResults;
|
|
116
117
|
if (this.config.settings?.infinite.backfill && !previousResults.length) {
|
|
117
118
|
// figure out how many pages of results to backfill and wait on all responses
|
|
118
119
|
const backfills = [];
|
|
@@ -150,8 +151,10 @@ export class SearchController extends AbstractController {
|
|
|
150
151
|
}
|
|
151
152
|
afterSearchProfile.stop();
|
|
152
153
|
this.log.profile(afterSearchProfile);
|
|
154
|
+
if (this.config.settings?.infinite) {
|
|
155
|
+
this.previousResults = JSON.parse(JSON.stringify(response.results));
|
|
156
|
+
}
|
|
153
157
|
// update the store
|
|
154
|
-
// @ts-ignore
|
|
155
158
|
this.store.update(response);
|
|
156
159
|
const afterStoreProfile = this.profiler.create({ type: 'event', name: 'afterStore', context: params }).start();
|
|
157
160
|
try {
|
|
@@ -199,6 +202,7 @@ export class SearchController extends AbstractController {
|
|
|
199
202
|
break;
|
|
200
203
|
}
|
|
201
204
|
this.store.loading = false;
|
|
205
|
+
this.handleError(err);
|
|
202
206
|
}
|
|
203
207
|
}
|
|
204
208
|
};
|
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
|
}
|