@searchspring/snap-preact 0.26.1 → 0.27.2

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.
Files changed (35) hide show
  1. package/dist/cjs/Instantiators/RecommendationInstantiator.d.ts +20 -21
  2. package/dist/cjs/Instantiators/RecommendationInstantiator.d.ts.map +1 -1
  3. package/dist/cjs/Instantiators/RecommendationInstantiator.js +47 -41
  4. package/dist/cjs/Snap.d.ts +17 -15
  5. package/dist/cjs/Snap.d.ts.map +1 -1
  6. package/dist/cjs/Snap.js +301 -232
  7. package/dist/cjs/components/BranchOverride.d.ts +1 -6
  8. package/dist/cjs/components/BranchOverride.d.ts.map +1 -1
  9. package/dist/cjs/components/BranchOverride.js +2 -234
  10. package/dist/cjs/create/index.d.ts +1 -1
  11. package/dist/cjs/create/index.d.ts.map +1 -1
  12. package/dist/cjs/create/index.js +2 -2
  13. package/dist/cjs/getBundleDetails/getBundleDetails.d.ts +7 -0
  14. package/dist/cjs/getBundleDetails/getBundleDetails.d.ts.map +1 -0
  15. package/dist/cjs/getBundleDetails/getBundleDetails.js +64 -0
  16. package/dist/cjs/types.d.ts +1 -0
  17. package/dist/cjs/types.d.ts.map +1 -1
  18. package/dist/esm/Instantiators/RecommendationInstantiator.d.ts +20 -21
  19. package/dist/esm/Instantiators/RecommendationInstantiator.d.ts.map +1 -1
  20. package/dist/esm/Instantiators/RecommendationInstantiator.js +41 -38
  21. package/dist/esm/Snap.d.ts +17 -15
  22. package/dist/esm/Snap.d.ts.map +1 -1
  23. package/dist/esm/Snap.js +144 -107
  24. package/dist/esm/components/BranchOverride.d.ts +1 -6
  25. package/dist/esm/components/BranchOverride.d.ts.map +1 -1
  26. package/dist/esm/components/BranchOverride.js +1 -172
  27. package/dist/esm/create/index.d.ts +1 -1
  28. package/dist/esm/create/index.d.ts.map +1 -1
  29. package/dist/esm/create/index.js +1 -1
  30. package/dist/esm/getBundleDetails/getBundleDetails.d.ts +7 -0
  31. package/dist/esm/getBundleDetails/getBundleDetails.d.ts.map +1 -0
  32. package/dist/esm/getBundleDetails/getBundleDetails.js +22 -0
  33. package/dist/esm/types.d.ts +1 -0
  34. package/dist/esm/types.d.ts.map +1 -1
  35. package/package.json +13 -12
@@ -1,7 +1,2 @@
1
- /// <reference types="react" />
2
- export declare const BranchOverride: (props: {
3
- branch: string;
4
- cookieName: string;
5
- bundleUrl: string;
6
- }) => JSX.Element;
1
+ export { BranchOverride } from '@searchspring/snap-preact-components';
7
2
  //# sourceMappingURL=BranchOverride.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BranchOverride.d.ts","sourceRoot":"","sources":["../../../src/components/BranchOverride.tsx"],"names":[],"mappings":";AA8IA,eAAO,MAAM,cAAc,UAAW;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,KAAG,WA+FjG,CAAC"}
