@searchspring/snap-preact 0.25.1 → 0.27.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.
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 +75 -50
  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 +314 -236
  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 +63 -40
  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 +157 -111
  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,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;IA2J1I,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"}
@@ -87,29 +87,34 @@ var jsx_runtime_1 = require("preact/jsx-runtime");
87
87
  var preact_1 = require("preact");
88
88
  var deepmerge_1 = __importDefault(require("deepmerge"));
89
89
  var snap_toolbox_1 = require("@searchspring/snap-toolbox");
90
+ var snap_client_1 = require("@searchspring/snap-client");
91
+ var snap_logger_1 = require("@searchspring/snap-logger");
92
+ var snap_tracker_1 = require("@searchspring/snap-tracker");
90
93
  var RecommendationInstantiator = /** @class */ (function () {
91
- function RecommendationInstantiator(config, _a, context) {
92
- var client = _a.client, logger = _a.logger, tracker = _a.tracker;
94
+ function RecommendationInstantiator(config, services, context) {
93
95
  var _this = this;
94
- var _b;
95
- this.controllers = {};
96
+ var _a, _b, _c, _d;
97
+ this.controller = {};
96
98
  this.uses = [];
97
99
  this.plugins = [];
98
100
  this.middleware = [];
99
101
  this.config = config;
100
- this.context = (0, deepmerge_1.default)(context || {}, config.context || {});
101
102
  if (!this.config) {
102
103
  throw new Error("Recommendation Instantiator config is required");
103
104
  }
104
- if (!((_b = this.config.config) === null || _b === void 0 ? void 0 : _b.branch)) {
105
+ if (!((_a = this.config.config) === null || _a === void 0 ? void 0 : _a.branch)) {
105
106
  throw new Error("Recommendation Instantiator config must contain 'branch' property");
106
107
  }
107
- if (!this.config.components || typeof this.config.components != 'object') {
108
+ if (!this.config.components || typeof this.config.components != 'object' || !Object.keys(this.config.components).length) {
108
109
  throw new Error("Recommendation Instantiator config must contain 'components' mapping property");
109
110
  }
110
- this.client = client;
111
- this.tracker = tracker;
112
- this.logger = logger;
111
+ if ((!(services === null || services === void 0 ? void 0 : services.client) || !(services === null || services === void 0 ? void 0 : services.tracker)) && !((_d = (_c = (_b = this.config) === null || _b === void 0 ? void 0 : _b.client) === null || _c === void 0 ? void 0 : _c.globals) === null || _d === void 0 ? void 0 : _d.siteId)) {
112
+ throw new Error("Recommendation Instantiator config must contain a valid config.client.globals.siteId value");
113
+ }
114
+ this.context = (0, deepmerge_1.default)(context || {}, config.context || {});
115
+ this.client = (services === null || services === void 0 ? void 0 : services.client) || new snap_client_1.Client(this.config.client.globals, this.config.client.config);
116
+ this.tracker = (services === null || services === void 0 ? void 0 : services.tracker) || new snap_tracker_1.Tracker(this.config.client.globals);
117
+ this.logger = (services === null || services === void 0 ? void 0 : services.logger) || new snap_logger_1.Logger('RecommendationInstantiator ');
113
118
  var profileCount = {};
114
119
  this.targeter = new snap_toolbox_1.DomTargeter([
115
120
  {
@@ -118,27 +123,27 @@ var RecommendationInstantiator = /** @class */ (function () {
118
123
  action: 'before',
119
124
  element: function (target, origElement) {
120
125
  var profile = origElement.getAttribute('profile');
121
- if (profile) {
122
- var recsContainer = document.createElement('div');
123
- recsContainer.setAttribute('searchspring-recommend', profile);
124
- return recsContainer;
125
- }
126
- else {
127
- _this.logger.warn("'profile' attribute is missing from <script> tag, skipping this profile", origElement);
128
- }
126
+ var recsContainer = document.createElement('div');
127
+ recsContainer.setAttribute('searchspring-recommend', profile);
128
+ return recsContainer;
129
129
  },
130
130
  },
131
131
  },
132
132
  ], function (target, injectedElem, elem) { return __awaiter(_this, void 0, void 0, function () {
133
- var contextGlobals, elemContext, context, shopper, shopperId, product, seed, options, tag, defaultGlobals, globals, controllerConfig, createRecommendationController, client, tracker, recs, profileVars, component, RecommendationsComponent, _a;
134
- var _b, _c, _d, _e, _f;
135
- return __generator(this, function (_g) {
136
- switch (_g.label) {
133
+ var tag, contextGlobals, elemContext, context, shopper, shopperId, product, seed, cart, options, cartContents, cartFuncContents, defaultGlobals, globals, controllerConfig, createRecommendationController, controller, profileVars, component, RecommendationsComponent, _a;
134
+ var _b, _c, _d;
135
+ return __generator(this, function (_e) {
136
+ switch (_e.label) {
137
137
  case 0:
138
+ tag = injectedElem.getAttribute('searchspring-recommend');
139
+ if (!tag) {
140
+ this.logger.warn("'profile' attribute is missing from <script> tag, skipping this profile", elem);
141
+ return [2 /*return*/];
142
+ }
138
143
  contextGlobals = {};
139
- elemContext = (0, snap_toolbox_1.getContext)(['shopperId', 'shopper', 'product', 'seed', 'options', 'profile', 'custom'], elem);
144
+ elemContext = (0, snap_toolbox_1.getContext)(['shopperId', 'shopper', 'product', 'seed', 'cart', 'options', 'profile', 'custom'], elem);
140
145
  context = (0, deepmerge_1.default)(this.context, elemContext);
141
- shopper = context.shopper, shopperId = context.shopperId, product = context.product, seed = context.seed, options = context.options;
146
+ shopper = context.shopper, shopperId = context.shopperId, product = context.product, seed = context.seed, cart = context.cart, options = context.options;
142
147
  /*
143
148
  type instantiatorContext = {
144
149
  shopper?: {
@@ -147,6 +152,7 @@ var RecommendationInstantiator = /** @class */ (function () {
147
152
  shopperId?: string;
148
153
  product?: string;
149
154
  seed?: string;
155
+ cart?: string[] | () => string[];
150
156
  options?: {
151
157
  siteId?: string;
152
158
  branch?: string;
@@ -175,55 +181,70 @@ var RecommendationInstantiator = /** @class */ (function () {
175
181
  if ((options === null || options === void 0 ? void 0 : options.limit) && Number.isInteger(Number(options === null || options === void 0 ? void 0 : options.limit))) {
176
182
  contextGlobals.limits = Number(options === null || options === void 0 ? void 0 : options.limit);
177
183
  }
178
- tag = injectedElem.getAttribute('searchspring-recommend');
184
+ if (typeof cart === 'function') {
185
+ try {
186
+ cartFuncContents = cart();
187
+ if (Array.isArray(cartFuncContents)) {
188
+ cartContents = cartFuncContents;
189
+ }
190
+ }
191
+ catch (e) {
192
+ this.logger.warn("Error getting cart contents from function", e);
193
+ }
194
+ }
195
+ else if (Array.isArray(cart)) {
196
+ cartContents = cart;
197
+ }
198
+ if (Array.isArray(cartContents)) {
199
+ this.tracker.cookies.cart.set(cartContents);
200
+ contextGlobals.cart = this.tracker.cookies.cart.get();
201
+ }
179
202
  profileCount[tag] = profileCount[tag] + 1 || 1;
180
203
  defaultGlobals = {
181
204
  limits: 20,
182
205
  };
183
- globals = (0, deepmerge_1.default)((0, deepmerge_1.default)(defaultGlobals, ((_b = this.config.config) === null || _b === void 0 ? void 0 : _b.globals) || {}), contextGlobals);
184
- controllerConfig = __assign(__assign({ id: "recommend_".concat(tag + (profileCount[tag] - 1)), tag: tag, batched: (_c = options === null || options === void 0 ? void 0 : options.batched) !== null && _c !== void 0 ? _c : true, realtime: Boolean(options === null || options === void 0 ? void 0 : options.realtime) }, this.config.config), { globals: globals });
206
+ globals = (0, deepmerge_1.default)((0, deepmerge_1.default)(defaultGlobals, ((_b = this.config.client) === null || _b === void 0 ? void 0 : _b.globals) || {}), contextGlobals);
207
+ controllerConfig = __assign(__assign({ id: "recommend_".concat(tag, "_").concat(profileCount[tag] - 1), tag: tag, batched: (_c = options === null || options === void 0 ? void 0 : options.batched) !== null && _c !== void 0 ? _c : true, realtime: Boolean(options === null || options === void 0 ? void 0 : options.realtime) }, this.config.config), { globals: globals });
185
208
  return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require('../create/createRecommendationController')); })];
186
209
  case 1:
187
- createRecommendationController = (_g.sent()).default;
188
- client = ((_d = this.config.services) === null || _d === void 0 ? void 0 : _d.client) || this.client;
189
- tracker = ((_e = this.config.services) === null || _e === void 0 ? void 0 : _e.tracker) || this.tracker;
190
- recs = createRecommendationController({
191
- url: this.config.url || {},
210
+ createRecommendationController = (_e.sent()).default;
211
+ controller = createRecommendationController({
212
+ url: this.config.url,
192
213
  controller: controllerConfig,
193
214
  context: context,
194
- }, { client: client, tracker: tracker });
195
- this.uses.forEach(function (attachements) { return recs.use(attachements); });
196
- this.plugins.forEach(function (plugin) { return recs.plugin(plugin); });
197
- this.middleware.forEach(function (middleware) { return recs.on.apply(recs, __spreadArray([middleware.event], middleware.func, false)); });
198
- return [4 /*yield*/, recs.search()];
215
+ }, { client: this.client, tracker: this.tracker });
216
+ this.uses.forEach(function (attachements) { return controller.use(attachements); });
217
+ this.plugins.forEach(function (plugin) { return controller.plugin.apply(controller, __spreadArray([plugin.func], plugin.args, false)); });
218
+ this.middleware.forEach(function (middleware) { return controller.on.apply(controller, __spreadArray([middleware.event], middleware.func, false)); });
219
+ return [4 /*yield*/, controller.search()];
199
220
  case 2:
200
- _g.sent();
201
- recs.addTargeter(this.targeter);
202
- this.controllers[recs.config.id] = recs;
203
- profileVars = recs.store.profile.display.templateParameters;
204
- component = (_f = recs.store.profile.display.template) === null || _f === void 0 ? void 0 : _f.component;
221
+ _e.sent();
222
+ controller.addTargeter(this.targeter);
223
+ this.controller[controller.config.id] = controller;
224
+ profileVars = controller.store.profile.display.templateParameters;
225
+ component = (_d = controller.store.profile.display.template) === null || _d === void 0 ? void 0 : _d.component;
205
226
  if (!profileVars) {
206
- recs.log.error("profile failed to load!");
227
+ this.logger.error("profile '".concat(tag, "' found on ").concat(elem, " is missing templateParameters!"));
207
228
  return [2 /*return*/];
208
229
  }
209
230
  if (!component) {
210
- recs.log.error("template does not support components!");
231
+ this.logger.error("profile '".concat(tag, "' found on ").concat(elem, " is missing component!"));
211
232
  return [2 /*return*/];
212
233
  }
213
- _a = this.config.components;
234
+ _a = this.config.components[component];
214
235
  if (!_a) return [3 /*break*/, 4];
215
236
  return [4 /*yield*/, this.config.components[component]()];
216
237
  case 3:
217
- _a = (_g.sent());
218
- _g.label = 4;
238
+ _a = (_e.sent());
239
+ _e.label = 4;
219
240
  case 4:
220
241
  RecommendationsComponent = _a;
221
242
  if (!RecommendationsComponent) {
222
- recs.log.error("component '".concat(profileVars.component, "' not found!"));
243
+ this.logger.error("profile '".concat(tag, "' found on ").concat(elem, " is expecting component mapping for '").concat(component, "' - verify instantiator config."));
223
244
  return [2 /*return*/];
224
245
  }
225
246
  setTimeout(function () {
226
- (0, preact_1.render)((0, jsx_runtime_1.jsx)(RecommendationsComponent, { controller: recs }), injectedElem);
247
+ (0, preact_1.render)((0, jsx_runtime_1.jsx)(RecommendationsComponent, { controller: controller }), injectedElem);
227
248
  });
228
249
  return [2 /*return*/];
229
250
  }
@@ -231,7 +252,11 @@ var RecommendationInstantiator = /** @class */ (function () {
231
252
  }); });
232
253
  }
233
254
  RecommendationInstantiator.prototype.plugin = function (func) {
234
- this.plugins.push(func);
255
+ var args = [];
256
+ for (var _i = 1; _i < arguments.length; _i++) {
257
+ args[_i - 1] = arguments[_i];
258
+ }
259
+ this.plugins.push({ func: func, args: args });
235
260
  };
236
261
  RecommendationInstantiator.prototype.on = function (event) {
237
262
  var func = [];
@@ -1,12 +1,15 @@
1
1
  import { Client } from '@searchspring/snap-client';
2
2
  import { Logger } from '@searchspring/snap-logger';
3
3
  import { Tracker } from '@searchspring/snap-tracker';
4
+ import { ControllerTypes } from '@searchspring/snap-controller';
4
5
  import type { ClientConfig, ClientGlobals } from '@searchspring/snap-client';
5
6
  import type { AbstractController, SearchController, AutocompleteController, FinderController, RecommendationController, SearchControllerConfig, AutocompleteControllerConfig, FinderControllerConfig, RecommendationControllerConfig, ControllerConfigs, ContextVariables } from '@searchspring/snap-controller';
6
7
  import type { Target, OnTarget } from '@searchspring/snap-toolbox';
7
8
  import type { UrlTranslatorConfig } from '@searchspring/snap-url-manager';
8
9
  import { RecommendationInstantiator, RecommendationInstantiatorConfig } from './Instantiators/RecommendationInstantiator';
9
10
  import type { SnapControllerServices, RootComponent } from './types';
11
+ export declare const BRANCH_COOKIE = "ssBranch";
12
+ export declare const SS_DEV_COOKIE = "ssDev";
10
13
  declare type ExtendedTarget = Target & {
11
14
  name?: string;
12
15
  controller?: AbstractController;
@@ -19,7 +22,7 @@ declare type ExtendedTarget = Target & {
19
22
  export declare type SnapConfig = {
20
23
  context?: ContextVariables;
21
24
  url?: UrlTranslatorConfig;
22
- client: {
25
+ client?: {
23
26
  globals: ClientGlobals;
24
27
  config?: ClientConfig;
25
28
  };
@@ -36,7 +39,7 @@ export declare type SnapConfig = {
36
39
  }[];
37
40
  autocomplete?: {
38
41
  config: AutocompleteControllerConfig;
39
- targeters: ExtendedTarget[];
42
+ targeters?: ExtendedTarget[];
40
43
  services?: SnapControllerServices;
41
44
  url?: UrlTranslatorConfig;
42
45
  context?: ContextVariables;
@@ -57,13 +60,12 @@ export declare type SnapConfig = {
57
60
  }[];
58
61
  };
59
62
  };
60
- declare type ControllerTypes = SearchController | AutocompleteController | FinderController | RecommendationController;
61
- declare enum DynamicImportNames {
62
- SEARCH = "searchController",
63
- AUTOCOMPLETE = "autocompleteController",
64
- FINDER = "finderController",
65
- RECOMMENDATION = "recommendationController"
66
- }
63
+ declare type SnapServices = {
64
+ client?: Client;
65
+ tracker?: Tracker;
66
+ logger?: Logger;
67
+ };
68
+ declare type Controllers = SearchController | AutocompleteController | FinderController | RecommendationController;
67
69
  export declare class Snap {
68
70
  config: SnapConfig;
69
71
  logger: Logger;
@@ -71,19 +73,19 @@ export declare class Snap {
71
73
  tracker: Tracker;
72
74
  context: ContextVariables;
73
75
  _controllerPromises: {
74
- [controllerConfigId: string]: Promise<ControllerTypes>;
76
+ [controllerConfigId: string]: Promise<Controllers>;
75
77
  };
76
78
  controllers: {
77
- [controllerConfigId: string]: ControllerTypes;
79
+ [controllerConfigId: string]: Controllers;
78
80
  };
79
81
  _instantiatorPromises: {
80
82
  [instantiatorId: string]: Promise<RecommendationInstantiator>;
81
83
  };
82
84
  getInstantiator: (id: string) => Promise<RecommendationInstantiator>;
83
- getController: (id: string) => Promise<ControllerTypes>;
84
- getControllers: (...controllerIds: string[]) => Promise<ControllerTypes[]>;
85
- createController: (type: DynamicImportNames, config: ControllerConfigs, services: SnapControllerServices, urlConfig: UrlTranslatorConfig, resolve: (value?: ControllerTypes | PromiseLike<ControllerTypes>) => void, context?: ContextVariables) => Promise<ControllerTypes>;
86
- constructor(config: SnapConfig);
85
+ getController: (id: string) => Promise<Controllers>;
86
+ getControllers: (...controllerIds: string[]) => Promise<Controllers[]>;
87
+ createController: (type: keyof typeof ControllerTypes, config: ControllerConfigs, services?: SnapControllerServices, urlConfig?: UrlTranslatorConfig, context?: ContextVariables, callback?: (value?: Controllers | PromiseLike<Controllers>) => void | Promise<void>) => Promise<Controllers>;
88
+ constructor(config: SnapConfig, services?: SnapServices);
87
89
  }
88
90
  export {};
89
91
  //# sourceMappingURL=Snap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Snap.d.ts","sourceRoot":"","sources":["../../src/Snap.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Snap.d.ts","sourceRoot":"","sources":["../../src/Snap.tsx"],"names":[],"mappings":"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"}