@searchspring/snap-controller 0.65.1 → 0.66.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/Autocomplete/AutocompleteController.d.ts +2 -1
- package/dist/cjs/Autocomplete/AutocompleteController.d.ts.map +1 -1
- package/dist/cjs/Autocomplete/AutocompleteController.js +79 -32
- 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 +73 -25
- 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 +141 -61
- 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 +22 -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 +66 -28
- 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 +56 -23
- 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 +123 -53
- 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 +17 -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,
|
|
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,31 +122,32 @@ 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;
|
|
142
144
|
if ((_a = _this.events.product[result.id]) === null || _a === void 0 ? void 0 : _a.render)
|
|
143
145
|
return;
|
|
144
|
-
var data = getAutocompleteSchemaData({ params: _this.params, store: _this.store, results: [result] });
|
|
146
|
+
var data = getAutocompleteSchemaData({ params: _this.params, store: _this.store, results: result ? [result] : [] });
|
|
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
|
-
var data =
|
|
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
|
}); };
|
|
@@ -617,6 +624,33 @@ var AutocompleteController = /** @class */ (function (_super) {
|
|
|
617
624
|
type: 'session',
|
|
618
625
|
key: "ss-controller-".concat(_this.config.id),
|
|
619
626
|
});
|
|
627
|
+
_this.eventManager.on('afterStore', function (search, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
628
|
+
var controller, products, results, data_1;
|
|
629
|
+
var _this = this;
|
|
630
|
+
var _a;
|
|
631
|
+
return __generator(this, function (_b) {
|
|
632
|
+
switch (_b.label) {
|
|
633
|
+
case 0: return [4 /*yield*/, next()];
|
|
634
|
+
case 1:
|
|
635
|
+
_b.sent();
|
|
636
|
+
controller = search.controller;
|
|
637
|
+
if (controller.store.loaded && !controller.store.error) {
|
|
638
|
+
products = controller.store.results.filter(function (result) { return result.type === 'product'; });
|
|
639
|
+
results = products.length === 0 ? [] : products;
|
|
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 });
|
|
642
|
+
products.forEach(function (result) {
|
|
643
|
+
_this.events.product[result.id] = _this.events.product[result.id] || {};
|
|
644
|
+
_this.events.product[result.id].render = true;
|
|
645
|
+
_this.eventManager.fire('track.product.render', { controller: _this, product: result, trackEvent: data_1 });
|
|
646
|
+
});
|
|
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: {} };
|
|
649
|
+
}
|
|
650
|
+
return [2 /*return*/];
|
|
651
|
+
}
|
|
652
|
+
});
|
|
653
|
+
}); });
|
|
620
654
|
// add 'afterSearch' middleware
|
|
621
655
|
_this.eventManager.on('afterSearch', function (ac, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
622
656
|
return __generator(this, function (_a) {
|
|
@@ -914,8 +948,21 @@ function getAutocompleteRedirectSchemaData(_a) {
|
|
|
914
948
|
redirect: redirectURL,
|
|
915
949
|
};
|
|
916
950
|
}
|
|
951
|
+
function getAutocompleteAddtocartSchemaData(_a) {
|
|
952
|
+
var params = _a.params, store = _a.store, results = _a.results;
|
|
953
|
+
var base = getAutocompleteSchemaData({ params: params, store: store, results: results });
|
|
954
|
+
return __assign(__assign({}, base), { results: (results === null || results === void 0 ? void 0 : results.map(function (result) {
|
|
955
|
+
var core = result.mappings.core;
|
|
956
|
+
return {
|
|
957
|
+
uid: core.uid || '',
|
|
958
|
+
sku: core.sku,
|
|
959
|
+
price: Number(core.price),
|
|
960
|
+
qty: result.quantity || 1,
|
|
961
|
+
};
|
|
962
|
+
})) || [] });
|
|
963
|
+
}
|
|
917
964
|
function getAutocompleteSchemaData(_a) {
|
|
918
|
-
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o
|
|
965
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
919
966
|
var params = _a.params, store = _a.store, results = _a.results;
|
|
920
967
|
var filters = (_b = params.filters) === null || _b === void 0 ? void 0 : _b.reduce(function (acc, filter) {
|
|
921
968
|
var _a;
|
|
@@ -939,20 +986,20 @@ function getAutocompleteSchemaData(_a) {
|
|
|
939
986
|
}
|
|
940
987
|
return acc;
|
|
941
988
|
}, {});
|
|
942
|
-
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:
|
|
943
|
-
{
|
|
944
|
-
field:
|
|
945
|
-
dir:
|
|
946
|
-
}
|
|
947
|
-
|
|
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) {
|
|
990
|
+
return {
|
|
991
|
+
field: sort.field,
|
|
992
|
+
dir: sort.direction,
|
|
993
|
+
};
|
|
994
|
+
}), pagination: {
|
|
948
995
|
totalResults: store.pagination.totalResults,
|
|
949
996
|
page: store.pagination.page,
|
|
950
997
|
resultsPerPage: store.pagination.pageSize,
|
|
951
998
|
}, merchandising: {
|
|
952
999
|
personalized: store.merchandising.personalized,
|
|
953
1000
|
redirect: store.merchandising.redirect,
|
|
954
|
-
triggeredCampaigns: (((
|
|
955
|
-
((
|
|
1001
|
+
triggeredCampaigns: (((_m = store.merchandising.campaigns) === null || _m === void 0 ? void 0 : _m.length) &&
|
|
1002
|
+
((_o = store.merchandising.campaigns) === null || _o === void 0 ? void 0 : _o.map(function (campaign) {
|
|
956
1003
|
var experiement = store.merchandising.experiments.find(function (experiment) { return experiment.campaignId === campaign.id; });
|
|
957
1004
|
return {
|
|
958
1005
|
id: campaign.id,
|
|
@@ -963,11 +1010,11 @@ function getAutocompleteSchemaData(_a) {
|
|
|
963
1010
|
undefined,
|
|
964
1011
|
}, results: (results === null || results === void 0 ? void 0 : results.map(function (result) {
|
|
965
1012
|
var core = result.mappings.core;
|
|
1013
|
+
var position = result.position;
|
|
966
1014
|
return {
|
|
1015
|
+
position: position,
|
|
967
1016
|
uid: core.uid || '',
|
|
968
|
-
// childUid: core.uid,
|
|
969
1017
|
sku: core.sku,
|
|
970
|
-
// childSku: core.sku,
|
|
971
1018
|
};
|
|
972
1019
|
})) || [] });
|
|
973
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,
|
|
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
|
-
var data =
|
|
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 = getRecommendationsSchemaData({ 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
|
}
|
|
@@ -317,6 +325,31 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
317
325
|
// deep merge config with defaults
|
|
318
326
|
_this.config = (0, deepmerge_1.default)(defaultConfig, _this.config);
|
|
319
327
|
_this.store.setConfig(_this.config);
|
|
328
|
+
_this.eventManager.on('afterStore', function (search, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
329
|
+
var controller, products, results, data_1;
|
|
330
|
+
var _this = this;
|
|
331
|
+
var _a;
|
|
332
|
+
return __generator(this, function (_b) {
|
|
333
|
+
switch (_b.label) {
|
|
334
|
+
case 0: return [4 /*yield*/, next()];
|
|
335
|
+
case 1:
|
|
336
|
+
_b.sent();
|
|
337
|
+
controller = search.controller;
|
|
338
|
+
if (controller.store.loaded && !controller.store.error) {
|
|
339
|
+
products = controller.store.results.filter(function (result) { return result.type === 'product'; });
|
|
340
|
+
results = products.length === 0 ? [] : products;
|
|
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 });
|
|
343
|
+
products.forEach(function (result) {
|
|
344
|
+
_this.events.product[result.id] = _this.events.product[result.id] || {};
|
|
345
|
+
_this.events.product[result.id].render = true;
|
|
346
|
+
_this.eventManager.fire('track.product.render', { controller: _this, product: result, trackEvent: data_1 });
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
return [2 /*return*/];
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
}); });
|
|
320
353
|
// add 'afterStore' middleware
|
|
321
354
|
// this.eventManager.on('afterStore', async (recommend: AfterStoreObj, next: Next): Promise<void | boolean> => {
|
|
322
355
|
// await next();
|
|
@@ -357,17 +390,32 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
357
390
|
return RecommendationController;
|
|
358
391
|
}(AbstractController_1.AbstractController));
|
|
359
392
|
exports.RecommendationController = RecommendationController;
|
|
393
|
+
function getRecommendationsAddtocartSchemaData(_a) {
|
|
394
|
+
var store = _a.store, results = _a.results;
|
|
395
|
+
return {
|
|
396
|
+
tag: store.profile.tag,
|
|
397
|
+
results: (results === null || results === void 0 ? void 0 : results.map(function (result) {
|
|
398
|
+
var core = result.mappings.core;
|
|
399
|
+
return {
|
|
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),
|
|
403
|
+
qty: result.quantity || 1,
|
|
404
|
+
};
|
|
405
|
+
})) || [],
|
|
406
|
+
};
|
|
407
|
+
}
|
|
360
408
|
function getRecommendationsSchemaData(_a) {
|
|
361
409
|
var store = _a.store, results = _a.results;
|
|
362
410
|
return {
|
|
363
411
|
tag: store.profile.tag,
|
|
364
412
|
results: (results === null || results === void 0 ? void 0 : results.map(function (result) {
|
|
365
413
|
var core = result.mappings.core;
|
|
414
|
+
var position = result.position;
|
|
366
415
|
return {
|
|
416
|
+
position: position,
|
|
367
417
|
uid: core.uid || '',
|
|
368
|
-
// childUid: core.uid,
|
|
369
418
|
sku: core.sku,
|
|
370
|
-
// childSku: core.sku,
|
|
371
419
|
};
|
|
372
420
|
})) || [],
|
|
373
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,
|
|
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;AAkCnC,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;AAwBD,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"}
|