1
+ {"version":3,"file":"BranchOverride.d.ts","sourceRoot":"","sources":["../../../src/components/BranchOverride.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC"}
@@ -1,237 +1,5 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
- return new (P || (P = Promise))(function (resolve, reject) {
16
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
- step((generator = generator.apply(thisArg, _arguments || [])).next());
20
- });
21
- };
22
- var __generator = (this && this.__generator) || function (thisArg, body) {
23
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
- function verb(n) { return function (v) { return step([n, v]); }; }
26
- function step(op) {
27
- if (f) throw new TypeError("Generator is already executing.");
28
- while (_) try {
29
- 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;
30
- if (y = 0, t) op = [op[0] & 2, t.value];
31
- switch (op[0]) {
32
- case 0: case 1: t = op; break;
33
- case 4: _.label++; return { value: op[1], done: false };
34
- case 5: _.label++; y = op[1]; op = [0]; continue;
35
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
- default:
37
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
- if (t[2]) _.ops.pop();
42
- _.trys.pop(); continue;
43
- }
44
- op = body.call(thisArg, _);
45
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
- }
48
- };
49
2
  Object.defineProperty(exports, "__esModule", { value: true });
50
3
  exports.BranchOverride = void 0;
51
- var jsx_runtime_1 = require("preact/jsx-runtime");
52
- var hooks_1 = require("preact/hooks");
53
- var snap_toolbox_1 = require("@searchspring/snap-toolbox");
54
- var icons = {
55
- 'close-thin': 'M56 5.638l-22.362 22.362 22.362 22.362-5.638 5.638-22.362-22.362-22.362 22.362-5.638-5.638 22.362-22.362-22.362-22.362 5.638-5.638 22.362 22.362 22.362-22.362z',
56
- warn: 'M31.2981 5.28228C29.8323 2.74341 26.1677 2.74341 24.7019 5.28228L0.515899 47.1737C-0.94992 49.7126 0.88235 52.8861 3.81399 52.8861H52.186C55.1176 52.8861 56.9499 49.7126 55.4841 47.1737L31.2981 5.28228ZM25.2229 35.0037L24.8264 18.837C24.8264 18.655 24.8923 18.4729 25.047 18.3686C25.1794 18.2387 25.3776 18.1601 25.5759 18.1601H30.4241C30.6223 18.1601 30.8206 18.238 30.953 18.3686C31.1071 18.4729 31.1736 18.655 31.1736 18.837L30.7988 35.0037C30.7988 35.3679 30.4682 35.6542 30.0493 35.6542H25.9724C25.5759 35.6542 25.2453 35.3679 25.2229 35.0037ZM25.1788 43.9593V39.0131C25.1788 38.5447 25.487 38.1541 25.8618 38.1541H30.0929C30.4894 38.1541 30.82 38.5447 30.82 39.0131V43.9593C30.82 44.4277 30.4894 44.8183 30.0929 44.8183H25.8618C25.487 44.8183 25.1788 44.4277 25.1788 43.9593Z',
57
- };
58
- var fetchBundleDetails = function (url) { return __awaiter(void 0, void 0, void 0, function () {
59
- return __generator(this, function (_a) {
60
- return [2 /*return*/, new Promise(function (resolve, reject) {
61
- var request = new XMLHttpRequest();
62
- request.open('HEAD', url, true);
63
- request.onreadystatechange = function () {
64
- if (request.readyState === XMLHttpRequest.DONE) {
65
- var status_1 = request.status;
66
- if (status_1 === 0 || (status_1 >= 200 && status_1 < 400)) {
67
- resolve({
68
- lastModified: request.getResponseHeader('Last-Modified').split(',')[1],
69
- });
70
- }
71
- else {
72
- reject();
73
- }
74
- }
75
- };
76
- request.onerror = function () { return reject(); };
77
- request.send();
78
- })];
79
- });
80
- }); };
81
- var darkTheme = {
82
- main: {
83
- border: '0',
84
- background: 'rgba(59, 35, 173, 0.9)',
85
- color: '#fff',
86
- boxShadow: '#4c3ce2 1px 1px 3px 0px',
87
- },
88
- top: {
89
- background: 'rgba(59, 35, 173, 0.3)',
90
- border: '1px solid #4c3de1',
91
- logo: {
92
- src: 'https://snapui.searchspring.io/searchspring_light.svg',
93
- },
94
- button: {
95
- border: '1px solid #fff',
96
- content: 'STOP PREVIEW',
97
- },
98
- close: {
99
- fill: '#fff',
100
- },
101
- },
102
- details: {
103
- content: 'Preview functionality may differ from production.',
104
- branch: {
105
- color: '#03cee1',
106
- style: 'italic',
107
- },
108
- additional: {
109
- color: '#03cee1',
110
- },
111
- },
112
- };
113
- var lightTheme = {
114
- main: {
115
- border: '1px solid #ccc',
116
- background: 'rgba(255, 255, 255, 0.9)',
117
- color: '#515151',
118
- boxShadow: 'rgba(81, 81, 81, 0.5) 1px 1px 3px 0px',
119
- },
120
- top: {
121
- background: 'rgba(255, 255, 255, 0.3)',
122
- border: '1px solid #ccc',
123
- logo: {
124
- src: 'https://snapui.searchspring.io/searchspring.svg',
125
- },
126
- button: {
127
- border: '1px solid #515151',
128
- content: 'STOP PREVIEW',
129
- },
130
- close: {
131
- fill: '#515151',
132
- },
133
- },
134
- details: {
135
- content: 'Preview functionality may differ from production.',
136
- branch: {
137
- color: '#3a23ad',
138
- style: 'italic',
139
- },
140
- additional: {
141
- color: '#3a23ad',
142
- },
143
- },
144
- };
145
- var failureTheme = {
146
- main: {
147
- border: '0',
148
- background: 'rgba(130, 6, 6, 0.9)',
149
- color: '#fff',
150
- boxShadow: 'rgba(130, 6, 6, 0.4) 1px 1px 3px 0px',
151
- },
152
- top: {
153
- background: 'rgba(130, 6, 6, 0.3)',
154
- border: '1px solid #760000',
155
- logo: {
156
- src: 'https://snapui.searchspring.io/searchspring_light.svg',
157
- },
158
- button: {
159
- border: '1px solid #fff',
160
- content: 'REMOVE',
161
- },
162
- close: {
163
- fill: '#fff',
164
- },
165
- },
166
- details: {
167
- content: 'Incorrect branch name or branch no longer exists.',
168
- branch: {
169
- color: '#be9628',
170
- style: 'none',
171
- },
172
- additional: {
173
- color: '#be9628',
174
- },
175
- },
176
- };
177
- var themes = {
178
- darkTheme: darkTheme,
179
- lightTheme: lightTheme,
180
- failureTheme: failureTheme,
181
- };
182
- var BranchOverride = function (props) {
183
- var prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
184
- var _a = (0, hooks_1.useState)(prefersDark ? 'darkTheme' : 'lightTheme'), themeName = _a[0], setThemeName = _a[1];
185
- var _b = (0, hooks_1.useState)(null), details = _b[0], setDetails = _b[1];
186
- (0, hooks_1.useEffect)(function () {
187
- function getDetails() {
188
- return __awaiter(this, void 0, void 0, function () {
189
- var details_1, err_1;
190
- return __generator(this, function (_a) {
191
- switch (_a.label) {
192
- case 0:
193
- _a.trys.push([0, 2, , 3]);
194
- return [4 /*yield*/, fetchBundleDetails(props.bundleUrl)];
195
- case 1:
196
- details_1 = _a.sent();
197
- setDetails(details_1);
198
- return [3 /*break*/, 3];
199
- case 2:
200
- err_1 = _a.sent();
201
- setThemeName('failureTheme');
202
- setDetails('failure');
203
- return [3 /*break*/, 3];
204
- case 3: return [2 /*return*/];
205
- }
206
- });
207
- });
208
- }
209
- getDetails();
210
- }, []);
211
- return (props.branch &&
212
- details && ((0, jsx_runtime_1.jsxs)("div", __assign({ class: "ss__branch-override", style: "width: 360px; height: 120px; overflow: hidden; transition: height ease 0.5s 0.5s, right ease 0.5s; font-size: 14px; position: fixed; z-index: 9999; bottom: 50px; right: 0; background: ".concat(themes[themeName].main.background, "; color: ").concat(themes[themeName].main.color, "; border: ").concat(themes[themeName].main.border, "; border-right: 0; border-top-left-radius: 5px; border-bottom-left-radius: 5px; box-shadow: ").concat(themes[themeName].main.boxShadow, ";"), onClick: function (e) {
213
- e.preventDefault();
214
- e.stopPropagation();
215
- var popup = document.querySelector('.ss__branch-override');
216
- popup.style.transition = 'height ease 0.2s, right ease 0.5s 0.2s';
217
- popup.style.right = '-1px';
218
- popup.style.height = '120px';
219
- popup.style.cursor = 'auto';
220
- } }, { children: [(0, jsx_runtime_1.jsxs)("div", __assign({ style: "padding: 10px; position: relative; background: ".concat(themes[themeName].top.background, "; border-bottom: ").concat(themes[themeName].top.border, "; margin-bottom: 10px;") }, { children: [(0, jsx_runtime_1.jsx)("img", { src: themes[themeName].top.logo.src, style: "display: inline-block; height: 30px; vertical-align: middle;" }), (0, jsx_runtime_1.jsx)("div", __assign({ style: "display: inline-block; float: right; padding: 5px; cursor: pointer;", onClick: function (e) {
221
- e.preventDefault();
222
- e.stopPropagation();
223
- var popup = document.querySelector('.ss__branch-override');
224
- popup.style.transition = 'height ease 0.5s 0.5s, right ease 0.5s';
225
- popup.style.right = '-316px';
226
- popup.style.height = '50px';
227
- popup.style.cursor = 'pointer';
228
- } }, { children: (0, jsx_runtime_1.jsx)("svg", __assign({ viewBox: "0 0 56 56", xmlns: "http://www.w3.org/2000/svg", width: "18px", height: "18px" }, { children: (0, jsx_runtime_1.jsx)("path", { fill: themes[themeName].top.close.fill, d: icons['close-thin'] }) })) })), (0, jsx_runtime_1.jsx)("div", __assign({ style: "border-radius: 5px; padding: 6px; height: 100%; line-height: 14px; text-align: center; cursor: pointer; font-size: 10px; border: ".concat(themes[themeName].top.button.border, "; float: right; margin-right: 14px;"), onClick: function (e) {
229
- e.preventDefault();
230
- e.stopPropagation();
231
- snap_toolbox_1.cookies.unset(props.cookieName);
232
- var urlState = (0, snap_toolbox_1.url)(window.location.href);
233
- delete urlState.params.query['branch'];
234
- window.location.href = urlState.url();
235
- } }, { children: themes[themeName].top.button.content }))] })), (0, jsx_runtime_1.jsxs)("div", __assign({ style: "padding: 0px 15px; font-size: 12px;" }, { children: [(0, jsx_runtime_1.jsx)("span", __assign({ style: "font-weight: bold; font-style: ".concat(themes[themeName].details.branch.style, "; color: ").concat(themes[themeName].details.branch.color, "; font-size: 14px; line-height: 20px; display: inline-block; max-width: 180px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;") }, { children: details == 'failure' ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("svg", __assign({ style: "margin-right: 10px;", viewBox: "0 0 56 56", xmlns: "http://www.w3.org/2000/svg", width: "18px", height: "18px" }, { children: (0, jsx_runtime_1.jsx)("path", { fill: themes[themeName].details.branch.color, d: icons['warn'] }) })), "Branch not found!"] })) : (props.branch) })), (0, jsx_runtime_1.jsx)("span", __assign({ style: "float: right; font-style: italic; color: ".concat(themes[themeName].details.additional.color, "; font-size: 12px; line-height: 20px;") }, { children: (details === null || details === void 0 ? void 0 : details.lastModified) || props.branch })), (0, jsx_runtime_1.jsx)("br", {}), themes[themeName].details.content] }))] }))));
236
- };
237
- exports.BranchOverride = BranchOverride;
4
+ var snap_preact_components_1 = require("@searchspring/snap-preact-components");
5
+ Object.defineProperty(exports, "BranchOverride", { enumerable: true, get: function () { return snap_preact_components_1.BranchOverride; } });
@@ -1,5 +1,5 @@
1
1
  export { default as createAutocompleteController } from './createAutocompleteController';
