@searchspring/snap-preact-components 0.65.1 → 0.66.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/Atoms/Icon/Icon.d.ts +1 -0
  2. package/dist/cjs/components/Atoms/Icon/Icon.d.ts.map +1 -1
  3. package/dist/cjs/components/Atoms/Icon/Icon.js +14 -12
  4. package/dist/cjs/components/Molecules/Carousel/Carousel.d.ts +2 -0
  5. package/dist/cjs/components/Molecules/Carousel/Carousel.d.ts.map +1 -1
  6. package/dist/cjs/components/Molecules/Carousel/Carousel.js +32 -3
  7. package/dist/cjs/components/Molecules/Result/Result.d.ts.map +1 -1
  8. package/dist/cjs/components/Molecules/Result/Result.js +2 -6
  9. package/dist/cjs/components/Organisms/Recommendation/Recommendation.d.ts +1 -0
  10. package/dist/cjs/components/Organisms/Recommendation/Recommendation.d.ts.map +1 -1
  11. package/dist/cjs/components/Organisms/RecommendationBundle/RecommendationBundle.js +1 -1
  12. package/dist/cjs/components/Organisms/Results/Results.d.ts.map +1 -1
  13. package/dist/cjs/components/Organisms/Results/Results.js +11 -9
  14. package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.d.ts +3 -0
  15. package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.d.ts.map +1 -1
  16. package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.js +3 -0
  17. package/dist/cjs/components/Trackers/ResultTracker/ResultTracker.d.ts.map +1 -1
  18. package/dist/cjs/components/Trackers/ResultTracker/ResultTracker.js +11 -21
  19. package/dist/cjs/hooks/index.d.ts +2 -0
  20. package/dist/cjs/hooks/index.d.ts.map +1 -1
  21. package/dist/cjs/hooks/index.js +2 -0
  22. package/dist/cjs/hooks/useIntersectionAdvanced.d.ts +11 -0
  23. package/dist/cjs/hooks/useIntersectionAdvanced.d.ts.map +1 -0
  24. package/dist/cjs/hooks/useIntersectionAdvanced.js +85 -0
  25. package/dist/cjs/hooks/useTracking.d.ts +12 -0
  26. package/dist/cjs/hooks/useTracking.d.ts.map +1 -0
  27. package/dist/cjs/hooks/useTracking.js +41 -0
  28. package/dist/cjs/providers/index.d.ts +1 -0
  29. package/dist/cjs/providers/index.d.ts.map +1 -1
  30. package/dist/cjs/providers/index.js +1 -0
  31. package/dist/cjs/providers/withTracking.d.ts +11 -0
  32. package/dist/cjs/providers/withTracking.d.ts.map +1 -0
  33. package/dist/cjs/providers/withTracking.js +66 -0
  34. package/dist/cjs/utilities/createImpressionObserver.d.ts +8 -0
  35. package/dist/cjs/utilities/createImpressionObserver.d.ts.map +1 -0
  36. package/dist/cjs/utilities/createImpressionObserver.js +19 -0
  37. package/dist/cjs/utilities/index.d.ts +1 -0
  38. package/dist/cjs/utilities/index.d.ts.map +1 -1
  39. package/dist/cjs/utilities/index.js +1 -0
  40. package/dist/esm/components/Atoms/Icon/Icon.d.ts +1 -0
  41. package/dist/esm/components/Atoms/Icon/Icon.d.ts.map +1 -1
  42. package/dist/esm/components/Atoms/Icon/Icon.js +14 -12
  43. package/dist/esm/components/Molecules/Carousel/Carousel.d.ts +2 -0
  44. package/dist/esm/components/Molecules/Carousel/Carousel.d.ts.map +1 -1
  45. package/dist/esm/components/Molecules/Carousel/Carousel.js +35 -3
  46. package/dist/esm/components/Molecules/Result/Result.d.ts.map +1 -1
  47. package/dist/esm/components/Molecules/Result/Result.js +2 -4
  48. package/dist/esm/components/Organisms/Recommendation/Recommendation.d.ts +1 -0
  49. package/dist/esm/components/Organisms/Recommendation/Recommendation.d.ts.map +1 -1
  50. package/dist/esm/components/Organisms/RecommendationBundle/RecommendationBundle.js +1 -1
  51. package/dist/esm/components/Organisms/Results/Results.d.ts.map +1 -1
  52. package/dist/esm/components/Organisms/Results/Results.js +5 -5
  53. package/dist/esm/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.d.ts +3 -0
  54. package/dist/esm/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.d.ts.map +1 -1
  55. package/dist/esm/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.js +3 -0
  56. package/dist/esm/components/Trackers/ResultTracker/ResultTracker.d.ts.map +1 -1
  57. package/dist/esm/components/Trackers/ResultTracker/ResultTracker.js +10 -18
  58. package/dist/esm/hooks/index.d.ts +2 -0
  59. package/dist/esm/hooks/index.d.ts.map +1 -1
  60. package/dist/esm/hooks/index.js +2 -0
  61. package/dist/esm/hooks/useIntersectionAdvanced.d.ts +11 -0
  62. package/dist/esm/hooks/useIntersectionAdvanced.d.ts.map +1 -0
  63. package/dist/esm/hooks/useIntersectionAdvanced.js +70 -0
  64. package/dist/esm/hooks/useTracking.d.ts +12 -0
  65. package/dist/esm/hooks/useTracking.d.ts.map +1 -0
  66. package/dist/esm/hooks/useTracking.js +36 -0
  67. package/dist/esm/providers/index.d.ts +1 -0
  68. package/dist/esm/providers/index.d.ts.map +1 -1
  69. package/dist/esm/providers/index.js +1 -0
  70. package/dist/esm/providers/withTracking.d.ts +11 -0
  71. package/dist/esm/providers/withTracking.d.ts.map +1 -0
  72. package/dist/esm/providers/withTracking.js +45 -0
  73. package/dist/esm/utilities/createImpressionObserver.d.ts +8 -0
  74. package/dist/esm/utilities/createImpressionObserver.d.ts.map +1 -0
  75. package/dist/esm/utilities/createImpressionObserver.js +15 -0
  76. package/dist/esm/utilities/index.d.ts +1 -0
  77. package/dist/esm/utilities/index.d.ts.map +1 -1
  78. package/dist/esm/utilities/index.js +1 -0
  79. package/package.json +11 -11
