@searchspring/snap-controller 0.65.2 → 0.66.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Autocomplete/AutocompleteController.d.ts +2 -1
- package/dist/cjs/Autocomplete/AutocompleteController.d.ts.map +1 -1
- package/dist/cjs/Autocomplete/AutocompleteController.js +35 -26
- package/dist/cjs/Recommendation/RecommendationController.d.ts +2 -3
- package/dist/cjs/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/cjs/Recommendation/RecommendationController.js +39 -31
- package/dist/cjs/Search/SearchController.d.ts +1 -1
- package/dist/cjs/Search/SearchController.d.ts.map +1 -1
- package/dist/cjs/Search/SearchController.js +106 -74
- package/dist/cjs/utils/isClickWithinProductLink.d.ts +5 -0
- package/dist/cjs/utils/isClickWithinProductLink.d.ts.map +1 -0
- package/dist/cjs/utils/isClickWithinProductLink.js +23 -0
- package/dist/esm/Autocomplete/AutocompleteController.d.ts +2 -1
- package/dist/esm/Autocomplete/AutocompleteController.d.ts.map +1 -1
- package/dist/esm/Autocomplete/AutocompleteController.js +30 -22
- package/dist/esm/Recommendation/RecommendationController.d.ts +2 -3
- package/dist/esm/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/esm/Recommendation/RecommendationController.js +30 -26
- package/dist/esm/Search/SearchController.d.ts +1 -1
- package/dist/esm/Search/SearchController.d.ts.map +1 -1
- package/dist/esm/Search/SearchController.js +91 -60
- package/dist/esm/utils/isClickWithinProductLink.d.ts +5 -0
- package/dist/esm/utils/isClickWithinProductLink.d.ts.map +1 -0
- package/dist/esm/utils/isClickWithinProductLink.js +18 -0
- package/package.json +10 -10
|
@@ -23,6 +23,7 @@ export declare class AutocompleteController extends AbstractController {
|
|
|
23
23
|
storage: StorageStore;
|
|
24
24
|
events: {
|
|
25
25
|
product: Record<string, {
|
|
26
|
+
click?: boolean;
|
|
26
27
|
clickThrough?: boolean;
|
|
27
28
|
impression?: boolean;
|
|
28
29
|
render?: boolean;
|
|
@@ -51,7 +52,7 @@ export declare class AutocompleteController extends AbstractController {
|
|
|
51
52
|
bind(): Promise<void>;
|
|
52
53
|
searchTrending: () => Promise<void>;
|
|
53
54
|
search: () => Promise<void>;
|
|
54
|
-
addToCart: (
|
|
55
|
+
addToCart: (_products: Product[] | Product) => Promise<void>;
|
|
55
56
|
}
|
|
56
57
|
export {};
|
|
57
58
|
//# sourceMappingURL=AutocompleteController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAa,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,EAAiC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAElI,OAAO,KAAK,EAAE,wBAAwB,EAAgE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"AutocompleteController.d.ts","sourceRoot":"","sources":["../../../src/Autocomplete/AutocompleteController.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAa,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,EAAiC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAElI,OAAO,KAAK,EAAE,wBAAwB,EAAgE,MAAM,2BAA2B,CAAC;AAcxI,eAAO,MAAM,WAAW,MAAM,CAAC;AA+B/B,KAAK,wBAAwB,GAAG;IAC/B,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAClC,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACtC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACtC,CAAC;IACF,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,kBAAkB;IACtD,IAAI,kBAAgC;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,YAAY,CAAC;IAE7B,MAAM,EAAE;QACP,OAAO,EAAE,MAAM,CACd,MAAM,EACN;YACC,KAAK,CAAC,EAAE,OAAO,CAAC;YAChB,YAAY,CAAC,EAAE,OAAO,CAAC;YACvB,UAAU,CAAC,EAAE,OAAO,CAAC;YACrB,MAAM,CAAC,EAAE,OAAO,CAAC;SACjB,CACD,CAAC;KACF,CAEC;gBAGD,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;IA4E3B,KAAK,EAAE,wBAAwB,CA0D7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CAwCrC;IAEK,UAAU,CAAC,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BhE,KAAK,IAAI,IAAI;IASb,QAAQ;;0BAEc,aAAa,KAAG,QAAQ,OAAO,GAAG,SAAS,CAAC;wBAkDpD,aAAa,KAAG,IAAI;uBAMrB,UAAU,KAAG,IAAI;4BAQN,MAAM,SAAS,CAAC,gBAAgB,CAAC,KAAG,QAAQ,IAAI,CAAC;mCAgDhD,MAAM,WAAW,CAAC,gBAAgB,CAAC,KAAG,IAAI;uBAqBtD,KAAK;;;;uBAyDL,UAAU,KAAG,IAAI;;MAS5B;IAEF,MAAM,IAAI,IAAI;IAgBR,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgF3B,cAAc,QAAa,QAAQ,IAAI,CAAC,CAwBtC;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CA0I9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAQ/D;CACF"}
|
|
@@ -71,6 +71,7 @@ var snap_store_mobx_1 = require("@searchspring/snap-store-mobx");
|
|
|
71
71
|
var AbstractController_1 = require("../Abstract/AbstractController");
|
|
72
72
|
var getParams_1 = require("../utils/getParams");
|
|
73
73
|
var types_1 = require("../types");
|
|
74
|
+
var isClickWithinProductLink_1 = require("../utils/isClickWithinProductLink");
|
|
74
75
|
var INPUT_ATTRIBUTE = 'ss-autocomplete-input';
|
|
75
76
|
exports.INPUT_DELAY = 200;
|
|
76
77
|
var KEY_ENTER = 13;
|
|
@@ -121,21 +122,22 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
121
122
|
_this.tracker.events.autocomplete.clickThrough({ data: data, siteId: (_b = _this.config.globals) === null || _b === void 0 ? void 0 : _b.siteId });
|
|
122
123
|
_this.events.product[result.id] = _this.events.product[result.id] || {};
|
|
123
124
|
_this.events.product[result.id].clickThrough = true;
|
|
124
|
-
_this.eventManager.fire('track.product.clickThrough', { controller: _this, event: e,
|
|
125
|
+
_this.eventManager.fire('track.product.clickThrough', { controller: _this, event: e, product: result, trackEvent: data });
|
|
125
126
|
},
|
|
126
127
|
click: function (e, result) {
|
|
127
|
-
var _a
|
|
128
|
-
if (result.
|
|
128
|
+
var _a;
|
|
129
|
+
if ((_a = _this.events.product[result.id]) === null || _a === void 0 ? void 0 : _a.click) {
|
|
129
130
|
return;
|
|
130
131
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
if (href) {
|
|
134
|
-
_this.track.product.clickThrough(e, result);
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
// TODO: in future, send as an interaction event
|
|
132
|
+
if (result.type === 'banner') {
|
|
133
|
+
return;
|
|
138
134
|
}
|
|
135
|
+
(0, isClickWithinProductLink_1.isClickWithinProductLink)(e, result) && _this.track.product.clickThrough(e, result);
|
|
136
|
+
_this.events.product[result.id] = _this.events.product[result.id] || {};
|
|
137
|
+
_this.events.product[result.id].click = true;
|
|
138
|
+
setTimeout(function () {
|
|
139
|
+
_this.events.product[result.id].click = false;
|
|
140
|
+
}, isClickWithinProductLink_1.CLICK_DUPLICATION_TIMEOUT);
|
|
139
141
|
},
|
|
140
142
|
render: function (result) {
|
|
141
143
|
var _a, _b;
|
|
@@ -145,7 +147,7 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
145
147
|
_this.tracker.events.autocomplete.render({ data: data, siteId: (_b = _this.config.globals) === null || _b === void 0 ? void 0 : _b.siteId });
|
|
146
148
|
_this.events.product[result.id] = _this.events.product[result.id] || {};
|
|
147
149
|
_this.events.product[result.id].render = true;
|
|
148
|
-
_this.eventManager.fire('track.product.render', { controller: _this,
|
|
150
|
+
_this.eventManager.fire('track.product.render', { controller: _this, product: result, trackEvent: data });
|
|
149
151
|
},
|
|
150
152
|
impression: function (result) {
|
|
151
153
|
var _a, _b;
|
|
@@ -155,20 +157,20 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
155
157
|
_this.tracker.events.autocomplete.impression({ data: data, siteId: (_b = _this.config.globals) === null || _b === void 0 ? void 0 : _b.siteId });
|
|
156
158
|
_this.events.product[result.id] = _this.events.product[result.id] || {};
|
|
157
159
|
_this.events.product[result.id].impression = true;
|
|
158
|
-
_this.eventManager.fire('track.product.impression', { controller: _this,
|
|
160
|
+
_this.eventManager.fire('track.product.impression', { controller: _this, product: result, trackEvent: data });
|
|
159
161
|
},
|
|
160
162
|
addToCart: function (result) {
|
|
161
163
|
var _a;
|
|
162
164
|
var data = getAutocompleteAddtocartSchemaData({ params: _this.params, store: _this.store, results: [result] });
|
|
163
165
|
_this.tracker.events.autocomplete.addToCart({ data: data, siteId: (_a = _this.config.globals) === null || _a === void 0 ? void 0 : _a.siteId });
|
|
164
|
-
_this.eventManager.fire('track.product.addToCart', { controller: _this,
|
|
166
|
+
_this.eventManager.fire('track.product.addToCart', { controller: _this, product: result, trackEvent: data });
|
|
165
167
|
},
|
|
166
168
|
},
|
|
167
169
|
redirect: function (redirectURL) {
|
|
168
170
|
var _a;
|
|
169
171
|
var data = getAutocompleteRedirectSchemaData({ redirectURL: redirectURL });
|
|
170
172
|
_this.tracker.events.autocomplete.redirect({ data: data, siteId: (_a = _this.config.globals) === null || _a === void 0 ? void 0 : _a.siteId });
|
|
171
|
-
_this.eventManager.fire('track.
|
|
173
|
+
_this.eventManager.fire('track.redirect', { controller: _this, redirectURL: redirectURL, trackEvent: data });
|
|
172
174
|
},
|
|
173
175
|
};
|
|
174
176
|
_this.handlers = {
|
|
@@ -444,8 +446,6 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
444
446
|
_d.sent();
|
|
445
447
|
_d.label = 2;
|
|
446
448
|
case 2:
|
|
447
|
-
// reset events for new search
|
|
448
|
-
this.events = { product: {} };
|
|
449
449
|
// if urlManager has no query, there will be no need to get params and no query
|
|
450
450
|
if (!this.urlManager.state.query) {
|
|
451
451
|
return [2 /*return*/];
|
|
@@ -595,10 +595,17 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
595
595
|
}
|
|
596
596
|
});
|
|
597
597
|
}); };
|
|
598
|
-
_this.addToCart = function (
|
|
598
|
+
_this.addToCart = function (_products) { return __awaiter(_this, void 0, void 0, function () {
|
|
599
|
+
var products;
|
|
600
|
+
var _this = this;
|
|
599
601
|
return __generator(this, function (_a) {
|
|
600
|
-
|
|
601
|
-
|
|
602
|
+
products = typeof _products.slice == 'function' ? _products.slice() : [_products];
|
|
603
|
+
products.forEach(function (product) {
|
|
604
|
+
_this.track.product.addToCart(product);
|
|
605
|
+
});
|
|
606
|
+
if (products.length > 0) {
|
|
607
|
+
this.eventManager.fire('addToCart', { controller: this, products: products });
|
|
608
|
+
}
|
|
602
609
|
return [2 /*return*/];
|
|
603
610
|
});
|
|
604
611
|
}); };
|
|
@@ -618,7 +625,7 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
618
625
|
key: "ss-controller-".concat(_this.config.id),
|
|
619
626
|
});
|
|
620
627
|
_this.eventManager.on('afterStore', function (search, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
621
|
-
var controller, products, results,
|
|
628
|
+
var controller, products, results, data_1;
|
|
622
629
|
var _this = this;
|
|
623
630
|
var _a;
|
|
624
631
|
return __generator(this, function (_b) {
|
|
@@ -630,13 +637,15 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
630
637
|
if (controller.store.loaded && !controller.store.error) {
|
|
631
638
|
products = controller.store.results.filter(function (result) { return result.type === 'product'; });
|
|
632
639
|
results = products.length === 0 ? [] : products;
|
|
633
|
-
|
|
634
|
-
this.tracker.events.autocomplete.render({ data:
|
|
640
|
+
data_1 = getAutocompleteSchemaData({ params: search.request, store: this.store, results: results });
|
|
641
|
+
this.tracker.events.autocomplete.render({ data: data_1, siteId: (_a = this.config.globals) === null || _a === void 0 ? void 0 : _a.siteId });
|
|
635
642
|
products.forEach(function (result) {
|
|
636
643
|
_this.events.product[result.id] = _this.events.product[result.id] || {};
|
|
637
644
|
_this.events.product[result.id].render = true;
|
|
645
|
+
_this.eventManager.fire('track.product.render', { controller: _this, product: result, trackEvent: data_1 });
|
|
638
646
|
});
|
|
639
|
-
|
|
647
|
+
// reset events for new search. It's here for a reason. Ensures render happens before impressions on new input value?
|
|
648
|
+
this.events = { product: {} };
|
|
640
649
|
}
|
|
641
650
|
return [2 /*return*/];
|
|
642
651
|
}
|
|
@@ -977,7 +986,7 @@ function getAutocompleteSchemaData(_a) {
|
|
|
977
986
|
}
|
|
978
987
|
return acc;
|
|
979
988
|
}, {});
|
|
980
|
-
return __assign(__assign({ q: ((_d = (_c = store.search) === null || _c === void 0 ? void 0 : _c.originalQuery) === null || _d === void 0 ? void 0 : _d.string) || ((_f = (_e = store.search) === null || _e === void 0 ? void 0 : _e.query) === null || _f === void 0 ? void 0 : _f.string) || '', correctedQuery: ((_h = (_g = store.search) === null || _g === void 0 ? void 0 : _g.originalQuery) === null || _h === void 0 ? void 0 : _h.string) ? (_k = (_j = store.search) === null || _j === void 0 ? void 0 : _j.query) === null || _k === void 0 ? void 0 : _k.string : undefined }, filters), { sort: (_l = params.sorts) === null || _l === void 0 ? void 0 : _l.map(function (sort) {
|
|
989
|
+
return __assign(__assign({ q: ((_d = (_c = store.search) === null || _c === void 0 ? void 0 : _c.originalQuery) === null || _d === void 0 ? void 0 : _d.string) || ((_f = (_e = store.search) === null || _e === void 0 ? void 0 : _e.query) === null || _f === void 0 ? void 0 : _f.string) || '', correctedQuery: ((_h = (_g = store.search) === null || _g === void 0 ? void 0 : _g.originalQuery) === null || _h === void 0 ? void 0 : _h.string) ? (_k = (_j = store.search) === null || _j === void 0 ? void 0 : _j.query) === null || _k === void 0 ? void 0 : _k.string : undefined, matchType: store.search.matchType }, filters), { sort: (_l = params.sorts) === null || _l === void 0 ? void 0 : _l.map(function (sort) {
|
|
981
990
|
return {
|
|
982
991
|
field: sort.field,
|
|
983
992
|
dir: sort.direction,
|
|
@@ -1001,11 +1010,11 @@ function getAutocompleteSchemaData(_a) {
|
|
|
1001
1010
|
undefined,
|
|
1002
1011
|
}, results: (results === null || results === void 0 ? void 0 : results.map(function (result) {
|
|
1003
1012
|
var core = result.mappings.core;
|
|
1013
|
+
var position = result.position;
|
|
1004
1014
|
return {
|
|
1015
|
+
position: position,
|
|
1005
1016
|
uid: core.uid || '',
|
|
1006
|
-
// childUid: core.uid,
|
|
1007
1017
|
sku: core.sku,
|
|
1008
|
-
// childSku: core.sku,
|
|
1009
1018
|
};
|
|
1010
1019
|
})) || [] });
|
|
1011
1020
|
}
|
|
@@ -12,9 +12,6 @@ type RecommendationTrackMethods = {
|
|
|
12
12
|
impression: (result: Product) => void;
|
|
13
13
|
addToCart: (result: Product) => void;
|
|
14
14
|
};
|
|
15
|
-
bundle: {
|
|
16
|
-
addToCart: (results: Product[]) => void;
|
|
17
|
-
};
|
|
18
15
|
};
|
|
19
16
|
export declare class RecommendationController extends AbstractController {
|
|
20
17
|
type: ControllerTypes;
|
|
@@ -22,6 +19,7 @@ export declare class RecommendationController extends AbstractController {
|
|
|
22
19
|
config: RecommendationControllerConfig;
|
|
23
20
|
events: {
|
|
24
21
|
product: Record<string, {
|
|
22
|
+
click?: boolean;
|
|
25
23
|
clickThrough?: boolean;
|
|
26
24
|
impression?: boolean;
|
|
27
25
|
render?: boolean;
|
|
@@ -31,6 +29,7 @@ export declare class RecommendationController extends AbstractController {
|
|
|
31
29
|
track: RecommendationTrackMethods;
|
|
32
30
|
get params(): RecommendRequestModel;
|
|
33
31
|
search: () => Promise<void>;
|
|
32
|
+
addToCart: (_products: Product[] | Product) => Promise<void>;
|
|
34
33
|
}
|
|
35
34
|
export {};
|
|
36
35
|
//# sourceMappingURL=RecommendationController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,gBAAgB,EAAiB,MAAM,UAAU,CAAC;AAKpH,KAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAChD,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAClC,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACtC,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;KACrC,CAAC;
|
|
1
|
+
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,gBAAgB,EAAiB,MAAM,UAAU,CAAC;AAKpH,KAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAChD,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAClC,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACtC,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;KACrC,CAAC;CACF,CAAC;AAUF,qBAAa,wBAAyB,SAAQ,kBAAkB;IACxD,IAAI,kBAAkC;IACrC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,8BAA8B,CAAC;IAE/C,MAAM,EAAE;QACP,OAAO,EAAE,MAAM,CACd,MAAM,EACN;YACC,KAAK,CAAC,EAAE,OAAO,CAAC;YAChB,YAAY,CAAC,EAAE,OAAO,CAAC;YACvB,UAAU,CAAC,EAAE,OAAO,CAAC;YACrB,MAAM,CAAC,EAAE,OAAO,CAAC;SACjB,CACD,CAAC;KACF,CAEC;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;IAwD3B,KAAK,EAAE,0BAA0B,CAuD/B;IAEF,IAAI,MAAM,IAAI,qBAAqB,CA4BlC;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CA6H9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAQ/D;CACF"}
|
|
@@ -70,6 +70,7 @@ var deepmerge_1 = __importDefault(require("deepmerge"));
|
|
|
70
70
|
var snap_store_mobx_1 = require("@searchspring/snap-store-mobx");
|
|
71
71
|
var AbstractController_1 = require("../Abstract/AbstractController");
|
|
72
72
|
var types_1 = require("../types");
|
|
73
|
+
var isClickWithinProductLink_1 = require("../utils/isClickWithinProductLink");
|
|
73
74
|
var defaultConfig = {
|
|
74
75
|
id: 'recommend',
|
|
75
76
|
tag: '',
|
|
@@ -97,18 +98,22 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
97
98
|
_this.tracker.events.recommendations.clickThrough({ data: data, siteId: (_b = _this.config.globals) === null || _b === void 0 ? void 0 : _b.siteId });
|
|
98
99
|
_this.events.product[result.id] = _this.events.product[result.id] || {};
|
|
99
100
|
_this.events.product[result.id].clickThrough = true;
|
|
100
|
-
_this.eventManager.fire('track.product.clickThrough', { controller: _this, event: e,
|
|
101
|
+
_this.eventManager.fire('track.product.clickThrough', { controller: _this, event: e, product: result, trackEvent: data });
|
|
101
102
|
},
|
|
102
103
|
click: function (e, result) {
|
|
103
|
-
var _a
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if (href) {
|
|
107
|
-
_this.track.product.clickThrough(e, result);
|
|
104
|
+
var _a;
|
|
105
|
+
if ((_a = _this.events.product[result.id]) === null || _a === void 0 ? void 0 : _a.click) {
|
|
106
|
+
return;
|
|
108
107
|
}
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
if (result.type === 'banner') {
|
|
109
|
+
return;
|
|
111
110
|
}
|
|
111
|
+
(0, isClickWithinProductLink_1.isClickWithinProductLink)(e, result) && _this.track.product.clickThrough(e, result);
|
|
112
|
+
_this.events.product[result.id] = _this.events.product[result.id] || {};
|
|
113
|
+
_this.events.product[result.id].click = true;
|
|
114
|
+
setTimeout(function () {
|
|
115
|
+
_this.events.product[result.id].click = false;
|
|
116
|
+
}, isClickWithinProductLink_1.CLICK_DUPLICATION_TIMEOUT);
|
|
112
117
|
},
|
|
113
118
|
impression: function (result) {
|
|
114
119
|
var _a, _b;
|
|
@@ -118,7 +123,7 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
118
123
|
_this.tracker.events.recommendations.impression({ data: data, siteId: (_b = _this.config.globals) === null || _b === void 0 ? void 0 : _b.siteId });
|
|
119
124
|
_this.events.product[result.id] = _this.events.product[result.id] || {};
|
|
120
125
|
_this.events.product[result.id].impression = true;
|
|
121
|
-
_this.eventManager.fire('track.product.impression', { controller: _this,
|
|
126
|
+
_this.eventManager.fire('track.product.impression', { controller: _this, product: result, trackEvent: data });
|
|
122
127
|
return data;
|
|
123
128
|
},
|
|
124
129
|
render: function (result) {
|
|
@@ -129,25 +134,14 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
129
134
|
_this.tracker.events.recommendations.render({ data: data, siteId: (_b = _this.config.globals) === null || _b === void 0 ? void 0 : _b.siteId });
|
|
130
135
|
_this.events.product[result.id] = _this.events.product[result.id] || {};
|
|
131
136
|
_this.events.product[result.id].render = true;
|
|
132
|
-
_this.eventManager.fire('track.product.render', { controller: _this,
|
|
137
|
+
_this.eventManager.fire('track.product.render', { controller: _this, product: result, trackEvent: data });
|
|
133
138
|
return data;
|
|
134
139
|
},
|
|
135
140
|
addToCart: function (result) {
|
|
136
141
|
var _a;
|
|
137
142
|
var data = getRecommendationsAddtocartSchemaData({ store: _this.store, results: [result] });
|
|
138
143
|
_this.tracker.events.recommendations.addToCart({ data: data, siteId: (_a = _this.config.globals) === null || _a === void 0 ? void 0 : _a.siteId });
|
|
139
|
-
_this.eventManager.fire('track.product.addToCart', { controller: _this,
|
|
140
|
-
return data;
|
|
141
|
-
},
|
|
142
|
-
},
|
|
143
|
-
bundle: {
|
|
144
|
-
addToCart: function (results) {
|
|
145
|
-
var _a;
|
|
146
|
-
if (_this.store.profile.type != 'bundle')
|
|
147
|
-
return;
|
|
148
|
-
var data = getRecommendationsAddtocartSchemaData({ store: _this.store, results: results });
|
|
149
|
-
_this.tracker.events.recommendations.addToCart({ data: data, siteId: (_a = _this.config.globals) === null || _a === void 0 ? void 0 : _a.siteId });
|
|
150
|
-
_this.eventManager.fire('track.bundle.addToCart', { controller: _this, products: results, trackEvent: data });
|
|
144
|
+
_this.eventManager.fire('track.product.addToCart', { controller: _this, product: result, trackEvent: data });
|
|
151
145
|
return data;
|
|
152
146
|
},
|
|
153
147
|
},
|
|
@@ -302,6 +296,20 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
302
296
|
}
|
|
303
297
|
});
|
|
304
298
|
}); };
|
|
299
|
+
_this.addToCart = function (_products) { return __awaiter(_this, void 0, void 0, function () {
|
|
300
|
+
var products;
|
|
301
|
+
var _this = this;
|
|
302
|
+
return __generator(this, function (_a) {
|
|
303
|
+
products = typeof _products.slice == 'function' ? _products.slice() : [_products];
|
|
304
|
+
products.forEach(function (product) {
|
|
305
|
+
_this.track.product.addToCart(product);
|
|
306
|
+
});
|
|
307
|
+
if (products.length > 0) {
|
|
308
|
+
this.eventManager.fire('addToCart', { controller: this, products: products });
|
|
309
|
+
}
|
|
310
|
+
return [2 /*return*/];
|
|
311
|
+
});
|
|
312
|
+
}); };
|
|
305
313
|
if (!config.tag) {
|
|
306
314
|
throw new Error("Invalid config passed to RecommendationController. The \"tag\" attribute is required.");
|
|
307
315
|
}
|
|
@@ -318,7 +326,7 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
318
326
|
_this.config = (0, deepmerge_1.default)(defaultConfig, _this.config);
|
|
319
327
|
_this.store.setConfig(_this.config);
|
|
320
328
|
_this.eventManager.on('afterStore', function (search, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
321
|
-
var controller, products, results,
|
|
329
|
+
var controller, products, results, data_1;
|
|
322
330
|
var _this = this;
|
|
323
331
|
var _a;
|
|
324
332
|
return __generator(this, function (_b) {
|
|
@@ -330,13 +338,13 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
330
338
|
if (controller.store.loaded && !controller.store.error) {
|
|
331
339
|
products = controller.store.results.filter(function (result) { return result.type === 'product'; });
|
|
332
340
|
results = products.length === 0 ? [] : products;
|
|
333
|
-
|
|
334
|
-
this.tracker.events.recommendations.render({ data:
|
|
341
|
+
data_1 = getRecommendationsSchemaData({ store: this.store, results: results });
|
|
342
|
+
this.tracker.events.recommendations.render({ data: data_1, siteId: (_a = this.config.globals) === null || _a === void 0 ? void 0 : _a.siteId });
|
|
335
343
|
products.forEach(function (result) {
|
|
336
344
|
_this.events.product[result.id] = _this.events.product[result.id] || {};
|
|
337
345
|
_this.events.product[result.id].render = true;
|
|
346
|
+
_this.eventManager.fire('track.product.render', { controller: _this, product: result, trackEvent: data_1 });
|
|
338
347
|
});
|
|
339
|
-
this.eventManager.fire('track.product.render', { controller: this, products: products, trackEvent: data });
|
|
340
348
|
}
|
|
341
349
|
return [2 /*return*/];
|
|
342
350
|
}
|
|
@@ -389,9 +397,9 @@ function getRecommendationsAddtocartSchemaData(_a) {
|
|
|
389
397
|
results: (results === null || results === void 0 ? void 0 : results.map(function (result) {
|
|
390
398
|
var core = result.mappings.core;
|
|
391
399
|
return {
|
|
392
|
-
uid: core.uid || '',
|
|
393
|
-
sku: core.sku,
|
|
394
|
-
price: Number(core.price),
|
|
400
|
+
uid: (core === null || core === void 0 ? void 0 : core.uid) || '',
|
|
401
|
+
sku: core === null || core === void 0 ? void 0 : core.sku,
|
|
402
|
+
price: Number(core === null || core === void 0 ? void 0 : core.price),
|
|
395
403
|
qty: result.quantity || 1,
|
|
396
404
|
};
|
|
397
405
|
})) || [],
|
|
@@ -403,11 +411,11 @@ function getRecommendationsSchemaData(_a) {
|
|
|
403
411
|
tag: store.profile.tag,
|
|
404
412
|
results: (results === null || results === void 0 ? void 0 : results.map(function (result) {
|
|
405
413
|
var core = result.mappings.core;
|
|
414
|
+
var position = result.position;
|
|
406
415
|
return {
|
|
416
|
+
position: position,
|
|
407
417
|
uid: core.uid || '',
|
|
408
|
-
// childUid: core.uid,
|
|
409
418
|
sku: core.sku,
|
|
410
|
-
// childSku: core.sku,
|
|
411
419
|
};
|
|
412
420
|
})) || [],
|
|
413
421
|
};
|
|
@@ -26,7 +26,7 @@ export declare class SearchController extends AbstractController {
|
|
|
26
26
|
track: SearchTrackMethods;
|
|
27
27
|
get params(): SearchRequestModel;
|
|
28
28
|
search: () => Promise<void>;
|
|
29
|
-
addToCart: (
|
|
29
|
+
addToCart: (_products: Product[] | Product) => Promise<void>;
|
|
30
30
|
}
|
|
31
31
|
export declare function getStorableRequestParams(request: SearchRequestModel): SearchRequestModel;
|
|
32
32
|
export declare function generateHrefSelector(element: HTMLElement, href: string, levels?: number): string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAa,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,KAAK,EACX,sBAAsB,EAGtB,kBAAkB,EAClB,gBAAgB,EAIhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,
|
|
1
|
+
{"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../src/Search/SearchController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAa,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,KAAK,EACX,sBAAsB,EAGtB,kBAAkB,EAClB,gBAAgB,EAIhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,EAQlB,MAAM,2BAA2B,CAAC;AAiCnC,KAAK,kBAAkB,GAAG;IACzB,OAAO,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;QACzD,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAClC,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACtC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACtC,CAAC;IACF,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAGF,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;IAC/D,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,MAAM,CAUM;gBAGnB,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;IAuN3B,KAAK,EAAE,kBAAkB,CA+FvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CA8C/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAyN9B;IAEF,SAAS,cAAqB,OAAO,EAAE,GAAG,OAAO,KAAG,QAAQ,IAAI,CAAC,CAQ/D;CACF;AAuBD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,CAiBxF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,GAAG,SAAS,CAgCvG"}
|