2
2
  export { default as createFinderController } from './createFinderController';
3
- export { default as createRecommendationsController } from './createRecommendationController';
3
+ export { default as createRecommendationController } from './createRecommendationController';
4
4
  export { default as createSearchController } from './createSearchController';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/create/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/create/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -3,12 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createSearchController = exports.createRecommendationsController = exports.createFinderController = exports.createAutocompleteController = void 0;
6
+ exports.createSearchController = exports.createRecommendationController = exports.createFinderController = exports.createAutocompleteController = void 0;
7
7
  var createAutocompleteController_1 = require("./createAutocompleteController");
8
8
  Object.defineProperty(exports, "createAutocompleteController", { enumerable: true, get: function () { return __importDefault(createAutocompleteController_1).default; } });
9
9
  var createFinderController_1 = require("./createFinderController");
10
10
  Object.defineProperty(exports, "createFinderController", { enumerable: true, get: function () { return __importDefault(createFinderController_1).default; } });
11
11
  var createRecommendationController_1 = require("./createRecommendationController");
12
- Object.defineProperty(exports, "createRecommendationsController", { enumerable: true, get: function () { return __importDefault(createRecommendationController_1).default; } });
12
+ Object.defineProperty(exports, "createRecommendationController", { enumerable: true, get: function () { return __importDefault(createRecommendationController_1).default; } });
13
13
  var createSearchController_1 = require("./createSearchController");
