@searchspring/snap-controller 0.51.1 → 0.52.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.js +1 -1
- package/dist/cjs/Autocomplete/AutocompleteController.d.ts +1 -1
- package/dist/cjs/Autocomplete/AutocompleteController.d.ts.map +1 -1
- package/dist/cjs/Autocomplete/AutocompleteController.js +1 -1
- package/dist/cjs/Finder/FinderController.js +1 -1
- package/dist/cjs/Recommendation/RecommendationController.d.ts +7 -4
- package/dist/cjs/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/cjs/Recommendation/RecommendationController.js +123 -7
- 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 +18 -8
- package/dist/cjs/types.d.ts +17 -17
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/types.js +1 -1
- package/dist/esm/Abstract/AbstractController.js +3 -3
- package/dist/esm/Autocomplete/AutocompleteController.d.ts +1 -1
- package/dist/esm/Autocomplete/AutocompleteController.d.ts.map +1 -1
- package/dist/esm/Recommendation/RecommendationController.d.ts +7 -4
- package/dist/esm/Recommendation/RecommendationController.d.ts.map +1 -1
- package/dist/esm/Recommendation/RecommendationController.js +113 -3
- 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 +12 -2
- package/dist/esm/types.d.ts +17 -17
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +10 -10
|
@@ -14,7 +14,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
14
14
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
15
|
function step(op) {
|
|
16
16
|
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (_) try {
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
18
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
19
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
20
|
switch (op[0]) {
|
|
@@ -6,7 +6,7 @@ import { AutocompleteStore } from '@searchspring/snap-store-mobx';
|
|
|
6
6
|
import type { AutocompleteControllerConfig, ControllerServices, ContextVariables } from '../types';
|
|
7
7
|
import type { AutocompleteRequestModel } from '@searchspring/snapi-types';
|
|
8
8
|
export declare const INPUT_DELAY = 200;
|
|
9
|
-
|
|
9
|
+
type AutocompleteTrackMethods = {
|
|
10
10
|
product: {
|
|
11
11
|
click: (e: MouseEvent, result: any) => void;
|
|
12
12
|
};
|
|
@@ -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;AA2B/B,
|
|
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;AA2B/B,KAAK,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;IAsE3B,KAAK,EAAE,wBAAwB,CAO7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CA0CrC;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;;;;uBAqDL,UAAU,KAAG,IAAI;;MAS5B;IAEF,MAAM,IAAI,IAAI;IAgBR,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6E3B,cAAc,QAAa,QAAQ,IAAI,CAAC,CAwBtC;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAmI9B;CACF"}
|
|
@@ -40,7 +40,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
40
40
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
41
41
|
function step(op) {
|
|
42
42
|
if (f) throw new TypeError("Generator is already executing.");
|
|
43
|
-
while (_) try {
|
|
43
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
44
44
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
45
45
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
46
46
|
switch (op[0]) {
|
|
@@ -40,7 +40,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
40
40
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
41
41
|
function step(op) {
|
|
42
42
|
if (f) throw new TypeError("Generator is already executing.");
|
|
43
|
-
while (_) try {
|
|
43
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
44
44
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
45
45
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
46
46
|
switch (op[0]) {
|
|
@@ -5,13 +5,16 @@ import { ControllerTypes } from '../types';
|
|
|
5
5
|
import type { RecommendationStore } from '@searchspring/snap-store-mobx';
|
|
6
6
|
import type { RecommendCombinedRequestModel } from '@searchspring/snap-client';
|
|
7
7
|
import type { RecommendationControllerConfig, ControllerServices, ContextVariables } from '../types';
|
|
8
|
-
|
|
8
|
+
type RecommendationTrackMethods = {
|
|
9
9
|
product: {
|
|
10
|
-
click: (e: MouseEvent, result:
|
|
11
|
-
render: (result:
|
|
12
|
-
impression: (result:
|
|
10
|
+
click: (e: MouseEvent, result: Product) => BeaconEvent | undefined;
|
|
11
|
+
render: (result: Product) => BeaconEvent | undefined;
|
|
12
|
+
impression: (result: Product) => BeaconEvent | undefined;
|
|
13
|
+
removedFromBundle: (result: Product) => BeaconEvent | undefined;
|
|
14
|
+
addedToBundle: (result: Product) => BeaconEvent | undefined;
|
|
13
15
|
};
|
|
14
16
|
click: (e: MouseEvent) => BeaconEvent | undefined;
|
|
17
|
+
addBundle: (e: MouseEvent, results: Product[]) => BeaconEvent | undefined;
|
|
15
18
|
impression: () => BeaconEvent | undefined;
|
|
16
19
|
render: (results?: Product[]) => BeaconEvent | undefined;
|
|
17
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,8BAA8B,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,
|
|
1
|
+
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,8BAA8B,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,KAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACnE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACrD,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACzD,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QAChE,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;KAC5D,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;IAC1E,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;CACzD,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;IA2C3B,KAAK,EAAE,0BAA0B,CAwS5B;IAEL,IAAI,MAAM,IAAI,6BAA6B,CA2B1C;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAuH9B;CACF"}
|
|
@@ -40,7 +40,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
40
40
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
41
41
|
function step(op) {
|
|
42
42
|
if (f) throw new TypeError("Generator is already executing.");
|
|
43
|
-
while (_) try {
|
|
43
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
44
44
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
45
45
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
46
46
|
switch (op[0]) {
|
|
@@ -98,6 +98,9 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
98
98
|
if (_this.config.globals.product) {
|
|
99
99
|
skus = [_this.config.globals.product];
|
|
100
100
|
}
|
|
101
|
+
else if (_this.config.globals.products) {
|
|
102
|
+
skus = _this.config.globals.products;
|
|
103
|
+
}
|
|
101
104
|
break;
|
|
102
105
|
case snap_tracker_1.ProfilePlacement.BASKETPAGE:
|
|
103
106
|
skus = _this.tracker.cookies.cart.get(); // this is an array
|
|
@@ -133,7 +136,7 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
133
136
|
product: {
|
|
134
137
|
id: result.id,
|
|
135
138
|
mappings: {
|
|
136
|
-
core: result.mappings.core,
|
|
139
|
+
core: result.display.mappings.core,
|
|
137
140
|
},
|
|
138
141
|
seed: getSeed(),
|
|
139
142
|
},
|
|
@@ -161,7 +164,7 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
161
164
|
product: {
|
|
162
165
|
id: result.id,
|
|
163
166
|
mappings: {
|
|
164
|
-
core: result.mappings.core,
|
|
167
|
+
core: result.display.mappings.core,
|
|
165
168
|
},
|
|
166
169
|
seed: getSeed(),
|
|
167
170
|
},
|
|
@@ -190,7 +193,7 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
190
193
|
product: {
|
|
191
194
|
id: result.id,
|
|
192
195
|
mappings: {
|
|
193
|
-
core: result.mappings.core,
|
|
196
|
+
core: result.display.mappings.core,
|
|
194
197
|
},
|
|
195
198
|
seed: getSeed(),
|
|
196
199
|
},
|
|
@@ -202,6 +205,104 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
202
205
|
_this.eventManager.fire('track.product.render', { controller: _this, result: result, trackEvent: event });
|
|
203
206
|
return event;
|
|
204
207
|
},
|
|
208
|
+
removedFromBundle: function (result) {
|
|
209
|
+
var _a, _b;
|
|
210
|
+
if (!_this.store.profile.tag ||
|
|
211
|
+
!result ||
|
|
212
|
+
!_this.events.render ||
|
|
213
|
+
!((_a = _this.events.product[result.id]) === null || _a === void 0 ? void 0 : _a.render) ||
|
|
214
|
+
_this.store.profile.type != 'bundle')
|
|
215
|
+
return;
|
|
216
|
+
var payload = {
|
|
217
|
+
type: snap_tracker_1.BeaconType.PROFILE_PRODUCT_REMOVEDFROMBUNDLE,
|
|
218
|
+
category: snap_tracker_1.BeaconCategory.RECOMMENDATIONS,
|
|
219
|
+
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } : undefined,
|
|
220
|
+
event: {
|
|
221
|
+
context: {
|
|
222
|
+
placement: _this.store.profile.placement,
|
|
223
|
+
tag: _this.store.profile.tag,
|
|
224
|
+
type: 'product-recommendation',
|
|
225
|
+
},
|
|
226
|
+
product: {
|
|
227
|
+
id: result.id,
|
|
228
|
+
mappings: {
|
|
229
|
+
core: result.display.mappings.core,
|
|
230
|
+
},
|
|
231
|
+
seed: getSeed(),
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
pid: (_b = _this.events.click) === null || _b === void 0 ? void 0 : _b.id,
|
|
235
|
+
};
|
|
236
|
+
_this.events.product[result.id] = _this.events.product[result.id] || {};
|
|
237
|
+
var event = (_this.events.product[result.id].render = _this.tracker.track.event(payload));
|
|
238
|
+
_this.eventManager.fire('track.product.removedFromBundle', { controller: _this, result: result, trackEvent: event });
|
|
239
|
+
return event;
|
|
240
|
+
},
|
|
241
|
+
addedToBundle: function (result) {
|
|
242
|
+
var _a, _b;
|
|
243
|
+
if (!_this.store.profile.tag ||
|
|
244
|
+
!result ||
|
|
245
|
+
!_this.events.render ||
|
|
246
|
+
!((_a = _this.events.product[result.id]) === null || _a === void 0 ? void 0 : _a.render) ||
|
|
247
|
+
_this.store.profile.type != 'bundle')
|
|
248
|
+
return;
|
|
249
|
+
var payload = {
|
|
250
|
+
type: snap_tracker_1.BeaconType.PROFILE_PRODUCT_ADDEDTOBUNDLE,
|
|
251
|
+
category: snap_tracker_1.BeaconCategory.RECOMMENDATIONS,
|
|
252
|
+
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } : undefined,
|
|
253
|
+
event: {
|
|
254
|
+
context: {
|
|
255
|
+
placement: _this.store.profile.placement,
|
|
256
|
+
tag: _this.store.profile.tag,
|
|
257
|
+
type: 'product-recommendation',
|
|
258
|
+
},
|
|
259
|
+
product: {
|
|
260
|
+
id: result.id,
|
|
261
|
+
mappings: {
|
|
262
|
+
core: result.display.mappings.core,
|
|
263
|
+
},
|
|
264
|
+
seed: getSeed(),
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
pid: (_b = _this.events.click) === null || _b === void 0 ? void 0 : _b.id,
|
|
268
|
+
};
|
|
269
|
+
_this.events.product[result.id] = _this.events.product[result.id] || {};
|
|
270
|
+
var event = (_this.events.product[result.id].render = _this.tracker.track.event(payload));
|
|
271
|
+
_this.eventManager.fire('track.product.addedToBundle', { controller: _this, result: result, trackEvent: event });
|
|
272
|
+
return event;
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
addBundle: function (e, results) {
|
|
276
|
+
if (!results.length || !_this.store.profile.tag || _this.store.profile.type != 'bundle')
|
|
277
|
+
return;
|
|
278
|
+
var event = _this.tracker.track.event({
|
|
279
|
+
type: snap_tracker_1.BeaconType.PROFILE_ADDBUNDLE,
|
|
280
|
+
category: snap_tracker_1.BeaconCategory.RECOMMENDATIONS,
|
|
281
|
+
context: _this.config.globals.siteId ? { website: { trackingCode: _this.config.globals.siteId } } : undefined,
|
|
282
|
+
event: {
|
|
283
|
+
context: {
|
|
284
|
+
placement: _this.store.profile.placement,
|
|
285
|
+
tag: _this.store.profile.tag,
|
|
286
|
+
type: 'product-recommendation',
|
|
287
|
+
},
|
|
288
|
+
products: results.map(function (result) { return ({
|
|
289
|
+
id: result.id,
|
|
290
|
+
mappings: {
|
|
291
|
+
core: result.display.mappings.core,
|
|
292
|
+
},
|
|
293
|
+
quantity: result.quantity,
|
|
294
|
+
}); }),
|
|
295
|
+
profile: {
|
|
296
|
+
tag: _this.store.profile.tag,
|
|
297
|
+
placement: _this.store.profile.placement,
|
|
298
|
+
threshold: _this.store.profile.display.threshold,
|
|
299
|
+
templateId: _this.store.profile.display.template.uuid,
|
|
300
|
+
seed: getSeed(),
|
|
301
|
+
},
|
|
302
|
+
},
|
|
303
|
+
});
|
|
304
|
+
_this.eventManager.fire('track.addBundle', { controller: _this, event: e, trackEvent: event });
|
|
305
|
+
return event;
|
|
205
306
|
},
|
|
206
307
|
click: function (e) {
|
|
207
308
|
if (!_this.store.profile.tag)
|
|
@@ -452,11 +553,26 @@ var RecommendationController = /** @class */ (function (_super) {
|
|
|
452
553
|
}); });
|
|
453
554
|
// add 'afterStore' middleware
|
|
454
555
|
_this.eventManager.on('afterStore', function (recommend, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
455
|
-
|
|
456
|
-
|
|
556
|
+
var _this = this;
|
|
557
|
+
var _a, _b;
|
|
558
|
+
return __generator(this, function (_c) {
|
|
559
|
+
switch (_c.label) {
|
|
457
560
|
case 0: return [4 /*yield*/, next()];
|
|
458
561
|
case 1:
|
|
459
|
-
|
|
562
|
+
_c.sent();
|
|
563
|
+
// attach tracking events to cart store
|
|
564
|
+
(_a = this.store.cart) === null || _a === void 0 ? void 0 : _a.on('addItems', function (_a) {
|
|
565
|
+
var items = _a.items;
|
|
566
|
+
items.forEach(function (item) {
|
|
567
|
+
_this.track.product.addedToBundle(item);
|
|
568
|
+
});
|
|
569
|
+
});
|
|
570
|
+
(_b = this.store.cart) === null || _b === void 0 ? void 0 : _b.on('removeItems', function (_a) {
|
|
571
|
+
var items = _a.items;
|
|
572
|
+
items.forEach(function (item) {
|
|
573
|
+
_this.track.product.removedFromBundle(item);
|
|
574
|
+
});
|
|
575
|
+
});
|
|
460
576
|
recommend.controller.store.loading = false;
|
|
461
577
|
return [2 /*return*/];
|
|
462
578
|
}
|
|
@@ -5,7 +5,7 @@ import type { BeaconEvent } from '@searchspring/snap-tracker';
|
|
|
5
5
|
import type { SearchStore } from '@searchspring/snap-store-mobx';
|
|
6
6
|
import type { SearchControllerConfig, ControllerServices, ContextVariables } from '../types';
|
|
7
7
|
import type { SearchRequestModel } from '@searchspring/snapi-types';
|
|
8
|
-
|
|
8
|
+
type SearchTrackMethods = {
|
|
9
9
|
product: {
|
|
10
10
|
click: (e: MouseEvent, result: any) => BeaconEvent | undefined;
|
|
11
11
|
};
|
|
@@ -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,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,EACX,sBAAsB,EAItB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,EAKlB,MAAM,2BAA2B,CAAC;AAmBnC,
|
|
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,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,EACX,sBAAsB,EAItB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,EAKlB,MAAM,2BAA2B,CAAC;AAmBnC,KAAK,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;IAgK3B,KAAK,EAAE,kBAAkB,CA8CvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAiD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAkN9B;CACF;AAED,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"}
|
|
@@ -40,7 +40,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
40
40
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
41
41
|
function step(op) {
|
|
42
42
|
if (f) throw new TypeError("Generator is already executing.");
|
|
43
|
-
while (_) try {
|
|
43
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
44
44
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
45
45
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
46
46
|
switch (op[0]) {
|
|
@@ -101,24 +101,23 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
101
101
|
__extends(SearchController, _super);
|
|
102
102
|
function SearchController(config, _a, context) {
|
|
103
103
|
var client = _a.client, store = _a.store, urlManager = _a.urlManager, eventManager = _a.eventManager, profiler = _a.profiler, logger = _a.logger, tracker = _a.tracker;
|
|
104
|
-
var _this = this;
|
|
105
104
|
var _b, _c, _d, _e, _f;
|
|
106
|
-
_this = _super.call(this, config, { client: client, store: store, urlManager: urlManager, eventManager: eventManager, profiler: profiler, logger: logger, tracker: tracker }, context) || this;
|
|
105
|
+
var _this = _super.call(this, config, { client: client, store: store, urlManager: urlManager, eventManager: eventManager, profiler: profiler, logger: logger, tracker: tracker }, context) || this;
|
|
107
106
|
_this.type = types_1.ControllerTypes.search;
|
|
108
107
|
_this.previousResults = [];
|
|
109
108
|
_this.track = {
|
|
110
109
|
product: {
|
|
111
110
|
click: function (e, result) {
|
|
112
|
-
var _a, _b;
|
|
111
|
+
var _a, _b, _c, _d;
|
|
113
112
|
var target = e.target;
|
|
114
|
-
var resultHref = (_a = result.mappings.core) === null ||
|
|
113
|
+
var resultHref = ((_b = (_a = result.display) === null || _a === void 0 ? void 0 : _a.mappings.core) === null || _b === void 0 ? void 0 : _b.url) || ((_c = result.mappings.core) === null || _c === void 0 ? void 0 : _c.url);
|
|
115
114
|
var elemHref = target === null || target === void 0 ? void 0 : target.getAttribute('href');
|
|
116
115
|
// the href that should be used for restoration - if the elemHref contains the resultHref - use resultHref
|
|
117
116
|
var storedHref = (elemHref === null || elemHref === void 0 ? void 0 : elemHref.indexOf(resultHref)) != -1 ? resultHref : elemHref || resultHref;
|
|
118
117
|
var scrollMap = {};
|
|
119
118
|
// generate the selector using element class and parent classes
|
|
120
119
|
var selector = generateHrefSelector(target, storedHref);
|
|
121
|
-
var domRect = selector ? (
|
|
120
|
+
var domRect = selector ? (_d = document === null || document === void 0 ? void 0 : document.querySelector(selector)) === null || _d === void 0 ? void 0 : _d.getBoundingClientRect() : undefined;
|
|
122
121
|
// store element position data to scrollMap
|
|
123
122
|
if (selector || storedHref || domRect) {
|
|
124
123
|
try {
|
|
@@ -135,7 +134,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
135
134
|
// store position data or empty object
|
|
136
135
|
_this.storage.set('scrollMap', scrollMap);
|
|
137
136
|
// track
|
|
138
|
-
var
|
|
137
|
+
var _e = result.attributes, intellisuggestData = _e.intellisuggestData, intellisuggestSignature = _e.intellisuggestSignature;
|
|
139
138
|
var event = _this.tracker.track.product.click({
|
|
140
139
|
intellisuggestData: intellisuggestData,
|
|
141
140
|
intellisuggestSignature: intellisuggestSignature,
|
|
@@ -212,7 +211,17 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
212
211
|
backfillRequests = Array(params.pagination.page)
|
|
213
212
|
.fill('backfill')
|
|
214
213
|
.map(function (v, i) {
|
|
215
|
-
var
|
|
214
|
+
var _a, _b, _c, _d;
|
|
215
|
+
var backfillParams = (0, deepmerge_1.default)(__assign({}, params), { pagination: { page: i + 1 }, search: { redirectResponse: 'full' } });
|
|
216
|
+
// don't include page parameter if on page 1
|
|
217
|
+
if (i + 1 == 1) {
|
|
218
|
+
(_a = backfillParams === null || backfillParams === void 0 ? void 0 : backfillParams.pagination) === null || _a === void 0 ? true : delete _a.page;
|
|
219
|
+
if ((_c = (_b = _this.config.settings) === null || _b === void 0 ? void 0 : _b.redirects) === null || _c === void 0 ? void 0 : _c.merchandising) {
|
|
220
|
+
// redirect setting
|
|
221
|
+
// DUPLICATED LOGIC can be found in params getter
|
|
222
|
+
(_d = backfillParams === null || backfillParams === void 0 ? void 0 : backfillParams.search) === null || _d === void 0 ? true : delete _d.redirectResponse;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
216
225
|
return _this.client.search(backfillParams);
|
|
217
226
|
});
|
|
218
227
|
return [4 /*yield*/, Promise.all(backfillRequests)];
|
|
@@ -550,6 +559,7 @@ var SearchController = /** @class */ (function (_super) {
|
|
|
550
559
|
var _a, _b, _c, _d;
|
|
551
560
|
var params = (0, deepmerge_1.default)(__assign({}, (0, getParams_1.getSearchParams)(this.urlManager.state)), this.config.globals || {});
|
|
552
561
|
// redirect setting
|
|
562
|
+
// DUPLICATED LOGIC can be found in infinite backfill (change both if updating)
|
|
553
563
|
if (!((_b = (_a = this.config.settings) === null || _a === void 0 ? void 0 : _a.redirects) === null || _b === void 0 ? void 0 : _b.merchandising) || this.store.loaded) {
|
|
554
564
|
params.search = params.search || {};
|
|
555
565
|
params.search.redirectResponse = 'full';
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -7,27 +7,27 @@ import type { Profiler } from '@searchspring/snap-profiler';
|
|
|
7
7
|
import type { UrlManager } from '@searchspring/snap-url-manager';
|
|
8
8
|
import type { Logger } from '@searchspring/snap-logger';
|
|
9
9
|
import type { SearchRequestModel } from '@searchspring/snapi-types';
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export
|
|
10
|
+
export type PluginFunction = (cntrlr: AbstractController, ...args: any) => Promise<void> | void;
|
|
11
|
+
export type PluginGrouping = [func: PluginFunction, ...args: unknown[]];
|
|
12
|
+
export type BeforeSearchObj = {
|
|
13
13
|
controller: AbstractController;
|
|
14
14
|
request: any;
|
|
15
15
|
};
|
|
16
|
-
export
|
|
16
|
+
export type AfterSearchObj = {
|
|
17
17
|
controller: AbstractController;
|
|
18
18
|
response: any;
|
|
19
19
|
request: SearchRequestModel;
|
|
20
20
|
};
|
|
21
|
-
export
|
|
21
|
+
export type AfterStoreObj = {
|
|
22
22
|
controller: AbstractController;
|
|
23
23
|
request: any;
|
|
24
24
|
response: any;
|
|
25
25
|
};
|
|
26
|
-
export
|
|
26
|
+
export type RestorePositionObj = {
|
|
27
27
|
controller: AbstractController;
|
|
28
28
|
element?: ElementPositionObj;
|
|
29
29
|
};
|
|
30
|
-
export
|
|
30
|
+
export type ElementPositionObj = {
|
|
31
31
|
href?: string;
|
|
32
32
|
selector?: string;
|
|
33
33
|
domRect?: DOMRect;
|
|
@@ -38,8 +38,8 @@ export declare enum ControllerTypes {
|
|
|
38
38
|
finder = "finder",
|
|
39
39
|
recommendation = "recommendation"
|
|
40
40
|
}
|
|
41
|
-
export
|
|
42
|
-
export
|
|
41
|
+
export type Controllers = SearchController | AutocompleteController | FinderController | RecommendationController;
|
|
42
|
+
export type ControllerServices = {
|
|
43
43
|
client: Client;
|
|
44
44
|
store: SearchStore | AutocompleteStore | FinderStore | RecommendationStore;
|
|
45
45
|
urlManager: UrlManager;
|
|
@@ -48,14 +48,14 @@ export declare type ControllerServices = {
|
|
|
48
48
|
logger: Logger;
|
|
49
49
|
tracker: Tracker;
|
|
50
50
|
};
|
|
51
|
-
export
|
|
51
|
+
export type Attachments = {
|
|
52
52
|
middleware?: {
|
|
53
53
|
[eventName: string]: Middleware<any> | Middleware<any>[];
|
|
54
54
|
};
|
|
55
55
|
plugins?: PluginGrouping[];
|
|
56
56
|
[any: string]: unknown;
|
|
57
57
|
};
|
|
58
|
-
export
|
|
58
|
+
export type ContextVariables = {
|
|
59
59
|
shopper?: {
|
|
60
60
|
id: string;
|
|
61
61
|
cart?: ProductViewEvent[];
|
|
@@ -63,10 +63,10 @@ export declare type ContextVariables = {
|
|
|
63
63
|
};
|
|
64
64
|
[variable: string]: any;
|
|
65
65
|
};
|
|
66
|
-
export
|
|
67
|
-
export
|
|
68
|
-
export
|
|
69
|
-
export
|
|
70
|
-
export
|
|
71
|
-
export
|
|
66
|
+
export type ControllerConfig = StoreConfig & Attachments;
|
|
67
|
+
export type SearchControllerConfig = ControllerConfig & SearchStoreConfig;
|
|
68
|
+
export type FinderControllerConfig = ControllerConfig & FinderStoreConfig;
|
|
69
|
+
export type AutocompleteControllerConfig = ControllerConfig & AutocompleteStoreConfig;
|
|
70
|
+
export type RecommendationControllerConfig = ControllerConfig & RecommendationStoreConfig;
|
|
71
|
+
export type ControllerConfigs = SearchControllerConfig | AutocompleteControllerConfig | FinderControllerConfig | RecommendationControllerConfig;
|
|
72
72
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/cjs/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AACxI,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAEjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EACX,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/types.js
CHANGED
|
@@ -7,4 +7,4 @@ var ControllerTypes;
|
|
|
7
7
|
ControllerTypes["autocomplete"] = "autocomplete";
|
|
8
8
|
ControllerTypes["finder"] = "finder";
|
|
9
9
|
ControllerTypes["recommendation"] = "recommendation";
|
|
10
|
-
})(ControllerTypes
|
|
10
|
+
})(ControllerTypes || (exports.ControllerTypes = ControllerTypes = {}));
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { DomTargeter } from '@searchspring/snap-toolbox';
|
|
2
2
|
export class AbstractController {
|
|
3
|
+
get initialized() {
|
|
4
|
+
return this._initialized;
|
|
5
|
+
}
|
|
3
6
|
constructor(config, { client, store, urlManager, eventManager, profiler, logger, tracker }, context = {}) {
|
|
4
7
|
this.type = 'abstract';
|
|
5
8
|
this.targeters = {};
|
|
@@ -94,9 +97,6 @@ export class AbstractController {
|
|
|
94
97
|
// set namespaces
|
|
95
98
|
this.profiler.setNamespace(this.config.id);
|
|
96
99
|
}
|
|
97
|
-
get initialized() {
|
|
98
|
-
return this._initialized;
|
|
99
|
-
}
|
|
100
100
|
createTargeter(target, onTarget, document) {
|
|
101
101
|
return this.addTargeter(new DomTargeter([target], onTarget, document));
|
|
102
102
|
}
|
|
@@ -6,7 +6,7 @@ import { AutocompleteStore } from '@searchspring/snap-store-mobx';
|
|
|
6
6
|
import type { AutocompleteControllerConfig, ControllerServices, ContextVariables } from '../types';
|
|
7
7
|
import type { AutocompleteRequestModel } from '@searchspring/snapi-types';
|
|
8
8
|
export declare const INPUT_DELAY = 200;
|
|
9
|
-
|
|
9
|
+
type AutocompleteTrackMethods = {
|
|
10
10
|
product: {
|
|
11
11
|
click: (e: MouseEvent, result: any) => void;
|
|
12
12
|
};
|
|
@@ -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;AA2B/B,
|
|
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;AA2B/B,KAAK,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;IAsE3B,KAAK,EAAE,wBAAwB,CAO7B;IAEF,IAAI,MAAM,IAAI,wBAAwB,CA0CrC;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;;;;uBAqDL,UAAU,KAAG,IAAI;;MAS5B;IAEF,MAAM,IAAI,IAAI;IAgBR,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6E3B,cAAc,QAAa,QAAQ,IAAI,CAAC,CAwBtC;IAEF,MAAM,QAAa,QAAQ,IAAI,CAAC,CAmI9B;CACF"}
|
|
@@ -5,13 +5,16 @@ import { ControllerTypes } from '../types';
|
|
|
5
5
|
import type { RecommendationStore } from '@searchspring/snap-store-mobx';
|
|
6
6
|
import type { RecommendCombinedRequestModel } from '@searchspring/snap-client';
|
|
7
7
|
import type { RecommendationControllerConfig, ControllerServices, ContextVariables } from '../types';
|
|
8
|
-
|
|
8
|
+
type RecommendationTrackMethods = {
|
|
9
9
|
product: {
|
|
10
|
-
click: (e: MouseEvent, result:
|
|
11
|
-
render: (result:
|
|
12
|
-
impression: (result:
|
|
10
|
+
click: (e: MouseEvent, result: Product) => BeaconEvent | undefined;
|
|
11
|
+
render: (result: Product) => BeaconEvent | undefined;
|
|
12
|
+
impression: (result: Product) => BeaconEvent | undefined;
|
|
13
|
+
removedFromBundle: (result: Product) => BeaconEvent | undefined;
|
|
14
|
+
addedToBundle: (result: Product) => BeaconEvent | undefined;
|
|
13
15
|
};
|
|
14
16
|
click: (e: MouseEvent) => BeaconEvent | undefined;
|
|
17
|
+
addBundle: (e: MouseEvent, results: Product[]) => BeaconEvent | undefined;
|
|
15
18
|
impression: () => BeaconEvent | undefined;
|
|
16
19
|
render: (results?: Product[]) => BeaconEvent | undefined;
|
|
17
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,8BAA8B,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,
|
|
1
|
+
{"version":3,"file":"RecommendationController.d.ts","sourceRoot":"","sources":["../../../src/Recommendation/RecommendationController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,8BAA8B,EAAkC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErI,KAAK,0BAA0B,GAAG;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACnE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACrD,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QACzD,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;QAChE,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,SAAS,CAAC;KAC5D,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,WAAW,GAAG,SAAS,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;IAC1E,UAAU,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,WAAW,GAAG,SAAS,CAAC;CACzD,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;IA2C3B,KAAK,EAAE,0BAA0B,CAwS5B;IAEL,IAAI,MAAM,IAAI,6BAA6B,CA2B1C;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAuH9B;CACF"}
|
|
@@ -28,6 +28,9 @@ export class RecommendationController extends AbstractController {
|
|
|
28
28
|
if (this.config.globals.product) {
|
|
29
29
|
skus = [this.config.globals.product];
|
|
30
30
|
}
|
|
31
|
+
else if (this.config.globals.products) {
|
|
32
|
+
skus = this.config.globals.products;
|
|
33
|
+
}
|
|
31
34
|
break;
|
|
32
35
|
case ProfilePlacement.BASKETPAGE:
|
|
33
36
|
skus = this.tracker.cookies.cart.get(); // this is an array
|
|
@@ -62,7 +65,7 @@ export class RecommendationController extends AbstractController {
|
|
|
62
65
|
product: {
|
|
63
66
|
id: result.id,
|
|
64
67
|
mappings: {
|
|
65
|
-
core: result.mappings.core,
|
|
68
|
+
core: result.display.mappings.core,
|
|
66
69
|
},
|
|
67
70
|
seed: getSeed(),
|
|
68
71
|
},
|
|
@@ -89,7 +92,7 @@ export class RecommendationController extends AbstractController {
|
|
|
89
92
|
product: {
|
|
90
93
|
id: result.id,
|
|
91
94
|
mappings: {
|
|
92
|
-
core: result.mappings.core,
|
|
95
|
+
core: result.display.mappings.core,
|
|
93
96
|
},
|
|
94
97
|
seed: getSeed(),
|
|
95
98
|
},
|
|
@@ -117,7 +120,7 @@ export class RecommendationController extends AbstractController {
|
|
|
117
120
|
product: {
|
|
118
121
|
id: result.id,
|
|
119
122
|
mappings: {
|
|
120
|
-
core: result.mappings.core,
|
|
123
|
+
core: result.display.mappings.core,
|
|
121
124
|
},
|
|
122
125
|
seed: getSeed(),
|
|
123
126
|
},
|
|
@@ -129,6 +132,102 @@ export class RecommendationController extends AbstractController {
|
|
|
129
132
|
this.eventManager.fire('track.product.render', { controller: this, result, trackEvent: event });
|
|
130
133
|
return event;
|
|
131
134
|
},
|
|
135
|
+
removedFromBundle: (result) => {
|
|
136
|
+
if (!this.store.profile.tag ||
|
|
137
|
+
!result ||
|
|
138
|
+
!this.events.render ||
|
|
139
|
+
!this.events.product[result.id]?.render ||
|
|
140
|
+
this.store.profile.type != 'bundle')
|
|
141
|
+
return;
|
|
142
|
+
const payload = {
|
|
143
|
+
type: BeaconType.PROFILE_PRODUCT_REMOVEDFROMBUNDLE,
|
|
144
|
+
category: BeaconCategory.RECOMMENDATIONS,
|
|
145
|
+
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } : undefined,
|
|
146
|
+
event: {
|
|
147
|
+
context: {
|
|
148
|
+
placement: this.store.profile.placement,
|
|
149
|
+
tag: this.store.profile.tag,
|
|
150
|
+
type: 'product-recommendation',
|
|
151
|
+
},
|
|
152
|
+
product: {
|
|
153
|
+
id: result.id,
|
|
154
|
+
mappings: {
|
|
155
|
+
core: result.display.mappings.core,
|
|
156
|
+
},
|
|
157
|
+
seed: getSeed(),
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
pid: this.events.click?.id,
|
|
161
|
+
};
|
|
162
|
+
this.events.product[result.id] = this.events.product[result.id] || {};
|
|
163
|
+
const event = (this.events.product[result.id].render = this.tracker.track.event(payload));
|
|
164
|
+
this.eventManager.fire('track.product.removedFromBundle', { controller: this, result, trackEvent: event });
|
|
165
|
+
return event;
|
|
166
|
+
},
|
|
167
|
+
addedToBundle: (result) => {
|
|
168
|
+
if (!this.store.profile.tag ||
|
|
169
|
+
!result ||
|
|
170
|
+
!this.events.render ||
|
|
171
|
+
!this.events.product[result.id]?.render ||
|
|
172
|
+
this.store.profile.type != 'bundle')
|
|
173
|
+
return;
|
|
174
|
+
const payload = {
|
|
175
|
+
type: BeaconType.PROFILE_PRODUCT_ADDEDTOBUNDLE,
|
|
176
|
+
category: BeaconCategory.RECOMMENDATIONS,
|
|
177
|
+
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } : undefined,
|
|
178
|
+
event: {
|
|
179
|
+
context: {
|
|
180
|
+
placement: this.store.profile.placement,
|
|
181
|
+
tag: this.store.profile.tag,
|
|
182
|
+
type: 'product-recommendation',
|
|
183
|
+
},
|
|
184
|
+
product: {
|
|
185
|
+
id: result.id,
|
|
186
|
+
mappings: {
|
|
187
|
+
core: result.display.mappings.core,
|
|
188
|
+
},
|
|
189
|
+
seed: getSeed(),
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
pid: this.events.click?.id,
|
|
193
|
+
};
|
|
194
|
+
this.events.product[result.id] = this.events.product[result.id] || {};
|
|
195
|
+
const event = (this.events.product[result.id].render = this.tracker.track.event(payload));
|
|
196
|
+
this.eventManager.fire('track.product.addedToBundle', { controller: this, result, trackEvent: event });
|
|
197
|
+
return event;
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
addBundle: (e, results) => {
|
|
201
|
+
if (!results.length || !this.store.profile.tag || this.store.profile.type != 'bundle')
|
|
202
|
+
return;
|
|
203
|
+
const event = this.tracker.track.event({
|
|
204
|
+
type: BeaconType.PROFILE_ADDBUNDLE,
|
|
205
|
+
category: BeaconCategory.RECOMMENDATIONS,
|
|
206
|
+
context: this.config.globals.siteId ? { website: { trackingCode: this.config.globals.siteId } } : undefined,
|
|
207
|
+
event: {
|
|
208
|
+
context: {
|
|
209
|
+
placement: this.store.profile.placement,
|
|
210
|
+
tag: this.store.profile.tag,
|
|
211
|
+
type: 'product-recommendation',
|
|
212
|
+
},
|
|
213
|
+
products: results.map((result) => ({
|
|
214
|
+
id: result.id,
|
|
215
|
+
mappings: {
|
|
216
|
+
core: result.display.mappings.core,
|
|
217
|
+
},
|
|
218
|
+
quantity: result.quantity,
|
|
219
|
+
})),
|
|
220
|
+
profile: {
|
|
221
|
+
tag: this.store.profile.tag,
|
|
222
|
+
placement: this.store.profile.placement,
|
|
223
|
+
threshold: this.store.profile.display.threshold,
|
|
224
|
+
templateId: this.store.profile.display.template.uuid,
|
|
225
|
+
seed: getSeed(),
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
this.eventManager.fire('track.addBundle', { controller: this, event: e, trackEvent: event });
|
|
230
|
+
return event;
|
|
132
231
|
},
|
|
133
232
|
click: (e) => {
|
|
134
233
|
if (!this.store.profile.tag)
|
|
@@ -339,6 +438,17 @@ export class RecommendationController extends AbstractController {
|
|
|
339
438
|
// add 'afterStore' middleware
|
|
340
439
|
this.eventManager.on('afterStore', async (recommend, next) => {
|
|
341
440
|
await next();
|
|
441
|
+
// attach tracking events to cart store
|
|
442
|
+
this.store.cart?.on('addItems', ({ items }) => {
|
|
443
|
+
items.forEach((item) => {
|
|
444
|
+
this.track.product.addedToBundle(item);
|
|
445
|
+
});
|
|
446
|
+
});
|
|
447
|
+
this.store.cart?.on('removeItems', ({ items }) => {
|
|
448
|
+
items.forEach((item) => {
|
|
449
|
+
this.track.product.removedFromBundle(item);
|
|
450
|
+
});
|
|
451
|
+
});
|
|
342
452
|
recommend.controller.store.loading = false;
|
|
343
453
|
});
|
|
344
454
|
// attach config plugins and event middleware
|
|
@@ -5,7 +5,7 @@ import type { BeaconEvent } from '@searchspring/snap-tracker';
|
|
|
5
5
|
import type { SearchStore } from '@searchspring/snap-store-mobx';
|
|
6
6
|
import type { SearchControllerConfig, ControllerServices, ContextVariables } from '../types';
|
|
7
7
|
import type { SearchRequestModel } from '@searchspring/snapi-types';
|
|
8
|
-
|
|
8
|
+
type SearchTrackMethods = {
|
|
9
9
|
product: {
|
|
10
10
|
click: (e: MouseEvent, result: any) => BeaconEvent | undefined;
|
|
11
11
|
};
|
|
@@ -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,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,EACX,sBAAsB,EAItB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,EAKlB,MAAM,2BAA2B,CAAC;AAmBnC,
|
|
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,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,EACX,sBAAsB,EAItB,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACX,kBAAkB,EAKlB,MAAM,2BAA2B,CAAC;AAmBnC,KAAK,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;IAgK3B,KAAK,EAAE,kBAAkB,CA8CvB;IAEF,IAAI,MAAM,IAAI,kBAAkB,CAiD/B;IAED,MAAM,QAAa,QAAQ,IAAI,CAAC,CAkN9B;CACF;AAED,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"}
|
|
@@ -29,7 +29,7 @@ export class SearchController extends AbstractController {
|
|
|
29
29
|
product: {
|
|
30
30
|
click: (e, result) => {
|
|
31
31
|
const target = e.target;
|
|
32
|
-
const resultHref = result.mappings.core?.url;
|
|
32
|
+
const resultHref = result.display?.mappings.core?.url || result.mappings.core?.url;
|
|
33
33
|
const elemHref = target?.getAttribute('href');
|
|
34
34
|
// the href that should be used for restoration - if the elemHref contains the resultHref - use resultHref
|
|
35
35
|
const storedHref = elemHref?.indexOf(resultHref) != -1 ? resultHref : elemHref || resultHref;
|
|
@@ -115,7 +115,16 @@ export class SearchController extends AbstractController {
|
|
|
115
115
|
const backfillRequests = Array(params.pagination.page)
|
|
116
116
|
.fill('backfill')
|
|
117
117
|
.map((v, i) => {
|
|
118
|
-
const backfillParams = deepmerge({ ...params }, { pagination: { page: i + 1 } });
|
|
118
|
+
const backfillParams = deepmerge({ ...params }, { pagination: { page: i + 1 }, search: { redirectResponse: 'full' } });
|
|
119
|
+
// don't include page parameter if on page 1
|
|
120
|
+
if (i + 1 == 1) {
|
|
121
|
+
delete backfillParams?.pagination?.page;
|
|
122
|
+
if (this.config.settings?.redirects?.merchandising) {
|
|
123
|
+
// redirect setting
|
|
124
|
+
// DUPLICATED LOGIC can be found in params getter
|
|
125
|
+
delete backfillParams?.search?.redirectResponse;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
119
128
|
return this.client.search(backfillParams);
|
|
120
129
|
});
|
|
121
130
|
const backfillResponses = await Promise.all(backfillRequests);
|
|
@@ -374,6 +383,7 @@ export class SearchController extends AbstractController {
|
|
|
374
383
|
get params() {
|
|
375
384
|
const params = deepmerge({ ...getSearchParams(this.urlManager.state) }, this.config.globals || {});
|
|
376
385
|
// redirect setting
|
|
386
|
+
// DUPLICATED LOGIC can be found in infinite backfill (change both if updating)
|
|
377
387
|
if (!this.config.settings?.redirects?.merchandising || this.store.loaded) {
|
|
378
388
|
params.search = params.search || {};
|
|
379
389
|
params.search.redirectResponse = 'full';
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -7,27 +7,27 @@ import type { Profiler } from '@searchspring/snap-profiler';
|
|
|
7
7
|
import type { UrlManager } from '@searchspring/snap-url-manager';
|
|
8
8
|
import type { Logger } from '@searchspring/snap-logger';
|
|
9
9
|
import type { SearchRequestModel } from '@searchspring/snapi-types';
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export
|
|
10
|
+
export type PluginFunction = (cntrlr: AbstractController, ...args: any) => Promise<void> | void;
|
|
11
|
+
export type PluginGrouping = [func: PluginFunction, ...args: unknown[]];
|
|
12
|
+
export type BeforeSearchObj = {
|
|
13
13
|
controller: AbstractController;
|
|
14
14
|
request: any;
|
|
15
15
|
};
|
|
16
|
-
export
|
|
16
|
+
export type AfterSearchObj = {
|
|
17
17
|
controller: AbstractController;
|
|
18
18
|
response: any;
|
|
19
19
|
request: SearchRequestModel;
|
|
20
20
|
};
|
|
21
|
-
export
|
|
21
|
+
export type AfterStoreObj = {
|
|
22
22
|
controller: AbstractController;
|
|
23
23
|
request: any;
|
|
24
24
|
response: any;
|
|
25
25
|
};
|
|
26
|
-
export
|
|
26
|
+
export type RestorePositionObj = {
|
|
27
27
|
controller: AbstractController;
|
|
28
28
|
element?: ElementPositionObj;
|
|
29
29
|
};
|
|
30
|
-
export
|
|
30
|
+
export type ElementPositionObj = {
|
|
31
31
|
href?: string;
|
|
32
32
|
selector?: string;
|
|
33
33
|
domRect?: DOMRect;
|
|
@@ -38,8 +38,8 @@ export declare enum ControllerTypes {
|
|
|
38
38
|
finder = "finder",
|
|
39
39
|
recommendation = "recommendation"
|
|
40
40
|
}
|
|
41
|
-
export
|
|
42
|
-
export
|
|
41
|
+
export type Controllers = SearchController | AutocompleteController | FinderController | RecommendationController;
|
|
42
|
+
export type ControllerServices = {
|
|
43
43
|
client: Client;
|
|
44
44
|
store: SearchStore | AutocompleteStore | FinderStore | RecommendationStore;
|
|
45
45
|
urlManager: UrlManager;
|
|
@@ -48,14 +48,14 @@ export declare type ControllerServices = {
|
|
|
48
48
|
logger: Logger;
|
|
49
49
|
tracker: Tracker;
|
|
50
50
|
};
|
|
51
|
-
export
|
|
51
|
+
export type Attachments = {
|
|
52
52
|
middleware?: {
|
|
53
53
|
[eventName: string]: Middleware<any> | Middleware<any>[];
|
|
54
54
|
};
|
|
55
55
|
plugins?: PluginGrouping[];
|
|
56
56
|
[any: string]: unknown;
|
|
57
57
|
};
|
|
58
|
-
export
|
|
58
|
+
export type ContextVariables = {
|
|
59
59
|
shopper?: {
|
|
60
60
|
id: string;
|
|
61
61
|
cart?: ProductViewEvent[];
|
|
@@ -63,10 +63,10 @@ export declare type ContextVariables = {
|
|
|
63
63
|
};
|
|
64
64
|
[variable: string]: any;
|
|
65
65
|
};
|
|
66
|
-
export
|
|
67
|
-
export
|
|
68
|
-
export
|
|
69
|
-
export
|
|
70
|
-
export
|
|
71
|
-
export
|
|
66
|
+
export type ControllerConfig = StoreConfig & Attachments;
|
|
67
|
+
export type SearchControllerConfig = ControllerConfig & SearchStoreConfig;
|
|
68
|
+
export type FinderControllerConfig = ControllerConfig & FinderStoreConfig;
|
|
69
|
+
export type AutocompleteControllerConfig = ControllerConfig & AutocompleteStoreConfig;
|
|
70
|
+
export type RecommendationControllerConfig = ControllerConfig & RecommendationStoreConfig;
|
|
71
|
+
export type ControllerConfigs = SearchControllerConfig | AutocompleteControllerConfig | FinderControllerConfig | RecommendationControllerConfig;
|
|
72
72
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/esm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AACxI,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAEjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EACX,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@searchspring/snap-controller",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.52.0",
|
|
4
4
|
"description": "Snap Controllers",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -20,22 +20,22 @@
|
|
|
20
20
|
"test:watch": "jest --watch"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@searchspring/snap-toolbox": "^0.
|
|
23
|
+
"@searchspring/snap-toolbox": "^0.52.0",
|
|
24
24
|
"css.escape": "1.5.1",
|
|
25
25
|
"deepmerge": "4.3.1"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@searchspring/snap-client": "^0.
|
|
29
|
-
"@searchspring/snap-event-manager": "^0.
|
|
30
|
-
"@searchspring/snap-logger": "^0.
|
|
31
|
-
"@searchspring/snap-profiler": "^0.
|
|
32
|
-
"@searchspring/snap-store-mobx": "^0.
|
|
33
|
-
"@searchspring/snap-tracker": "^0.
|
|
34
|
-
"@searchspring/snap-url-manager": "^0.
|
|
28
|
+
"@searchspring/snap-client": "^0.52.0",
|
|
29
|
+
"@searchspring/snap-event-manager": "^0.52.0",
|
|
30
|
+
"@searchspring/snap-logger": "^0.52.0",
|
|
31
|
+
"@searchspring/snap-profiler": "^0.52.0",
|
|
32
|
+
"@searchspring/snap-store-mobx": "^0.52.0",
|
|
33
|
+
"@searchspring/snap-tracker": "^0.52.0",
|
|
34
|
+
"@searchspring/snap-url-manager": "^0.52.0"
|
|
35
35
|
},
|
|
36
36
|
"sideEffects": false,
|
|
37
37
|
"files": [
|
|
38
38
|
"dist/**/*"
|
|
39
39
|
],
|
|
40
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "d2428041a3abcf856d29bc2210fea32684f23f79"
|
|
41
41
|
}
|