@searchspring/snap-preact-components 0.39.3 → 0.41.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 (79) hide show
  1. package/dist/cjs/components/Molecules/Carousel/Carousel.d.ts +2 -1
  2. package/dist/cjs/components/Molecules/Carousel/Carousel.d.ts.map +1 -1
  3. package/dist/cjs/components/Molecules/Carousel/Carousel.js +13 -2
  4. package/dist/cjs/components/Molecules/Carousel/Carousel.stories.js +3 -3
  5. package/dist/cjs/components/Molecules/Slideout/Slideout.d.ts +1 -0
  6. package/dist/cjs/components/Molecules/Slideout/Slideout.d.ts.map +1 -1
  7. package/dist/cjs/components/Molecules/Slideout/Slideout.js +4 -31
  8. package/dist/cjs/components/Molecules/Slideout/Slideout.stories.d.ts +14 -0
  9. package/dist/cjs/components/Molecules/Slideout/Slideout.stories.d.ts.map +1 -1
  10. package/dist/cjs/components/Molecules/Slideout/Slideout.stories.js +9 -0
  11. package/dist/cjs/components/Organisms/Autocomplete/Autocomplete.d.ts +7 -2
  12. package/dist/cjs/components/Organisms/Autocomplete/Autocomplete.d.ts.map +1 -1
  13. package/dist/cjs/components/Organisms/Autocomplete/Autocomplete.js +81 -27
  14. package/dist/cjs/components/Organisms/Autocomplete/Autocomplete.stories.d.ts +75 -0
  15. package/dist/cjs/components/Organisms/Autocomplete/Autocomplete.stories.d.ts.map +1 -1
  16. package/dist/cjs/components/Organisms/Autocomplete/Autocomplete.stories.js +51 -1
  17. package/dist/cjs/components/Organisms/Recommendation/Recommendation.d.ts.map +1 -1
  18. package/dist/cjs/components/Organisms/Recommendation/Recommendation.js +10 -48
  19. package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.d.ts +10 -0
  20. package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.d.ts.map +1 -0
  21. package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.js +51 -0
  22. package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.stories.d.ts +94 -0
  23. package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.stories.d.ts.map +1 -0
  24. package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.stories.js +106 -0
  25. package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/index.d.ts +2 -0
  26. package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/index.d.ts.map +1 -0
  27. package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/index.js +17 -0
  28. package/dist/cjs/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.d.ts +12 -0
  29. package/dist/cjs/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.d.ts.map +1 -0
  30. package/dist/cjs/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.js +54 -0
  31. package/dist/cjs/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.stories.d.ts +109 -0
  32. package/dist/cjs/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.stories.d.ts.map +1 -0
  33. package/dist/cjs/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.stories.js +116 -0
  34. package/dist/cjs/components/Trackers/Recommendation/ResultTracker/index.d.ts +2 -0
  35. package/dist/cjs/components/Trackers/Recommendation/ResultTracker/index.d.ts.map +1 -0
  36. package/dist/cjs/components/Trackers/Recommendation/ResultTracker/index.js +17 -0
  37. package/dist/cjs/index.d.ts +2 -0
  38. package/dist/cjs/index.d.ts.map +1 -1
  39. package/dist/cjs/index.js +2 -0
  40. package/dist/esm/components/Molecules/Carousel/Carousel.d.ts +2 -1
  41. package/dist/esm/components/Molecules/Carousel/Carousel.d.ts.map +1 -1
  42. package/dist/esm/components/Molecules/Carousel/Carousel.js +16 -2
  43. package/dist/esm/components/Molecules/Carousel/Carousel.stories.js +3 -3
  44. package/dist/esm/components/Molecules/Slideout/Slideout.d.ts +1 -0
  45. package/dist/esm/components/Molecules/Slideout/Slideout.d.ts.map +1 -1
  46. package/dist/esm/components/Molecules/Slideout/Slideout.js +4 -31
  47. package/dist/esm/components/Molecules/Slideout/Slideout.stories.d.ts +14 -0
  48. package/dist/esm/components/Molecules/Slideout/Slideout.stories.d.ts.map +1 -1
  49. package/dist/esm/components/Molecules/Slideout/Slideout.stories.js +10 -0
  50. package/dist/esm/components/Organisms/Autocomplete/Autocomplete.d.ts +7 -2
  51. package/dist/esm/components/Organisms/Autocomplete/Autocomplete.d.ts.map +1 -1
  52. package/dist/esm/components/Organisms/Autocomplete/Autocomplete.js +80 -25
  53. package/dist/esm/components/Organisms/Autocomplete/Autocomplete.stories.d.ts +75 -0
  54. package/dist/esm/components/Organisms/Autocomplete/Autocomplete.stories.d.ts.map +1 -1
  55. package/dist/esm/components/Organisms/Autocomplete/Autocomplete.stories.js +56 -1
  56. package/dist/esm/components/Organisms/Recommendation/Recommendation.d.ts.map +1 -1
  57. package/dist/esm/components/Organisms/Recommendation/Recommendation.js +9 -47
  58. package/dist/esm/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.d.ts +10 -0
  59. package/dist/esm/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.d.ts.map +1 -0
  60. package/dist/esm/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.js +40 -0
  61. package/dist/esm/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.stories.d.ts +94 -0
  62. package/dist/esm/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.stories.d.ts.map +1 -0
  63. package/dist/esm/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.stories.js +48 -0
  64. package/dist/esm/components/Trackers/Recommendation/ProfileTracker/index.d.ts +2 -0
  65. package/dist/esm/components/Trackers/Recommendation/ProfileTracker/index.d.ts.map +1 -0
  66. package/dist/esm/components/Trackers/Recommendation/ProfileTracker/index.js +1 -0
  67. package/dist/esm/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.d.ts +12 -0
  68. package/dist/esm/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.d.ts.map +1 -0
  69. package/dist/esm/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.js +43 -0
  70. package/dist/esm/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.stories.d.ts +109 -0
  71. package/dist/esm/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.stories.d.ts.map +1 -0
  72. package/dist/esm/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.stories.js +58 -0
  73. package/dist/esm/components/Trackers/Recommendation/ResultTracker/index.d.ts +2 -0
  74. package/dist/esm/components/Trackers/Recommendation/ResultTracker/index.d.ts.map +1 -0
  75. package/dist/esm/components/Trackers/Recommendation/ResultTracker/index.js +1 -0
  76. package/dist/esm/index.d.ts +2 -0
  77. package/dist/esm/index.d.ts.map +1 -1
  78. package/dist/esm/index.js +2 -0
  79. package/package.json +11 -11