@@ -0,0 +1,36 @@
1
+ import { useEffect } from 'preact/hooks';
2
+ import { createImpressionObserver } from '../utilities';
3
+ export function useTracking({ controller, result }) {
4
+ if (!controller) {
5
+ console.warn('Warning: No controller provided to useTracking');
6
+ }
7
+ if (!result) {
8
+ console.warn('Warning: No result provided to useTracking');
9
+ }
10
+ const { ref, inViewport } = createImpressionObserver();
11
+ useEffect(() => {
12
+ if (inViewport) {
13
+ // TODO: add support for disabling tracking events via config like in ResultTracker
14
+ if (result.type === 'product') {
15
+ controller?.track.product.impression(result);
16
+ }
17
+ else {
18
+ // track banner in future
19
+ }
20
+ }
21
+ }, [inViewport]);
22
+ useEffect(() => {
23
+ const currentRef = ref.current;
24
+ if (currentRef) {
25
+ currentRef.setAttribute('sstracking', 'true');
26
+ const handleClick = (e) => {
27
+ controller?.track.product.click(e, result);
28
+ };
29
+ currentRef.addEventListener('click', handleClick);
30
+ return () => {
31
+ currentRef.removeEventListener('click', handleClick);
32
+ };
33
+ }
34
+ }, [result]);
35
+ return { trackingRef: ref };
36
+ }
@@ -2,4 +2,5 @@ export * from './cache';
2
2
  export * from './controller';
3
3
  export * from './store';
4
4
  export * from './theme';
5
+ export * from './withTracking';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC"}
@@ -2,3 +2,4 @@ export * from './cache';
2
2
  export * from './controller';
3
3
  export * from './store';
4
4
  export * from './theme';