14
14
  Object.defineProperty(exports, "createSearchController", { enumerable: true, get: function () { return __importDefault(createSearchController_1).default; } });
@@ -0,0 +1,7 @@
1
+ declare type BundleDetails = {
2
+ url: string;
3
+ lastModified: string;
4
+ };
5
+ export declare const getBundleDetails: (url: string) => Promise<BundleDetails>;
6
+ export {};
7
+ //# sourceMappingURL=getBundleDetails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBundleDetails.d.ts","sourceRoot":"","sources":["../../../src/getBundleDetails/getBundleDetails.ts"],"names":[],"mappings":"AAAA,aAAK,aAAa,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAe,MAAM,KAAG,QAAQ,aAAa,CAuBzE,CAAC"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
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
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getBundleDetails = void 0;
40
+ var getBundleDetails = function (url) { return __awaiter(void 0, void 0, void 0, function () {
41
+ return __generator(this, function (_a) {
42
+ return [2 /*return*/, new Promise(function (resolve, reject) {
43
+ var request = new XMLHttpRequest();
44
+ request.open('HEAD', url, true);
45
+ request.onreadystatechange = function () {
46
+ if (request.readyState === request.DONE) {
47
+ var status_1 = request.status;
48
+ if (status_1 === 0 || (status_1 >= 200 && status_1 < 400)) {
49
+ resolve({
50
+ url: url,
51
+ lastModified: request.getResponseHeader('Last-Modified').split(',')[1].trim(),
52
+ });
53
+ }
54
+ else {
55
+ reject({ message: 'Branch not found!', description: 'Incorrect branch name or branch no longer exists.' });
56
+ }
57
+ }
58
+ };
59
+ request.onerror = function () { return reject({ message: 'Branch load fail!', description: 'There was an error with the request.' }); };
60
+ request.send();
61
+ })];
62
+ });
63
+ }); };
64
+ exports.getBundleDetails = getBundleDetails;
@@ -16,6 +16,7 @@ export declare type SnapControllerServices = {
16
16
  logger?: Logger;
17
17
  tracker?: Tracker;
18
18
  };