@@ -110,7 +110,47 @@ exports.default = {
110
110
  control: { type: 'text' },
111
111
  }, hideTerms: {
112
112
  defaultValue: false,
113
- description: 'prevent terms from rendering (also applicable to trending terms)',
113
+ description: 'prevent all terms from rendering (also applicable to trending and history terms)',
114
+ table: {
115
+ type: {
116
+ summary: 'boolean',
117
+ },
118
+ defaultValue: { summary: false },
119
+ },
120
+ control: { type: 'boolean' },
121
+ }, hideHistory: {
122
+ defaultValue: false,
123
+ description: 'prevent historical terms and results from rendering',
124
+ table: {
125
+ type: {
126
+ summary: 'boolean',
127
+ },
128
+ defaultValue: { summary: false },
129
+ },
130
+ control: { type: 'boolean' },
131
+ }, hideTrending: {
132
+ defaultValue: false,
133
+ description: 'prevent trending terms and results from rendering',
134
+ table: {
135
+ type: {
136
+ summary: 'boolean',
137
+ },
138
+ defaultValue: { summary: false },
139
+ },
140
+ control: { type: 'boolean' },
141
+ }, retainHistory: {
142
+ defaultValue: false,
143
+ description: 'allow history terms to render even when there is a query in the input',
144
+ table: {
145
+ type: {
146
+ summary: 'boolean',
147
+ },
148
+ defaultValue: { summary: false },
149
+ },
150
+ control: { type: 'boolean' },
151
+ }, retainTrending: {
152
+ defaultValue: false,
153
+ description: 'allow trending terms to render even when there is a query in the input',
114
154
  table: {
115
155
  type: {
116
156
  summary: 'boolean',
@@ -198,6 +238,16 @@ exports.default = {
198
238
  defaultValue: { summary: 'Popular Searches' },
199
239
  },
200
240
  control: { type: 'text' },
241
+ }, historyTitle: {
242
+ defaultValue: 'Previously Searched',
243
+ description: 'Change historical terms header title',
244
+ table: {
245
+ type: {
246
+ summary: 'string',
247
+ },
248
+ defaultValue: { summary: 'Previously Searched' },
249
+ },
250
+ control: { type: 'text' },
201
251
  }, facetsTitle: {
202
252
  defaultValue: '',
203
253
  description: 'Change facets header title',
@@ -1 +1 @@
1
- {"version":3,"file":"Recommendation.d.ts","sourceRoot":"","sources":["../../../../../src/components/Organisms/Recommendation/Recommendation.tsx"],"names":[],"mappings":";AAAA,eAAe;AACf,OAAO,EAAe,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAQxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAW,MAAM,+BAA+B,CAAC;AAMhF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAc,MAAM,gBAAgB,CAAC;AAc9E,eAAO,MAAM,cAAc,gBAAyB,mBAAmB,KAAG,WAAW;;CAyKnF,CAAC;AAEH,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IAC1D,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IAClC,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,wBAAwB,CAAC;IACrC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB"}
1
+ {"version":3,"file":"Recommendation.d.ts","sourceRoot":"","sources":["../../../../../src/components/Organisms/Recommendation/Recommendation.tsx"],"names":[],"mappings":";AAAA,eAAe;AACf,OAAO,EAAe,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAMxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAW,MAAM,+BAA+B,CAAC;AAMhF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAc,MAAM,gBAAgB,CAAC;AAe9E,eAAO,MAAM,cAAc,gBAAyB,mBAAmB,KAAG,WAAW;;CA+HnF,CAAC;AAEH,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IAC1D,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IAClC,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,wBAAwB,CAAC;IACrC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB"}
@@ -28,7 +28,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
28
28
  exports.Recommendation = void 0;
29
29
  /** @jsx jsx */
30
30
  var preact_1 = require("preact");
31
- var hooks_1 = require("preact/hooks");
32
31
  var react_1 = require("@emotion/react");
33
32
  var classnames_1 = __importDefault(require("classnames"));
34
33
  var mobx_react_lite_1 = require("mobx-react-lite");
@@ -37,8 +36,9 @@ var Carousel_1 = require("../../Molecules/Carousel");
37
36
  var Result_1 = require("../../Molecules/Result");
38
37
  var utilities_1 = require("../../../utilities");
39
38
  var providers_1 = require("../../../providers");
40
- var hooks_2 = require("../../../hooks");
41
39
  var useDisplaySettings_1 = require("../../../hooks/useDisplaySettings");
40
+ var ProfileTracker_1 = require("../../Trackers/Recommendation/ProfileTracker");
41
+ var ResultTracker_1 = require("../../Trackers/Recommendation/ResultTracker");
42
42
  var CSS = {
43
43
  recommendation: function (_a) {
44
44
  var vertical = _a.vertical;
@@ -51,7 +51,7 @@ var CSS = {
51
51
  },
52
52
  };
53
53
  exports.Recommendation = (0, mobx_react_lite_1.observer)(function (properties) {
54
- var _a, _b, _c, _d, _e, _f, _g;
54
+ var _a, _b, _c, _d, _e, _f;
55
55
  var globalTheme = (0, providers_1.useTheme)();
56
56
  var props = __assign(__assign(__assign({
57
57
  // default props
@@ -89,31 +89,6 @@ exports.Recommendation = (0, mobx_react_lite_1.observer)(function (properties) {
89
89
  // component theme overrides
90
90
  theme: props === null || props === void 0 ? void 0 : props.theme }),
91
91
  };
92
- var rootComponentRef = (0, hooks_1.useRef)(null);
93
- var _h = (0, hooks_1.useState)([0, 0]), initialIndexes = _h[0], setInitialIndexes = _h[1];
94
- var inViewport = (0, hooks_2.useIntersection)(rootComponentRef, '0px', true);
95
- var sendProductImpression = function (index, count) {
96
- if (!inViewport)
97
- return;
98
- var resultLoopCount = [index, index + count];
99
- var resultLoopOverCount;
100
- if (index + count > resultsToRender.length - 1) {
101
- resultLoopCount = [index];
102
- resultLoopOverCount = [0, index + count - resultsToRender.length];
103
- }
104
- var resultsImpressions = resultsToRender.slice.apply(resultsToRender, resultLoopCount);
105
- if (resultLoopOverCount) {
106
- resultsImpressions = resultsImpressions.concat(resultsToRender.slice.apply(resultsToRender, resultLoopOverCount));
107
- }
108
- resultsImpressions.map(function (result) {
109
- controller.track.product.impression(result);
110
- });
111
- };
112
- if (inViewport) {
113
- controller.track.impression();
114
- sendProductImpression(initialIndexes[0], initialIndexes[1]);
115
- }
116
- (children || resultsToRender.length) && ((_g = controller === null || controller === void 0 ? void 0 : controller.track) === null || _g === void 0 ? void 0 : _g.render());
117
92
  var styling = {};
118
93
  if (!disableStyles) {
119
94
  styling.css = [CSS.recommendation({ vertical: vertical }), style];
@@ -122,24 +97,11 @@ exports.Recommendation = (0, mobx_react_lite_1.observer)(function (properties) {
122
97
  styling.css = [style];
123
98
  }
124
99
  return children || (resultsToRender === null || resultsToRender === void 0 ? void 0 : resultsToRender.length) ? ((0, react_1.jsx)(providers_1.CacheProvider, null,
125
- (0, react_1.jsx)("div", __assign({ ref: rootComponentRef }, styling, { className: (0, classnames_1.default)('ss__recommendation', className) }),
126
- title && (0, react_1.jsx)("h3", { className: "ss__recommendation__title" }, title),
127
- (0, react_1.jsx)(Carousel_1.Carousel, __assign({ onInit: function (swiper) {
128
- //@ts-ignore
129
- setInitialIndexes([swiper.realIndex, swiper.passedParams.slidesPerView]);
130
- }, onBreakpoint: function (swiper) {
131
- //@ts-ignore
132
- sendProductImpression(swiper.realIndex, swiper.passedParams.slidesPerView);
133
- }, onSlideChange: function (swiper) {
134
- //@ts-ignore
135
- sendProductImpression(swiper.realIndex, swiper.passedParams.slidesPerView);
136
- }, prevButton: prevButton, nextButton: nextButton, hideButtons: hideButtons, onNextButtonClick: function (e) { return controller.track.click(e); }, onPrevButtonClick: function (e) { return controller.track.click(e); }, onClick: function (swiper, e) {
137
- var clickedIndex = swiper.realIndex + (swiper.clickedIndex - swiper.activeIndex);
138
- controller.track.click(e);
139
- if (!Number.isNaN(clickedIndex)) {
140
- controller.track.product.click(e, resultsToRender[clickedIndex]);
141
- }
142
- }, loop: loop, pagination: pagination, breakpoints: breakpoints }, subProps.carousel, additionalProps, displaySettings), Array.isArray(children) && children.length
143
- ? children.map(function (child) { return child; })
144
- : resultsToRender.map(function (result) { return (0, react_1.jsx)(Result_1.Result, __assign({}, subProps.result, { controller: controller, result: result })); }))))) : ((0, react_1.jsx)(preact_1.Fragment, null));
100
+ (0, react_1.jsx)("div", __assign({}, styling, { className: (0, classnames_1.default)('ss__recommendation', className) }),
101
+ (0, react_1.jsx)(ProfileTracker_1.RecommendationProfileTracker, { controller: controller },
102
+ title && (0, react_1.jsx)("h3", { className: "ss__recommendation__title" }, title),
103
+ (0, react_1.jsx)(Carousel_1.Carousel, __assign({ prevButton: prevButton, nextButton: nextButton, hideButtons: hideButtons, loop: loop, pagination: pagination, breakpoints: breakpoints }, subProps.carousel, additionalProps, displaySettings), Array.isArray(children) && children.length
104
+ ? children.map(function (child, idx) { return ((0, react_1.jsx)(ResultTracker_1.RecommendationResultTracker, { controller: controller, result: resultsToRender[idx] }, child)); })
105
+ : resultsToRender.map(function (result) { return ((0, react_1.jsx)(ResultTracker_1.RecommendationResultTracker, { controller: controller, result: result },
106
+ (0, react_1.jsx)(Result_1.Result, __assign({}, subProps.result, { controller: controller, result: result })))); })))))) : ((0, react_1.jsx)(preact_1.Fragment, null));
145
107
  });
@@ -0,0 +1,10 @@
1
+ import type { RecommendationController } from '@searchspring/snap-controller';
2
+ import { ComponentProps } from '../../../../types';
3
+ export declare const RecommendationProfileTracker: ((properties: RecommendationProfileTrackerProps) => JSX.Element) & {
4
+ displayName: string;
5
+ };
6
+ export interface RecommendationProfileTrackerProps extends ComponentProps {
7
+ children: any;
8
+ controller: RecommendationController;
9
+ }
10
+ //# sourceMappingURL=RecommendationProfileTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecommendationProfileTracker.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AAO/D,eAAO,MAAM,4BAA4B,gBAAyB,iCAAiC,KAAG,WAAW;;CA+C/G,CAAC;AAEH,MAAM,WAAW,iCAAkC,SAAQ,cAAc;IACxE,QAAQ,EAAE,GAAG,CAAC;IACd,UAAU,EAAE,wBAAwB,CAAC;CACrC"}
@@ -0,0 +1,51 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.RecommendationProfileTracker = void 0;
18
+ /** @jsx jsx */
19
+ var preact_1 = require("preact");
20
+ var react_1 = require("@emotion/react");
21
+ var hooks_1 = require("preact/hooks");
22
+ var mobx_react_lite_1 = require("mobx-react-lite");
23
+ var providers_1 = require("../../../../providers");
24
+ var hooks_2 = require("../../../../hooks");
25
+ var classnames_1 = __importDefault(require("classnames"));
26
+ var CSS = {
27
+ RecommendationProfileTracker: function () { return (0, react_1.css)({}); },
28
+ };
29
+ exports.RecommendationProfileTracker = (0, mobx_react_lite_1.observer)(function (properties) {
30
+ var _a, _b, _c;
31
+ var globalTheme = (0, providers_1.useTheme)();
32
+ var props = __assign(__assign(__assign({}, (_a = globalTheme === null || globalTheme === void 0 ? void 0 : globalTheme.components) === null || _a === void 0 ? void 0 : _a.RecommendationProfileTracker), properties), (_c = (_b = properties.theme) === null || _b === void 0 ? void 0 : _b.components) === null || _c === void 0 ? void 0 : _c.RecommendationProfileTracker);
33
+ var children = props.children, controller = props.controller, className = props.className, style = props.style, disableStyles = props.disableStyles;
34
+ var childs = (0, preact_1.toChildArray)(children);
35
+ // do impression tracking for "profile"
36
+ var componentRef = (0, hooks_1.useRef)(null);
37
+ var inViewport = (0, hooks_2.useIntersection)(componentRef, '0px');
38
+ if (inViewport) {
39
+ controller.track.impression();
40
+ }
41
+ // takes care of rendering profile
42
+ childs.length && controller.track.render();
43
+ var styling = {};
44
+ if (!disableStyles) {
45
+ styling.css = [CSS.RecommendationProfileTracker(), style];
46
+ }
47
+ else if (style) {
48
+ styling.css = [style];
49
+ }
50
+ return childs.length ? ((0, react_1.jsx)("div", __assign({ className: (0, classnames_1.default)('ss__recommendation-profile-tracker', className), onClick: function (e) { return controller.track.click(e); }, ref: componentRef }, styling), children)) : ((0, react_1.jsx)(preact_1.Fragment, null));
51
+ });
@@ -0,0 +1,94 @@
1
+ /// <reference types="react" />
2
+ import { h } from 'preact';
3
+ import { RecommendationProfileTrackerProps } from './RecommendationProfileTracker';
4
+ import type { RecommendationController } from '@searchspring/snap-controller';
5
+ declare const _default: {
6
+ title: string;
7
+ component: ((properties: RecommendationProfileTrackerProps) => JSX.Element) & {
8
+ displayName: string;
9
+ };
10
+ parameters: {
11
+ docs: {
12
+ page: () => h.JSX.Element;
13
+ };
14
+ };
15
+ argTypes: {
16
+ className: {
17
+ description: string;
18
+ table: {
19
+ type: {
20
+ summary: string;
21
+ };
22
+ defaultValue: {
23
+ summary: string;
24
+ };
25
+ };
26
+ control: {
27
+ type: string;
28
+ };
29
+ };
30
+ disableStyles: {
31
+ defaultValue: boolean;
32
+ description: string;
33
+ table: {
34
+ type: {
35
+ summary: string;
36
+ };
37
+ defaultValue: {
38
+ summary: boolean;
39
+ };
40
+ };
41
+ control: {
42
+ type: string;
43
+ };
44
+ };
45
+ style: {
46
+ description: string;
47
+ table: {
48
+ type: {
49
+ summary: string;
50
+ };
51
+ };
52
+ control: {
53
+ type: string;
54
+ };
55
+ };
56
+ theme: {
57
+ description: string;
58
+ table: {
59
+ type: {
60
+ summary: string;
61
+ };
62
+ };
63
+ control: {
64
+ type: string;
65
+ };
66
+ };
67
+ controller: {
68
+ description: string;
69
+ type: {
70
+ required: boolean;
71
+ };
72
+ table: {
73
+ type: {
74
+ summary: string;
75
+ };
76
+ };
77
+ control: {
78
+ type: string;
79
+ };
80
+ };
81
+ };
82
+ };
83
+ export default _default;
84
+ export declare const Default: {
85
+ (props: RecommendationProfileTrackerProps, { loaded: { controller } }: {
86
+ loaded: {
87
+ controller: RecommendationController;
88
+ };
89
+ }): h.JSX.Element;
90
+ loaders: (() => Promise<{
91
+ controller: RecommendationController;
92
+ }>)[];
93
+ };
94
+ //# sourceMappingURL=RecommendationProfileTracker.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecommendationProfileTracker.stories.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.stories.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,OAAO,EAAgC,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AAIjH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAI9E,wBA2BE;AAIF,eAAO,MAAM,OAAO;YACZ,iCAAiC;;wBACY,wBAAwB;;;;;;CAY5E,CAAC"}
@@ -0,0 +1,106 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.Default = void 0;
54
+ var preact_1 = require("preact");
55
+ var blocks_1 = require("@storybook/addon-docs/blocks");
56
+ var RecommendationProfileTracker_1 = require("./RecommendationProfileTracker");
57
+ var utilities_1 = require("../../../../utilities");
58
+ var readme_md_1 = __importDefault(require("../ProfileTracker/readme.md"));
59
+ var snapify_1 = require("../../../../utilities/snapify");
60
+ var Carousel_1 = require("../../../Molecules/Carousel");
61
+ var Result_1 = require("../../../Molecules/Result");
62
+ exports.default = {
63
+ title: "Trackers/Recommendation/Profile",
64
+ component: RecommendationProfileTracker_1.RecommendationProfileTracker,
65
+ parameters: {
66
+ docs: {
67
+ page: function () { return ((0, preact_1.h)("div", null,
68
+ (0, preact_1.h)(readme_md_1.default, null),
69
+ (0, preact_1.h)(blocks_1.ArgsTable, { story: blocks_1.PRIMARY_STORY }))); },
70
+ },
71
+ },
72
+ argTypes: __assign({ controller: {
73
+ description: 'Recommendation Controller reference',
74
+ type: { required: true },
75
+ table: {
76
+ type: {
77
+ summary: 'Controller',
78
+ },
79
+ },
80
+ control: { type: 'none' },
81
+ } }, utilities_1.componentArgs),
82
+ };
83
+ var snapInstance = snapify_1.Snapify.recommendation({ id: 'Recommendation', tag: 'trending', globals: { siteId: '8uyt2m' } });
84
+ var Default = function (props, _a) {
85
+ var controller = _a.loaded.controller;
86
+ return ((0, preact_1.h)(RecommendationProfileTracker_1.RecommendationProfileTracker, __assign({}, props, { controller: controller }),
87
+ (0, preact_1.h)("h2", null, "Recommended for You"),
88
+ (0, preact_1.h)(Carousel_1.Carousel, null, controller.store.results.map(function (result, idx) {
89
+ return (0, preact_1.h)(Result_1.Result, { result: result, key: idx });
90
+ }))));
91
+ };
92
+ exports.Default = Default;
93
+ exports.Default.loaders = [
94
+ function () { return __awaiter(void 0, void 0, void 0, function () {
95
+ return __generator(this, function (_a) {
96
+ switch (_a.label) {
97
+ case 0: return [4 /*yield*/, snapInstance.search()];
98
+ case 1:
99
+ _a.sent();
100
+ return [2 /*return*/, {
101
+ controller: snapInstance,
102
+ }];
103
+ }
104
+ });
105
+ }); },
106
+ ];
@@ -0,0 +1,2 @@
1
+ export * from './RecommendationProfileTracker';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Trackers/Recommendation/ProfileTracker/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./RecommendationProfileTracker"), exports);
@@ -0,0 +1,12 @@
1
+ import type { RecommendationController } from '@searchspring/snap-controller';
2
+ import { ComponentProps } from '../../../../types';
3
+ import type { Product } from '@searchspring/snap-store-mobx';
4
+ export declare const RecommendationResultTracker: ((properties: RecommendationResultTrackerProps) => JSX.Element) & {
5
+ displayName: string;
6
+ };
7
+ export interface RecommendationResultTrackerProps extends ComponentProps {
8
+ children: any;
9
+ result: Product;
10
+ controller: RecommendationController;
11
+ }
12
+ //# sourceMappingURL=RecommendationResultTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecommendationResultTracker.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAO7D,eAAO,MAAM,2BAA2B,gBAAyB,gCAAgC,KAAG,WAAW;;CAiD7G,CAAC;AAEH,MAAM,WAAW,gCAAiC,SAAQ,cAAc;IACvE,QAAQ,EAAE,GAAG,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,wBAAwB,CAAC;CACrC"}
@@ -0,0 +1,54 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.RecommendationResultTracker = void 0;
18
+ var react_1 = require("@emotion/react");
19
+ var hooks_1 = require("preact/hooks");
20
+ var mobx_react_lite_1 = require("mobx-react-lite");
21
+ var providers_1 = require("../../../../providers");
22
+ var hooks_2 = require("../../../../hooks");
23
+ var classnames_1 = __importDefault(require("classnames"));
24
+ var CSS = {
25
+ RecommendationResultTracker: function () { return (0, react_1.css)({}); },
26
+ };
27
+ exports.RecommendationResultTracker = (0, mobx_react_lite_1.observer)(function (properties) {
28
+ var _a, _b, _c;
29
+ var globalTheme = (0, providers_1.useTheme)();
30
+ var props = __assign(__assign(__assign({}, (_a = globalTheme === null || globalTheme === void 0 ? void 0 : globalTheme.components) === null || _a === void 0 ? void 0 : _a.RecommendationResultTracker), properties), (_c = (_b = properties.theme) === null || _b === void 0 ? void 0 : _b.components) === null || _c === void 0 ? void 0 : _c.RecommendationResultTracker);
31
+ var children = props.children, result = props.result, controller = props.controller, className = props.className, disableStyles = props.disableStyles, style = props.style;
32
+ var resultRef = (0, hooks_1.useRef)(null);
33
+ var resultInViewport = (0, hooks_2.useIntersection)(resultRef, '0px');
34
+ if (!controller.events.render) {
35
+ controller.log.warn('<RecommendationResultTracker> used without <RecommendationProfileTracker>');
36
+ }
37
+ controller.track.product.render(result);
38
+ if (resultInViewport) {
39
+ // intersection observer can trigger in any random order,
40
+ // so we need to check if profile impression has been sent and send if not.
41
+ if (!controller.events.impression) {
42
+ controller.track.impression();
43
+ }
44
+ controller.track.product.impression(result);
45
+ }
46
+ var styling = {};
47
+ if (!disableStyles) {
48
+ styling.css = [CSS.RecommendationResultTracker(), style];
49
+ }
50
+ else if (style) {
51
+ styling.css = [style];
52
+ }
53
+ return ((0, react_1.jsx)("div", __assign({ className: (0, classnames_1.default)('ss__recommendation-result-tracker', className), onClick: function (e) { return controller.track.product.click(e, result); }, ref: resultRef }, styling), children));
54
+ });
@@ -0,0 +1,109 @@
1
+ /// <reference types="react" />
2
+ import { h } from 'preact';
3
+ import { RecommendationResultTrackerProps } from './RecommendationResultTracker';
4
+ import type { RecommendationController } from '@searchspring/snap-controller';
5
+ declare const _default: {
6
+ title: string;
7
+ component: ((properties: RecommendationResultTrackerProps) => JSX.Element) & {
8
+ displayName: string;
9
+ };
10
+ parameters: {
11
+ docs: {
12
+ page: () => h.JSX.Element;
13
+ };
14
+ };
15
+ decorators: ((Story: any) => h.JSX.Element)[];
16
+ argTypes: {
17
+ className: {
18
+ description: string;
19
+ table: {
20
+ type: {
21
+ summary: string;
22
+ };
23
+ defaultValue: {
24
+ summary: string;
25
+ };
26
+ };
27
+ control: {
28
+ type: string;
29
+ };
30
+ };
31
+ disableStyles: {
32
+ defaultValue: boolean;
33
+ description: string;
34
+ table: {
35
+ type: {
36
+ summary: string;
37
+ };
38
+ defaultValue: {
39
+ summary: boolean;
40
+ };
41
+ };
42
+ control: {
43
+ type: string;
44
+ };
45
+ };
46
+ style: {
47
+ description: string;
48
+ table: {
49
+ type: {
50
+ summary: string;
51
+ };
52
+ };
53
+ control: {
54
+ type: string;
55
+ };
56
+ };
57
+ theme: {
58
+ description: string;
59
+ table: {
60
+ type: {
61
+ summary: string;
62
+ };
63
+ };
64
+ control: {
65
+ type: string;
66
+ };
67
+ };
68
+ controller: {
69
+ description: string;
70
+ type: {
71
+ required: boolean;
72
+ };
73
+ table: {
74
+ type: {
75
+ summary: string;
76
+ };
77
+ };
78
+ control: {
79
+ type: string;
80
+ };
81
+ };
82
+ result: {
83
+ description: string;
84
+ type: {
85
+ required: boolean;
86
+ };
87
+ table: {
88
+ type: {
89
+ summary: string;
90
+ };
91
+ };
92
+ control: {
93
+ type: string;
94
+ };
95
+ };
96
+ };
97
+ };
98
+ export default _default;
99
+ export declare const Default: {
100
+ (props: RecommendationResultTrackerProps, { loaded: { controller } }: {
101
+ loaded: {
102
+ controller: RecommendationController;
103
+ };
104
+ }): h.JSX.Element;
105
+ loaders: (() => Promise<{
106
+ controller: RecommendationController;
107
+ }>)[];
108
+ };
109
+ //# sourceMappingURL=RecommendationResultTracker.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecommendationResultTracker.stories.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.stories.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,OAAO,EAA+B,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AAI9G,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;;;;;;;;;;;yBAiBpE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAdb,wBA4CE;AAIF,eAAO,MAAM,OAAO;YACZ,gCAAgC;;wBACa,wBAAwB;;;;;;CAO5E,CAAC"}