@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,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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"}
package/dist/esm/Snap.js CHANGED
@@ -7,18 +7,46 @@ import { Logger, LogMode } from '@searchspring/snap-logger';
7
7
  import { Tracker } from '@searchspring/snap-tracker';
8
8
  import { version, DomTargeter, url, cookies, featureFlags } from '@searchspring/snap-toolbox';
9
9
  import { getContext } from '@searchspring/snap-toolbox';
10
+ import { ControllerTypes } from '@searchspring/snap-controller';
10
11
  import { default as createSearchController } from './create/createSearchController';
11
- const BRANCH_COOKIE = 'ssBranch';
12
- const SS_DEV_COOKIE = 'ssDev';
13
- var DynamicImportNames;
14
- (function (DynamicImportNames) {
15
- DynamicImportNames["SEARCH"] = "searchController";
16
- DynamicImportNames["AUTOCOMPLETE"] = "autocompleteController";
17
- DynamicImportNames["FINDER"] = "finderController";
18
- DynamicImportNames["RECOMMENDATION"] = "recommendationController";
19
- })(DynamicImportNames || (DynamicImportNames = {}));
12
+ export const BRANCH_COOKIE = 'ssBranch';
13
+ export const SS_DEV_COOKIE = 'ssDev';
14
+ const COMPONENT_ERROR = `Uncaught Error - Invalid value passed as the component.
15
+ This usually happens when you pass a JSX Element, and not a function that returns the component, in the snap config.
16
+
17
+ instead of -
18
+
19
+ targeters: [
20
+ {
21
+ selector: '#searchspring-content',
22
+ hideTarget: true,
23
+ component: <Content/>,
24
+ },
25
+ ]
26
+
27
+ or -
28
+
29
+ targeters: [
30
+ {
31
+ selector: '#searchspring-content',
32
+ hideTarget: true,
33
+ component: Content,
34
+ },
35
+ ]
36
+
37
+ please try -
38
+
39
+ targeters: [
40
+ {
41
+ selector: '#searchspring-content',
42
+ hideTarget: true,
43
+ component: () => Content
44
+ },
45
+ ]
46
+
47
+ The error above happened in the following targeter in the Snap Config`;
20
48
  export class Snap {
21
- constructor(config) {
49
+ constructor(config, services) {
22
50
  this.getInstantiator = (id) => {
23
51
  return this._instantiatorPromises[id] || Promise.reject(`getInstantiator could not find instantiator with id: ${id}`);
24
52
  };
@@ -30,44 +58,45 @@ export class Snap {
30
58
  controllerIds.forEach((id) => getControllerPromises.push(this.getController(id)));
31
59
  return Promise.all(getControllerPromises);
32
60
  };
33
- this.createController = (type, config, services, urlConfig, resolve, context) => {
61
+ this.createController = async (type, config, services, urlConfig, context, callback) => {
34
62
  let importPromise;
35
63
  switch (type) {
36
- case DynamicImportNames.SEARCH:
64
+ case ControllerTypes.search:
37
65
  importPromise = import('./create/createSearchController');
38
66
  break;
39
- case DynamicImportNames.AUTOCOMPLETE:
67
+ case ControllerTypes.autocomplete:
40
68
  importPromise = import('./create/createAutocompleteController');
41
69
  break;
42
- case DynamicImportNames.FINDER:
70
+ case ControllerTypes.finder:
43
71
  importPromise = import('./create/createFinderController');
44
72
  break;
45
- case DynamicImportNames.RECOMMENDATION:
73
+ case ControllerTypes.recommendation:
46
74
  importPromise = import('./create/createRecommendationController');
47
75
  break;
48
76
  }
49
- return importPromise.then((_) => {
50
- if (!this.controllers[config.id]) {
51
- this.controllers[config.id] = _.default({
52
- url: deepmerge(this.config.url || {}, urlConfig || {}),
53
- controller: config,
54
- context: deepmerge(this.context || {}, context || {}),
55
- }, {
56
- client: services?.client || this.client,
57
- store: services?.store,
58
- urlManager: services?.urlManager,
59
- eventManager: services?.eventManager,
60
- profiler: services?.profiler,
61
- logger: services?.logger,
62
- tracker: services?.tracker || this.tracker,
63
- });
64
- resolve(this.controllers[config.id]);
65
- }
66
- return this.controllers[config.id];
67
- });
77
+ const creationFunc = (await importPromise).default;
78
+ if (!this.controllers[config.id]) {
79
+ this.controllers[config.id] = creationFunc({
80
+ url: deepmerge(this.config.url || {}, urlConfig || {}),
81
+ controller: config,
82
+ context: deepmerge(this.context || {}, context || {}),
83
+ }, {
84
+ client: services?.client || this.client,
85
+ store: services?.store,
86
+ urlManager: services?.urlManager,
87
+ eventManager: services?.eventManager,
88
+ profiler: services?.profiler,
89
+ logger: services?.logger,
90
+ tracker: services?.tracker || this.tracker,
91
+ });
92
+ }
93
+ if (callback) {
94
+ await callback(this.controllers[config.id]);
95
+ }
96
+ return this.controllers[config.id];
68
97
  };
69
98
  this.config = config;
70
- this.logger = new Logger('Snap Preact ');
99
+ this.logger = services?.logger || new Logger('Snap Preact ');
71
100
  let globalContext = {};
72
101
  try {
73
102
  // get global context
@@ -80,12 +109,14 @@ export class Snap {
80
109
  this.config = deepmerge(this.config || {}, globalContext.config || {}, {
81
110
  isMergeableObject: isPlainObject,
82
111
  });
83
- this.context = deepmerge(globalContext || {}, this.config.context || {});
84
- if (!this.config?.client?.globals?.siteId) {
112
+ this.context = deepmerge(this.config.context || {}, globalContext || {}, {
113
+ isMergeableObject: isPlainObject,
114
+ });
115
+ if ((!services?.client || !services?.tracker) && !this.config?.client?.globals?.siteId) {
85
116
  throw new Error(`Snap: config provided must contain a valid config.client.globals.siteId value`);
86
117
  }
87
- this.client = new Client(this.config.client.globals, this.config.client.config);
88
- this.tracker = new Tracker(this.config.client.globals);
118
+ this.client = services?.client || new Client(this.config.client.globals, this.config.client.config);
119
+ this.tracker = services?.tracker || new Tracker(this.config.client.globals);
89
120
  this._controllerPromises = {};
90
121
  this._instantiatorPromises = {};
91
122
  this.controllers = {};
@@ -124,7 +155,7 @@ export class Snap {
124
155
  const branchScript = document.createElement('script');
125
156
  const src = `${path}${branchParam}/bundle.js`;
126
157
  branchScript.src = src;
127
- branchScript.setAttribute(BRANCH_COOKIE, '');
158
+ branchScript.setAttribute(BRANCH_COOKIE, branchParam);
128
159
  document.head.appendChild(branchScript);
129
160
  new DomTargeter([
130
161
  {
@@ -133,14 +164,27 @@ export class Snap {
133
164
  action: 'append',
134
165
  element: () => {
135
166
  const branchContainer = document.createElement('div');
136
- branchContainer.className = 'ss__branch--target';
167
+ branchContainer.id = 'searchspring-branch-override';
137
168
  return branchContainer;
138
169
  },
139
170
  },
140
171
  },
141
172
  ], async (target, elem) => {
173
+ let bundleDetails, error;
174
+ try {
175
+ const getBundleDetails = (await import('./getBundleDetails/getBundleDetails')).getBundleDetails;
176
+ bundleDetails = await getBundleDetails(src);
177
+ }
178
+ catch (err) {
179
+ error = err;
180
+ }
142
181
  const BranchOverride = (await import('./components/BranchOverride')).BranchOverride;
143
- render(_jsx(BranchOverride, { branch: branchParam, cookieName: BRANCH_COOKIE, bundleUrl: src }), elem);
182
+ render(_jsx(BranchOverride, { name: branchParam, details: bundleDetails, error: error, onRemoveClick: () => {
183
+ cookies.unset(BRANCH_COOKIE);
184
+ const urlState = url(window.location.href);
185
+ delete urlState.params.query['branch'];
186
+ window.location.href = urlState.url();
187
+ } }), elem);
144
188
  });
145
189
  // prevent further instantiation of config
146
190
  return;
@@ -196,7 +240,7 @@ export class Snap {
196
240
  const targetFunction = async (target, elem, originalElem) => {
197
241
  runSearch();
198
242
  const onTarget = target.onTarget;
199
- onTarget && onTarget(target, elem, originalElem);
243
+ onTarget && (await onTarget(target, elem, originalElem));
200
244
  try {
201
245
  const Component = await target.component();
202
246
  setTimeout(() => {
@@ -204,44 +248,10 @@ export class Snap {
204
248
  });
205
249
  }
206
250
  catch (err) {
207
- this.logger.error(`Uncaught Error - Invalid value passed as the component.
208
- This usually happens when you pass a JSX Element, and not a function that returns the component, in the snap config.
209
-
210
- instead of -
211
-
212
- targeters: [
213
- {
214
- selector: '#searchspring-content',
215
- hideTarget: true,
216
- component: <Content/>,
217
- },
218
- ]
219
-
220
- or -
221
-
222
- targeters: [
223
- {
224
- selector: '#searchspring-content',
225
- hideTarget: true,
226
- component: Content,
227
- },
228
- ]
229
-
230
- please try -
231
-
232
- targeters: [
233
- {
234
- selector: '#searchspring-content',
235
- hideTarget: true,
236
- component: () => Content
237
- },
238
- ]
239
-
240
-
241
- The error above happened in the following targeter in the Snap Config`, target);
251
+ this.logger.error(COMPONENT_ERROR, target);
242
252
  }
243
253
  };
244
- controller?.targeters?.forEach(async (target, target_index) => {
254
+ controller?.targeters?.forEach((target, target_index) => {
245
255
  if (!target.selector) {
246
256
  throw new Error(`Targets at index ${target_index} missing selector value (string).`);
247
257
  }
@@ -283,16 +293,23 @@ The error above happened in the following targeter in the Snap Config`, target);
283
293
  };
284
294
  const targetFunction = async (target, elem, originalElem) => {
285
295
  const onTarget = target.onTarget;
286
- onTarget && onTarget(target, elem, originalElem);
287
- const Component = (await target.component());
288
- setTimeout(() => {
289
- render(_jsx(Component, { controller: this.controllers[controller.config.id], input: originalElem, ...target.props }), elem);
290
- });
296
+ onTarget && (await onTarget(target, elem, originalElem));
297
+ try {
298
+ const Component = (await target.component());
299
+ setTimeout(() => {
300
+ render(_jsx(Component, { controller: this.controllers[controller.config.id], input: originalElem, ...target.props }), elem);
301
+ });
302
+ }
303
+ catch (err) {
304
+ this.logger.error(COMPONENT_ERROR, target);
305
+ }
291
306
  };
292
307
  if (!controller?.targeters || controller?.targeters.length === 0) {
293
- this.createController(DynamicImportNames.AUTOCOMPLETE, controller.config, controller.services, controller.url, resolve, controller.context);
308
+ this.createController(ControllerTypes.autocomplete, controller.config, controller.services, controller.url, controller.context, (cntrlr) => {
309
+ resolve(cntrlr);
310
+ });
294
311
  }
295
- controller?.targeters?.forEach(async (target, target_index) => {
312
+ controller?.targeters?.forEach((target, target_index) => {
296
313
  if (!target.selector) {
297
314
  throw new Error(`Targets at index ${target_index} missing selector value (string).`);
298
315
  }
@@ -315,7 +332,9 @@ The error above happened in the following targeter in the Snap Config`, target);
315
332
  ...target,
316
333
  },
317
334
  ], async (target, elem, originalElem) => {
318
- const cntrlr = await this.createController(DynamicImportNames.AUTOCOMPLETE, controller.config, controller.services, controller.url, resolve, controller.context);
335
+ const cntrlr = await this.createController(ControllerTypes.autocomplete, controller.config, controller.services, controller.url, controller.context, (cntrlr) => {
336
+ resolve(cntrlr);
337
+ });
319
338
  runBind();
320
339
  targetFunction({ controller: cntrlr, ...target }, elem, originalElem);
321
340
  cntrlr.addTargeter(targeter);
@@ -342,16 +361,23 @@ The error above happened in the following targeter in the Snap Config`, target);
342
361
  };
343
362
  const targetFunction = async (target, elem, originalElem) => {
344
363
  const onTarget = target.onTarget;
345
- onTarget && onTarget(target, elem, originalElem);
346
- const Component = await target.component();
347
- setTimeout(() => {
348
- render(_jsx(Component, { controller: this.controllers[controller.config.id], ...target.props }), elem);
349
- });
364
+ onTarget && (await onTarget(target, elem, originalElem));
365
+ try {
366
+ const Component = await target.component();
367
+ setTimeout(() => {
368
+ render(_jsx(Component, { controller: this.controllers[controller.config.id], ...target.props }), elem);
369
+ });
370
+ }
371
+ catch (err) {
372
+ this.logger.error(COMPONENT_ERROR, target);
373
+ }
350
374
  };
351
375
  if (!controller?.targeters || controller?.targeters.length === 0) {
352
- this.createController(DynamicImportNames.FINDER, controller.config, controller.services, controller.url, resolve, controller.context);
376
+ this.createController(ControllerTypes.finder, controller.config, controller.services, controller.url, controller.context, (cntrlr) => {
377
+ resolve(cntrlr);
378
+ });
353
379
  }
354
- controller?.targeters?.forEach(async (target, target_index) => {
380
+ controller?.targeters?.forEach((target, target_index) => {
355
381
  if (!target.selector) {
356
382
  throw new Error(`Targets at index ${target_index} missing selector value (string).`);
357
383
  }
@@ -359,7 +385,9 @@ The error above happened in the following targeter in the Snap Config`, target);
359
385
  throw new Error(`Targets at index ${target_index} missing component value (Component).`);
360
386
  }
361
387
  const targeter = new DomTargeter([{ ...target }], async (target, elem, originalElem) => {
362
- const cntrlr = await this.createController(DynamicImportNames.FINDER, controller.config, controller.services, controller.url, resolve, controller.context);
388
+ const cntrlr = await this.createController(ControllerTypes.finder, controller.config, controller.services, controller.url, controller.context, (cntrlr) => {
389
+ resolve(cntrlr);
390
+ });
363
391
  runSearch();
364
392
  targetFunction({ controller: cntrlr, ...target }, elem, originalElem);
365
393
  cntrlr.addTargeter(targeter);
@@ -386,16 +414,23 @@ The error above happened in the following targeter in the Snap Config`, target);
386
414
  };
387
415
  const targetFunction = async (target, elem, originalElem) => {
388
416
  const onTarget = target.onTarget;
389
- onTarget && onTarget(target, elem, originalElem);
390
- const Component = await target.component();
391
- setTimeout(() => {
392
- render(_jsx(Component, { controller: this.controllers[controller.config.id], ...target.props }), elem);
393
- });
417
+ onTarget && (await onTarget(target, elem, originalElem));
418
+ try {
419
+ const Component = await target.component();
420
+ setTimeout(() => {
421
+ render(_jsx(Component, { controller: this.controllers[controller.config.id], ...target.props }), elem);
422
+ });
423
+ }
424
+ catch (err) {
425
+ this.logger.error(COMPONENT_ERROR, target);
426
+ }
394
427
  };
395
428
  if (!controller?.targeters || controller?.targeters.length === 0) {
396
- this.createController(DynamicImportNames.RECOMMENDATION, controller.config, controller.services, controller.url, resolve, controller.context);
429
+ this.createController(ControllerTypes.recommendation, controller.config, controller.services, controller.url, controller.context, (cntrlr) => {
430
+ resolve(cntrlr);
431
+ });
397
432
  }
398
- controller?.targeters?.forEach(async (target, target_index) => {
433
+ controller?.targeters?.forEach((target, target_index) => {
399
434
  if (!target.selector) {
400
435
  throw new Error(`Targets at index ${target_index} missing selector value (string).`);
401
436
  }
@@ -403,7 +438,9 @@ The error above happened in the following targeter in the Snap Config`, target);
403
438
  throw new Error(`Targets at index ${target_index} missing component value (Component).`);
404
439
  }
405
440
  const targeter = new DomTargeter([{ ...target }], async (target, elem, originalElem) => {
406
- const cntrlr = await this.createController(DynamicImportNames.RECOMMENDATION, controller.config, controller.services, controller.url, resolve, controller.context);
441
+ const cntrlr = await this.createController(ControllerTypes.recommendation, controller.config, controller.services, controller.url, controller.context, (cntrlr) => {
442
+ resolve(cntrlr);
443
+ });
407
444
  runSearch();
408
445
  targetFunction({ controller: cntrlr, ...target }, elem, originalElem);
409
446
  cntrlr.addTargeter(targeter);
@@ -421,11 +458,11 @@ The error above happened in the following targeter in the Snap Config`, target);
421
458
  });
422
459
  if (this.config?.instantiators?.recommendation) {
423
460
  try {
424
- this._instantiatorPromises.recommendations = import('./Instantiators/RecommendationInstantiator').then(({ RecommendationInstantiator }) => {
461
+ this._instantiatorPromises.recommendation = import('./Instantiators/RecommendationInstantiator').then(({ RecommendationInstantiator }) => {
425
462
  return new RecommendationInstantiator(this.config.instantiators.recommendation, {
426
- client: this.config.instantiators.recommendation?.services?.client || this.client,
427
- tracker: this.config.instantiators.recommendation?.services?.tracker || this.tracker,
428
- logger: this.config.instantiators.recommendation?.services?.logger || this.logger,
463
+ client: this.client,
464
+ tracker: this.tracker,
465
+ logger: this.logger,
429
466
  }, this.context);
430
467
  });
431
468
  }
@@ -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"}