19
+ export declare type SnapControllerConfigs = SnapSearchControllerConfig | SnapAutocompleteControllerConfig | SnapFinderControllerConfig | SnapRecommendationControllerConfig;
19
20
  export declare type RootComponent = React.ElementType<{
20
21
  controller: AbstractController;
21
22
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,KAAK,EACX,kBAAkB,EAClB,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,8BAA8B,EAC9B,gBAAgB,EAChB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAE1D,oBAAY,sBAAsB,GAAG;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,oBAAY,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC;IAAE,UAAU,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAAC;AAElF,oBAAY,0BAA0B,GAAG;IACxC,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,MAAM,CAAC,EAAE;QACR,OAAO,EAAE,aAAa,CAAC;QACvB,MAAM,CAAC,EAAE,YAAY,CAAC;KACtB,CAAC;IACF,UAAU,EAAE,sBAAsB,CAAC;IACnC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,oBAAY,gCAAgC,GAAG;IAC9C,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,MAAM,CAAC,EAAE;QACR,OAAO,EAAE,aAAa,CAAC;QACvB,MAAM,CAAC,EAAE,YAAY,CAAC;KACtB,CAAC;IACF,UAAU,EAAE,4BAA4B,CAAC;IACzC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,oBAAY,0BAA0B,GAAG;IACxC,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,MAAM,CAAC,EAAE;QACR,OAAO,EAAE,aAAa,CAAC;QACvB,MAAM,CAAC,EAAE,YAAY,CAAC;KACtB,CAAC;IACF,UAAU,EAAE,sBAAsB,CAAC;IACnC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,oBAAY,kCAAkC,GAAG;IAChD,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,MAAM,CAAC,EAAE;QACR,OAAO,EAAE,aAAa,CAAC;QACvB,MAAM,CAAC,EAAE,YAAY,CAAC;KACtB,CAAC;IACF,UAAU,EAAE,8BAA8B,CAAC;IAC3C,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,KAAK,EACX,kBAAkB,EAClB,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,8BAA8B,EAC9B,gBAAgB,EAChB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAE1D,oBAAY,sBAAsB,GAAG;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,oBAAY,qBAAqB,GAC9B,0BAA0B,GAC1B,gCAAgC,GAChC,0BAA0B,GAC1B,kCAAkC,CAAC;AAEtC,oBAAY,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC;IAAE,UAAU,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAAC;AAElF,oBAAY,0BAA0B,GAAG;IACxC,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,MAAM,CAAC,EAAE;QACR,OAAO,EAAE,aAAa,CAAC;QACvB,MAAM,CAAC,EAAE,YAAY,CAAC;KACtB,CAAC;IACF,UAAU,EAAE,sBAAsB,CAAC;IACnC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,oBAAY,gCAAgC,GAAG;IAC9C,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,MAAM,CAAC,EAAE;QACR,OAAO,EAAE,aAAa,CAAC;QACvB,MAAM,CAAC,EAAE,YAAY,CAAC;KACtB,CAAC;IACF,UAAU,EAAE,4BAA4B,CAAC;IACzC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,oBAAY,0BAA0B,GAAG;IACxC,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,MAAM,CAAC,EAAE;QACR,OAAO,EAAE,aAAa,CAAC;QACvB,MAAM,CAAC,EAAE,YAAY,CAAC;KACtB,CAAC;IACF,UAAU,EAAE,sBAAsB,CAAC;IACnC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,oBAAY,kCAAkC,GAAG;IAChD,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,MAAM,CAAC,EAAE;QACR,OAAO,EAAE,aAAa,CAAC;QACvB,MAAM,CAAC,EAAE,YAAY,CAAC;KACtB,CAAC;IACF,UAAU,EAAE,8BAA8B,CAAC;IAC3C,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC"}
@@ -1,12 +1,17 @@
1
1
  import { DomTargeter } from '@searchspring/snap-toolbox';
2
- import type { Logger } from '@searchspring/snap-logger';
2
+ import { Client } from '@searchspring/snap-client';
3
+ import { Logger } from '@searchspring/snap-logger';
4
+ import { Tracker } from '@searchspring/snap-tracker';
5
+ import type { ClientConfig, ClientGlobals } from '@searchspring/snap-client';
3
6
  import type { UrlTranslatorConfig } from '@searchspring/snap-url-manager';
4
- import type { Client } from '@searchspring/snap-client';
5
- import type { Tracker } from '@searchspring/snap-tracker';
6
7
  import type { AbstractController, RecommendationController, Attachments, ContextVariables } from '@searchspring/snap-controller';
7
8
  import type { Middleware } from '@searchspring/snap-event-manager';
8
- import type { SnapControllerServices, RootComponent } from '../types';
9
+ import type { RootComponent } from '../types';
9
10
  export declare type RecommendationInstantiatorConfig = {
11
+ client?: {
12
+ globals: ClientGlobals;
13
+ config?: ClientConfig;
14
+ };
10
15
  components: {
11
16
  [name: string]: () => Promise<RootComponent> | RootComponent;
12
17
  };
@@ -17,35 +22,29 @@ export declare type RecommendationInstantiatorConfig = {
17
22
  limit?: number;
18
23
  } & Attachments;
19
24
  selector?: string;
20
- services?: SnapControllerServices;
21
25
  url?: UrlTranslatorConfig;
22
26
  context?: ContextVariables;
23
27
  };
24
28
  export declare type RecommendationInstantiatorServices = {
25
- client: Client;
26
- logger: Logger;
27
- tracker: Tracker;
29
+ client?: Client;
30
+ logger?: Logger;
31
+ tracker?: Tracker;
28
32
  };
29
33
  export declare class RecommendationInstantiator {
30
- controllers: {
31
- [key: string]: RecommendationController;
32
- };
33
34
  client: Client;
34
35
  tracker: Tracker;
35
36
  logger: Logger;
37
+ controller: {
38
+ [key: string]: RecommendationController;
39
+ };
36
40
  config: RecommendationInstantiatorConfig;
37
41
  context: ContextVariables;
38
- uses: Attachments[];
39
- plugins: {
40
- (cntrlr: AbstractController): Promise<void>;
41
- }[];
42
- middleware: {
43
- event: string;
44
- func: Middleware<unknown>[];
45
- }[];
46
42
  targeter: DomTargeter;
47
- constructor(config: RecommendationInstantiatorConfig, { client, logger, tracker }: RecommendationInstantiatorServices, context?: ContextVariables);
48
- plugin(func: (cntrlr: AbstractController) => Promise<void>): void;
43
+ private uses;
44
+ private plugins;
45
+ private middleware;
46
+ constructor(config: RecommendationInstantiatorConfig, services?: RecommendationInstantiatorServices, context?: ContextVariables);
47
+ plugin(func: (cntrlr: AbstractController, ...args: any[]) => Promise<void>, ...args: unknown[]): void;
49
48
  on<T>(event: string, ...func: Middleware<T>[]): void;
50
49
  use(attachments: Attachments): void;
51
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RecommendationInstantiator.d.ts","sourceRoot":"","sources":["../../../src/Instantiators/RecommendationInstantiator.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAc,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjI,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEtE,oBAAY,gCAAgC,GAAG;IAC9C,UAAU,EAAE;QACX,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC;KAC7D,CAAC;IACF,MAAM,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,WAAW,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,oBAAY,kCAAkC,GAAG;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,qBAAa,0BAA0B;IACtC,WAAW,EAAE;QACZ,CAAC,GAAG,EAAE,MAAM,GAAG,wBAAwB,CAAC;KACxC,CAAM;IACP,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,gCAAgC,CAAC;IACzC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,IAAI,EAAE,WAAW,EAAE,CAAM;IACzB,OAAO,EAAE;QAAE,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,EAAE,CAAM;IAChE,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAA;KAAE,EAAE,CAAM;IAC3D,QAAQ,EAAE,WAAW,CAAC;gBAEjB,MAAM,EAAE,gCAAgC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kCAAkC,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAgL1I,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIjE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAIpD,GAAG,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;CAG1C"}
1
+ {"version":3,"file":"RecommendationInstantiator.d.ts","sourceRoot":"","sources":["../../../src/Instantiators/RecommendationInstantiator.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAc,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjI,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,KAAK,EAA0B,aAAa,EAAE,MAAM,UAAU,CAAC;AAEtE,oBAAY,gCAAgC,GAAG;IAC9C,MAAM,CAAC,EAAE;QACR,OAAO,EAAE,aAAa,CAAC;QACvB,MAAM,CAAC,EAAE,YAAY,CAAC;KACtB,CAAC;IACF,UAAU,EAAE;QACX,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC;KAC7D,CAAC;IACF,MAAM,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,WAAW,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,oBAAY,kCAAkC,GAAG;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,qBAAa,0BAA0B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,wBAAwB,CAAC;KACxC,CAAM;IACA,MAAM,EAAE,gCAAgC,CAAC;IACzC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,WAAW,CAAC;IAE7B,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,OAAO,CAA2F;IAC1G,OAAO,CAAC,UAAU,CAAwD;gBAE9D,MAAM,EAAE,gCAAgC,EAAE,QAAQ,CAAC,EAAE,kCAAkC,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAoLxH,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,OAAA,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI9F,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAIpD,GAAG,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;CAG1C"}
@@ -2,26 +2,32 @@ import { jsx as _jsx } from "preact/jsx-runtime";
2
2
  import { render } from 'preact';
3
3
  import deepmerge from 'deepmerge';
4
4
  import { DomTargeter, getContext } from '@searchspring/snap-toolbox';
5
+ import { Client } from '@searchspring/snap-client';
6
+ import { Logger } from '@searchspring/snap-logger';
7
+ import { Tracker } from '@searchspring/snap-tracker';
5
8
  export class RecommendationInstantiator {
6
- constructor(config, { client, logger, tracker }, context) {
7
- this.controllers = {};
9
+ constructor(config, services, context) {
10
+ this.controller = {};
8
11
  this.uses = [];
9
12
  this.plugins = [];
10
13
  this.middleware = [];
11
14
  this.config = config;
12
- this.context = deepmerge(context || {}, config.context || {});
13
15
  if (!this.config) {
14
16
  throw new Error(`Recommendation Instantiator config is required`);
15
17
  }
16
18
  if (!this.config.config?.branch) {
17
19
  throw new Error(`Recommendation Instantiator config must contain 'branch' property`);
18
20
  }
19
- if (!this.config.components || typeof this.config.components != 'object') {
21
+ if (!this.config.components || typeof this.config.components != 'object' || !Object.keys(this.config.components).length) {
20
22
  throw new Error(`Recommendation Instantiator config must contain 'components' mapping property`);
21
23
  }
22
- this.client = this.config.services?.client || client;
23
- this.tracker = this.config.services?.tracker || tracker;
24
- this.logger = this.config.services?.logger || logger;
24
+ if ((!services?.client || !services?.tracker) && !this.config?.client?.globals?.siteId) {
25
+ throw new Error(`Recommendation Instantiator config must contain a valid config.client.globals.siteId value`);
26
+ }
27
+ this.context = deepmerge(context || {}, config.context || {});
28
+ this.client = services?.client || new Client(this.config.client.globals, this.config.client.config);
29
+ this.tracker = services?.tracker || new Tracker(this.config.client.globals);
30
+ this.logger = services?.logger || new Logger('RecommendationInstantiator ');
25
31
  const profileCount = {};
26
32
  this.targeter = new DomTargeter([
27
33
  {
@@ -30,18 +36,18 @@ export class RecommendationInstantiator {
30
36
  action: 'before',
31
37
  element: (target, origElement) => {
32
38
  const profile = origElement.getAttribute('profile');
33
- if (profile) {
34
- const recsContainer = document.createElement('div');
35
- recsContainer.setAttribute('searchspring-recommend', profile);
36
- return recsContainer;
37
- }
38
- else {
39
- this.logger.warn(`'profile' attribute is missing from <script> tag, skipping this profile`, origElement);
40
- }
39
+ const recsContainer = document.createElement('div');
40
+ recsContainer.setAttribute('searchspring-recommend', profile);
41
+ return recsContainer;
41
42
  },
42
43
  },
43
44
  },
44
45
  ], async (target, injectedElem, elem) => {
46
+ const tag = injectedElem.getAttribute('searchspring-recommend');
47
+ if (!tag) {
48
+ this.logger.warn(`'profile' attribute is missing from <script> tag, skipping this profile`, elem);
49
+ return;
50
+ }
45
51
  const contextGlobals = {};
46
52
  const elemContext = getContext(['shopperId', 'shopper', 'product', 'seed', 'cart', 'options', 'profile', 'custom'], elem);
47
53
  const context = deepmerge(this.context, elemContext);
@@ -102,14 +108,13 @@ export class RecommendationInstantiator {
102
108
  this.tracker.cookies.cart.set(cartContents);
103
109
  contextGlobals.cart = this.tracker.cookies.cart.get();
104
110
  }
105
- const tag = injectedElem.getAttribute('searchspring-recommend');
106
111
  profileCount[tag] = profileCount[tag] + 1 || 1;
107
112
  const defaultGlobals = {
108
113
  limits: 20,
109
114
  };
110
- const globals = deepmerge(deepmerge(defaultGlobals, this.config.config?.globals || {}), contextGlobals);
115
+ const globals = deepmerge(deepmerge(defaultGlobals, this.config.client?.globals || {}), contextGlobals);
111
116
  const controllerConfig = {
112
- id: `recommend_${tag + (profileCount[tag] - 1)}`,
117
+ id: `recommend_${tag}_${profileCount[tag] - 1}`,
113
118
  tag,
114
119
  batched: options?.batched ?? true,
115
120
  realtime: Boolean(options?.realtime),
@@ -117,41 +122,39 @@ export class RecommendationInstantiator {
117
122
  globals,
118
123
  };
119
124
  const createRecommendationController = (await import('../create/createRecommendationController')).default;
120
- const client = this.client;
121
- const tracker = this.tracker;
122
- const recs = createRecommendationController({
123
- url: this.config.url || {},
125
+ const controller = createRecommendationController({
126
+ url: this.config.url,
124
127
  controller: controllerConfig,
125
128
  context,
126
- }, { client, tracker });
127
- this.uses.forEach((attachements) => recs.use(attachements));
128
- this.plugins.forEach((plugin) => recs.plugin(plugin));
129
- this.middleware.forEach((middleware) => recs.on(middleware.event, ...middleware.func));
130
- await recs.search();
131
- recs.addTargeter(this.targeter);
132
- this.controllers[recs.config.id] = recs;
133
- const profileVars = recs.store.profile.display.templateParameters;
134
- const component = recs.store.profile.display.template?.component;
129
+ }, { client: this.client, tracker: this.tracker });
130
+ this.uses.forEach((attachements) => controller.use(attachements));
131
+ this.plugins.forEach((plugin) => controller.plugin(plugin.func, ...plugin.args));
132
+ this.middleware.forEach((middleware) => controller.on(middleware.event, ...middleware.func));
133
+ await controller.search();
134
+ controller.addTargeter(this.targeter);
135
+ this.controller[controller.config.id] = controller;
136
+ const profileVars = controller.store.profile.display.templateParameters;
137
+ const component = controller.store.profile.display.template?.component;
135
138
  if (!profileVars) {
136
- recs.log.error(`profile failed to load!`);
139
+ this.logger.error(`profile '${tag}' found on ${elem} is missing templateParameters!`);
137
140
  return;
138
141
  }
139
142
  if (!component) {
140
- recs.log.error(`template does not support components!`);
143
+ this.logger.error(`profile '${tag}' found on ${elem} is missing component!`);
141
144
  return;
142
145
  }
143
- const RecommendationsComponent = this.config.components && (await this.config.components[component]());
146
+ const RecommendationsComponent = this.config.components[component] && (await this.config.components[component]());
144
147
  if (!RecommendationsComponent) {
145
- recs.log.error(`component '${profileVars.component}' not found!`);
148
+ this.logger.error(`profile '${tag}' found on ${elem} is expecting component mapping for '${component}' - verify instantiator config.`);
146
149
  return;
147
150
  }
148
151
  setTimeout(() => {
149
- render(_jsx(RecommendationsComponent, { controller: recs }), injectedElem);
152
+ render(_jsx(RecommendationsComponent, { controller: controller }), injectedElem);
150
153
  });
151
154
  });
152
155
  }
153
- plugin(func) {
154
- this.plugins.push(func);
156
+ plugin(func, ...args) {
157
+ this.plugins.push({ func, args });
155
158
  }
156
159
  on(event, ...func) {
157
160
  this.middleware.push({ event, func });