5
+ export * from './withTracking';
@@ -0,0 +1,11 @@
1
+ import { ComponentType, FunctionComponent } from 'preact';
2
+ import type { Product } from '@searchspring/snap-store-mobx';
3
+ import type { SearchController, AutocompleteController, RecommendationController } from '@searchspring/snap-controller';
4
+ interface WithTrackingProps {
5
+ controller?: SearchController | AutocompleteController | RecommendationController;
6
+ result?: Product;
7
+ [key: string]: any;
8
+ }
9
+ export declare function withTracking<Props extends WithTrackingProps>(WrappedComponent: ComponentType<Props>): FunctionComponent<Props>;
10
+ export {};
11
+ //# sourceMappingURL=withTracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withTracking.d.ts","sourceRoot":"","sources":["../../../src/providers/withTracking.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAK,aAAa,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAIxH,UAAU,iBAAiB;IAC1B,UAAU,CAAC,EAAE,gBAAgB,GAAG,sBAAsB,GAAG,wBAAwB,CAAC;IAClF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,KAAK,SAAS,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,4BA+CnG"}
@@ -0,0 +1,45 @@
1
+ import { h } from 'preact';
2
+ import { createImpressionObserver } from '../utilities';
3
+ import { useCallback } from 'preact/hooks';
4
+ export function withTracking(WrappedComponent) {
5
+ const WithTracking = (props) => {
6
+ const { controller, result, ...restProps } = props;
7
+ if (!controller) {
8
+ console.warn('Warning: No controller provided to withTracking');
9
+ }
10
+ if (!result) {
11
+ console.warn('Warning: No result provided to withTracking');
12
+ }
13
+ const additionalEffectKeys = [];
14
+ if (controller?.type === 'autocomplete') {
15
+ additionalEffectKeys.push(controller.store.state.input);
16
+ }
17
+ const { ref, inViewport } = createImpressionObserver({ additionalEffectKeys });
18
+ if (inViewport) {
19
+ // TODO: add support for disabling tracking events via config like in ResultTracker
20
+ if (result?.type === 'product') {
21
+ controller?.track.product.impression(result);
22
+ }
23
+ else {
24
+ // track banner in future
25
+ }
26
+ }
27
+ const currentRef = ref.current;
28
+ if (currentRef) {
29
+ const handleClick = useCallback((e) => {
30
+ controller?.track.product.click(e, result);
31
+ }, []);
32
+ currentRef.setAttribute('sstracking', 'true');
33
+ currentRef.removeEventListener('click', handleClick);
34
+ currentRef.addEventListener('click', handleClick);
35
+ }
36
+ const trackingProps = {
37
+ ...restProps,
38
+ controller,
39
+ result,
40
+ trackingRef: ref,
41
+ };
42
+ return h(WrappedComponent, { ...trackingProps });
43
+ };
44
+ return WithTracking;
45
+ }
@@ -0,0 +1,8 @@
1
+ import { type Ref } from 'preact/hooks';
2
+ export declare function createImpressionObserver(options?: {
3
+ additionalEffectKeys?: unknown[];
4
+ }): {
5
+ ref: Ref<HTMLElement | null>;
6
+ inViewport: boolean;
7
+ };
8
+ //# sourceMappingURL=createImpressionObserver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createImpressionObserver.d.ts","sourceRoot":"","sources":["../../../src/utilities/createImpressionObserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAU,MAAM,cAAc,CAAC;AAGhD,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE;IAAE,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,GAAG;IACzF,GAAG,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAC;CACpB,CAYA"}
@@ -0,0 +1,15 @@
1
+ import { useRef } from 'preact/hooks';
2
+ import { useIntersectionAdvanced } from '../hooks';
3
+ export function createImpressionObserver(options) {
4
+ const ref = useRef(null);
5
+ const inViewport = useIntersectionAdvanced(ref, {
6
+ fireOnce: true,
7
+ threshold: 0.75,
8
+ minVisibleTime: 1000,
9
+ additionalEffectKeys: options?.additionalEffectKeys || [],
10
+ });
11
+ return {
12
+ ref,
13
+ inViewport,
14
+ };
15
+ }
@@ -5,4 +5,5 @@ export * from './sprintf';
5
5
  export * from './LightenDarkenColor';
6
6
  export * from './shiftColor';
7
7
  export * from './defaultBadgeComponentMap';
8
+ export * from './createImpressionObserver';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utilities/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utilities/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC"}
@@ -5,3 +5,4 @@ export * from './sprintf';
5
5
  export * from './LightenDarkenColor';
6
6
  export * from './shiftColor';
7
7
  export * from './defaultBadgeComponentMap';
8
+ export * from './createImpressionObserver';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@searchspring/snap-preact-components",
3
- "version": "0.65.1",
3
+ "version": "0.66.0",
4
4
  "description": "Snap Preact Component Library",
5
5
  "author": "Searchspring",
6
6
  "license": "MIT",
@@ -29,7 +29,7 @@
29
29
  "dependencies": {
30
30
  "@cypress/react": "^8.0.0",
31
31
  "@emotion/react": "11.9.0",
32
- "@searchspring/snap-toolbox": "^0.65.1",
32
+ "@searchspring/snap-toolbox": "^0.66.0",
33
33
  "classnames": "^2.3.2",
34
34
  "cypress": "^13.7.1",
35
35
  "cypress-wait-until": "^1.7.2",
@@ -52,14 +52,14 @@
52
52
  "@babel/preset-env": "^7.21.4",
53
53
  "@babel/preset-react": "^7.18.6",
54
54
  "@babel/runtime": "^7.21.0",
55
- "@searchspring/snap-client": "^0.65.1",
56
- "@searchspring/snap-controller": "^0.65.1",
57
- "@searchspring/snap-event-manager": "^0.65.1",
58
- "@searchspring/snap-logger": "^0.65.1",
59
- "@searchspring/snap-profiler": "^0.65.1",
60
- "@searchspring/snap-store-mobx": "^0.65.1",
61
- "@searchspring/snap-tracker": "^0.65.1",
62
- "@searchspring/snap-url-manager": "^0.65.1",
55
+ "@searchspring/snap-client": "^0.66.0",
56
+ "@searchspring/snap-controller": "^0.66.0",
57
+ "@searchspring/snap-event-manager": "^0.66.0",
58
+ "@searchspring/snap-logger": "^0.66.0",
59
+ "@searchspring/snap-profiler": "^0.66.0",
60
+ "@searchspring/snap-store-mobx": "^0.66.0",
61
+ "@searchspring/snap-tracker": "^0.66.0",
62
+ "@searchspring/snap-url-manager": "^0.66.0",
63
63
  "@storybook/addon-actions": "6.4.22",
64
64
  "@storybook/addon-controls": "6.4.22",
65
65
  "@storybook/addon-docs": "6.4.22",
@@ -84,5 +84,5 @@
84
84
  "webpack-merge": "^5.8.0"
85
85
  },
86
86
  "sideEffects": false,
87
- "gitHead": "cd33cd87ad8d51302000b31bce6aa90b4b25ba89"
87
+ "gitHead": "97d209ef85cfb63946bea8ce3737b7dcb2803b89"
88
88
  }