@searchspring/snap-preact-components 0.63.5 → 0.65.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.
- package/dist/cjs/components/Atoms/Dropdown/Dropdown.d.ts +4 -0
- package/dist/cjs/components/Atoms/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/cjs/components/Atoms/Dropdown/Dropdown.js +53 -18
- package/dist/cjs/components/Molecules/OverlayBadge/OverlayBadge.d.ts.map +1 -1
- package/dist/cjs/components/Molecules/OverlayBadge/OverlayBadge.js +1 -1
- package/dist/cjs/components/Organisms/Recommendation/Recommendation.js +5 -5
- package/dist/cjs/components/Organisms/RecommendationBundle/BundleSelector.d.ts +1 -1
- package/dist/cjs/components/Organisms/RecommendationBundle/BundleSelector.d.ts.map +1 -1
- package/dist/cjs/components/Organisms/RecommendationBundle/RecommendationBundle.d.ts.map +1 -1
- package/dist/cjs/components/Organisms/RecommendationBundle/RecommendationBundle.js +33 -15
- package/dist/cjs/components/Organisms/Results/Results.d.ts.map +1 -1
- package/dist/cjs/components/Organisms/Results/Results.js +14 -25
- package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.d.ts +3 -1
- package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.d.ts.map +1 -1
- package/dist/cjs/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.js +2 -12
- package/dist/cjs/components/Trackers/ResultTracker/ResultTracker.d.ts +18 -0
- package/dist/cjs/components/Trackers/ResultTracker/ResultTracker.d.ts.map +1 -0
- package/dist/cjs/components/Trackers/ResultTracker/ResultTracker.js +68 -0
- package/dist/cjs/components/Trackers/ResultTracker/index.d.ts +2 -0
- package/dist/cjs/components/Trackers/ResultTracker/index.d.ts.map +1 -0
- package/dist/cjs/components/Trackers/{Recommendation/ResultTracker → ResultTracker}/index.js +1 -1
- package/dist/cjs/index.d.ts +3 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +6 -2
- package/dist/esm/components/Atoms/Dropdown/Dropdown.d.ts +4 -0
- package/dist/esm/components/Atoms/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/components/Atoms/Dropdown/Dropdown.js +53 -18
- package/dist/esm/components/Molecules/OverlayBadge/OverlayBadge.d.ts.map +1 -1
- package/dist/esm/components/Molecules/OverlayBadge/OverlayBadge.js +1 -0
- package/dist/esm/components/Organisms/Recommendation/Recommendation.js +5 -5
- package/dist/esm/components/Organisms/RecommendationBundle/BundleSelector.d.ts +1 -1
- package/dist/esm/components/Organisms/RecommendationBundle/BundleSelector.d.ts.map +1 -1
- package/dist/esm/components/Organisms/RecommendationBundle/RecommendationBundle.d.ts.map +1 -1
- package/dist/esm/components/Organisms/RecommendationBundle/RecommendationBundle.js +33 -15
- package/dist/esm/components/Organisms/Results/Results.d.ts.map +1 -1
- package/dist/esm/components/Organisms/Results/Results.js +3 -10
- package/dist/esm/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.d.ts +3 -1
- package/dist/esm/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.d.ts.map +1 -1
- package/dist/esm/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.js +2 -12
- package/dist/esm/components/Trackers/ResultTracker/ResultTracker.d.ts +18 -0
- package/dist/esm/components/Trackers/ResultTracker/ResultTracker.d.ts.map +1 -0
- package/dist/esm/components/Trackers/ResultTracker/ResultTracker.js +58 -0
- package/dist/esm/components/Trackers/ResultTracker/index.d.ts +2 -0
- package/dist/esm/components/Trackers/ResultTracker/index.d.ts.map +1 -0
- package/dist/esm/components/Trackers/ResultTracker/index.js +1 -0
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +4 -2
- package/package.json +11 -11
- package/dist/cjs/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.d.ts +0 -15
- package/dist/cjs/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.d.ts.map +0 -1
- package/dist/cjs/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.js +0 -59
- package/dist/cjs/components/Trackers/Recommendation/ResultTracker/index.d.ts +0 -2
- package/dist/cjs/components/Trackers/Recommendation/ResultTracker/index.d.ts.map +0 -1
- package/dist/esm/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.d.ts +0 -15
- package/dist/esm/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.d.ts.map +0 -1
- package/dist/esm/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.js +0 -51
- package/dist/esm/components/Trackers/Recommendation/ResultTracker/index.d.ts +0 -2
- package/dist/esm/components/Trackers/Recommendation/ResultTracker/index.d.ts.map +0 -1
- package/dist/esm/components/Trackers/Recommendation/ResultTracker/index.js +0 -1
|
@@ -9,10 +9,14 @@ export interface DropdownProps extends ComponentProps {
|
|
|
9
9
|
children?: ComponentChildren;
|
|
10
10
|
disabled?: boolean;
|
|
11
11
|
open?: boolean;
|
|
12
|
+
disableClick?: boolean;
|
|
12
13
|
disableOverlay?: boolean;
|
|
13
14
|
onClick?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
|
|
15
|
+
onMouseEnter?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
|
|
16
|
+
onMouseLeave?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
|
|
14
17
|
onToggle?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>, showContent: boolean) => void;
|
|
15
18
|
startOpen?: boolean;
|
|
19
|
+
toggleOnHover?: boolean;
|
|
16
20
|
disableClickOutside?: boolean;
|
|
17
21
|
disableA11y?: boolean;
|
|
18
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.d.ts","sourceRoot":"","sources":["../../../../../src/components/Atoms/Dropdown/Dropdown.tsx"],"names":[],"mappings":";AAAA,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAK,MAAM,QAAQ,CAAC;AAO9C,OAAO,EAAE,cAAc,EAAc,MAAM,gBAAgB,CAAC;AA+B5D,eAAO,MAAM,QAAQ,eAAyB,aAAa,KAAG,
|
|
1
|
+
{"version":3,"file":"Dropdown.d.ts","sourceRoot":"","sources":["../../../../../src/components/Atoms/Dropdown/Dropdown.tsx"],"names":[],"mappings":";AAAA,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAK,MAAM,QAAQ,CAAC;AAO9C,OAAO,EAAE,cAAc,EAAc,MAAM,gBAAgB,CAAC;AA+B5D,eAAO,MAAM,QAAQ,eAAyB,aAAa,KAAG,WAmJ5D,CAAC;AAEH,MAAM,WAAW,aAAc,SAAQ,cAAc;IACpD,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IAC/B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC;IACxE,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC;IAC7E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC;IAC7E,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB"}
|
|
@@ -41,32 +41,37 @@ export const Dropdown = observer((properties) => {
|
|
|
41
41
|
...properties,
|
|
42
42
|
...properties.theme?.components?.dropdown,
|
|
43
43
|
};
|
|
44
|
-
const { button, content, children, disabled, open, disableOverlay, onClick, onToggle, startOpen, disableClickOutside, disableA11y, disableStyles, className, style, } = props;
|
|
45
|
-
let
|
|
44
|
+
const { button, content, children, disabled, open, toggleOnHover, onMouseEnter, onMouseLeave, disableClick, disableOverlay, onClick, onToggle, startOpen, disableClickOutside, disableA11y, disableStyles, className, style, } = props;
|
|
45
|
+
let dropdownOpen, setDropdownOpen;
|
|
46
46
|
const stateful = open === undefined;
|
|
47
47
|
if (stateful) {
|
|
48
|
-
[
|
|
48
|
+
[dropdownOpen, setDropdownOpen] = useState(startOpen);
|
|
49
49
|
}
|
|
50
50
|
else {
|
|
51
|
-
|
|
51
|
+
dropdownOpen = open;
|
|
52
52
|
}
|
|
53
|
+
// state to track touch interactions
|
|
54
|
+
const [isTouchInteraction, setIsTouchInteraction] = useState(false);
|
|
53
55
|
let innerRef;
|
|
54
56
|
if (!disableClickOutside) {
|
|
55
57
|
innerRef = useClickOutside((e) => {
|
|
56
|
-
if (
|
|
58
|
+
if (dropdownOpen) {
|
|
57
59
|
if (!disabled) {
|
|
58
|
-
stateful &&
|
|
60
|
+
stateful && setDropdownOpen && setDropdownOpen(false);
|
|
59
61
|
onToggle && onToggle(e, false);
|
|
60
62
|
}
|
|
61
63
|
}
|
|
62
64
|
});
|
|
63
65
|
}
|
|
64
|
-
const
|
|
66
|
+
const toggleOpenDropdown = (e, state) => {
|
|
65
67
|
if (stateful) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
setDropdownOpen &&
|
|
69
|
+
setDropdownOpen((prev) => {
|
|
70
|
+
const newState = state ?? !prev;
|
|
71
|
+
if (newState != prev) {
|
|
72
|
+
onToggle && onToggle(e, newState);
|
|
73
|
+
}
|
|
74
|
+
return newState;
|
|
70
75
|
});
|
|
71
76
|
}
|
|
72
77
|
};
|
|
@@ -77,15 +82,45 @@ export const Dropdown = observer((properties) => {
|
|
|
77
82
|
else if (style) {
|
|
78
83
|
styling.css = [style];
|
|
79
84
|
}
|
|
85
|
+
const hoverProps = {
|
|
86
|
+
onMouseEnter: (toggleOnHover || onMouseEnter) &&
|
|
87
|
+
((e) => {
|
|
88
|
+
// skip if it's a touch interaction
|
|
89
|
+
if (isTouchInteraction)
|
|
90
|
+
return;
|
|
91
|
+
if (toggleOnHover && !disabled) {
|
|
92
|
+
toggleOpenDropdown(e, true);
|
|
93
|
+
}
|
|
94
|
+
onMouseEnter && onMouseEnter(e);
|
|
95
|
+
}),
|
|
96
|
+
onMouseLeave: (toggleOnHover || onMouseLeave) &&
|
|
97
|
+
((e) => {
|
|
98
|
+
// skip if it's a touch interaction
|
|
99
|
+
if (isTouchInteraction)
|
|
100
|
+
return;
|
|
101
|
+
if (toggleOnHover && !disabled) {
|
|
102
|
+
toggleOpenDropdown(e, false);
|
|
103
|
+
}
|
|
104
|
+
onMouseLeave && onMouseLeave(e);
|
|
105
|
+
}),
|
|
106
|
+
};
|
|
80
107
|
return (jsx(CacheProvider, null,
|
|
81
|
-
jsx("div", { ...styling, className: classnames('ss__dropdown', { 'ss__dropdown--open':
|
|
82
|
-
jsx("div", { className: "ss__dropdown__button", ref: (e) => (!disableA11y ? useA11y(e) : null), "aria-expanded":
|
|
83
|
-
|
|
84
|
-
|
|
108
|
+
jsx("div", { ...styling, className: classnames('ss__dropdown', { 'ss__dropdown--open': dropdownOpen }, className), ref: innerRef, ...hoverProps },
|
|
109
|
+
jsx("div", { className: "ss__dropdown__button", ref: (e) => (!disableA11y ? useA11y(e) : null), "aria-expanded": dropdownOpen, role: "button", onTouchStart: () => {
|
|
110
|
+
// mark this as a touch interaction to avoid hover state conflicts
|
|
111
|
+
setIsTouchInteraction(true);
|
|
112
|
+
}, onClick: (e) => {
|
|
113
|
+
if (!disabled && !disableClick) {
|
|
114
|
+
toggleOpenDropdown(e);
|
|
85
115
|
onClick && onClick(e);
|
|
86
116
|
}
|
|
87
|
-
|
|
117
|
+
// reset touch interaction after a short delay
|
|
118
|
+
// this gives time for the click handler to complete before allowing hover events again
|
|
119
|
+
setTimeout(() => {
|
|
120
|
+
setIsTouchInteraction(false);
|
|
121
|
+
}, 300);
|
|
122
|
+
} }, cloneWithProps(button, { open: dropdownOpen, toggleOpen: toggleOpenDropdown })),
|
|
88
123
|
jsx("div", { className: "ss__dropdown__content" },
|
|
89
|
-
cloneWithProps(content, { open:
|
|
90
|
-
cloneWithProps(children, { open:
|
|
124
|
+
cloneWithProps(content, { open: dropdownOpen, toggleOpen: toggleOpenDropdown }),
|
|
125
|
+
cloneWithProps(children, { open: dropdownOpen, toggleOpen: toggleOpenDropdown })))));
|
|
91
126
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverlayBadge.d.ts","sourceRoot":"","sources":["../../../../../src/components/Molecules/OverlayBadge/OverlayBadge.tsx"],"names":[],"mappings":";AAAA,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAe,MAAM,QAAQ,CAAC;AAOxD,OAAO,EAAE,cAAc,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACxH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"OverlayBadge.d.ts","sourceRoot":"","sources":["../../../../../src/components/Molecules/OverlayBadge/OverlayBadge.tsx"],"names":[],"mappings":";AAAA,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAe,MAAM,QAAQ,CAAC;AAOxD,OAAO,EAAE,cAAc,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACxH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AA+C7D,eAAO,MAAM,YAAY,eAAyB,iBAAiB,KAAG,WAuFpE,CAAC;AAEH,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACxD,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,gBAAgB,GAAG,sBAAsB,GAAG,wBAAwB,CAAC;IACjF,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -12,7 +12,7 @@ import { useIntersection } from '../../../hooks';
|
|
|
12
12
|
import { useTheme, CacheProvider } from '../../../providers';
|
|
13
13
|
import { useDisplaySettings } from '../../../hooks/useDisplaySettings';
|
|
14
14
|
import { RecommendationProfileTracker } from '../../Trackers/Recommendation/ProfileTracker';
|
|
15
|
-
import {
|
|
15
|
+
import { ResultTracker } from '../../Trackers/ResultTracker';
|
|
16
16
|
const CSS = {
|
|
17
17
|
recommendation: ({ vertical }) => css({
|
|
18
18
|
height: vertical ? '100%' : undefined,
|
|
@@ -103,11 +103,11 @@ export const Recommendation = observer((properties) => {
|
|
|
103
103
|
jsx("div", { ...styling, className: classnames('ss__recommendation', className), ref: recsRef }, isVisible ? (jsx(RecommendationProfileTracker, { controller: controller },
|
|
104
104
|
title && jsx("h3", { className: "ss__recommendation__title" }, title),
|
|
105
105
|
jsx(Carousel, { prevButton: prevButton, nextButton: nextButton, hideButtons: hideButtons, loop: loop, pagination: pagination, breakpoints: breakpoints, ...subProps.carousel, ...additionalProps, ...displaySettings }, Array.isArray(children) && children.length
|
|
106
|
-
? children.map((child, idx) => (jsx(
|
|
107
|
-
: resultsToRender.map((result) => (jsx(
|
|
106
|
+
? children.map((child, idx) => (jsx(ResultTracker, { controller: controller, result: resultsToRender[idx] }, child)))
|
|
107
|
+
: resultsToRender.map((result) => (jsx(ResultTracker, { controller: controller, result: result },
|
|
108
108
|
jsx(Result, { ...subProps.result, controller: controller, result: result }))))))) : (jsx(RecommendationProfileTracker, { controller: controller }, Array.isArray(children) && children.length
|
|
109
|
-
? children.map((child, idx) => (jsx(
|
|
109
|
+
? children.map((child, idx) => (jsx(ResultTracker, { controller: controller, result: resultsToRender[idx] },
|
|
110
110
|
jsx(Fragment, null))))
|
|
111
|
-
: resultsToRender.map((result) => (jsx(
|
|
111
|
+
: resultsToRender.map((result) => (jsx(ResultTracker, { controller: controller, result: result },
|
|
112
112
|
jsx(Fragment, null))))))))) : (jsx(Fragment, null));
|
|
113
113
|
});
|
|
@@ -15,7 +15,7 @@ export interface BundleSelectorProps extends ComponentProps {
|
|
|
15
15
|
seedText?: string;
|
|
16
16
|
seed?: boolean;
|
|
17
17
|
hideCheckboxes?: boolean;
|
|
18
|
-
onCheck?: () => void;
|
|
18
|
+
onCheck?: (e: React.MouseEvent<HTMLElement, MouseEvent>) => void;
|
|
19
19
|
icon?: string | Partial<IconProps> | boolean;
|
|
20
20
|
}
|
|
21
21
|
//# sourceMappingURL=BundleSelector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BundleSelector.d.ts","sourceRoot":"","sources":["../../../../../src/components/Organisms/RecommendationBundle/BundleSelector.tsx"],"names":[],"mappings":";AAAA,eAAe;AACf,OAAO,EAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAK9C,OAAO,EAAY,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAQ,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,eAAO,MAAM,cAAc,eAAyB,mBAAmB,KAAG,WAmDxE,CAAC;AAEH,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IAC1D,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"BundleSelector.d.ts","sourceRoot":"","sources":["../../../../../src/components/Organisms/RecommendationBundle/BundleSelector.tsx"],"names":[],"mappings":";AAAA,eAAe;AACf,OAAO,EAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAK9C,OAAO,EAAY,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAQ,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,eAAO,MAAM,cAAc,eAAyB,mBAAmB,KAAG,WAmDxE,CAAC;AAEH,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IAC1D,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC;IACjE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;CAC7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecommendationBundle.d.ts","sourceRoot":"","sources":["../../../../../src/components/Organisms/RecommendationBundle/RecommendationBundle.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAY,aAAa,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAIpF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAc,MAAM,gBAAgB,CAAC;AAI9E,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAyG7D,eAAO,MAAM,oBAAoB,eAAyB,yBAAyB,KAAG,
|
|
1
|
+
{"version":3,"file":"RecommendationBundle.d.ts","sourceRoot":"","sources":["../../../../../src/components/Organisms/RecommendationBundle/RecommendationBundle.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAY,aAAa,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAIpF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAc,MAAM,gBAAgB,CAAC;AAI9E,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAyG7D,eAAO,MAAM,oBAAoB,eAAyB,yBAAyB,KAAG,WA8fpF,CAAC;AAEH,KAAK,mBAAmB,GAAG;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAE3B,MAAM,WAAW,yBAA0B,SAAQ,cAAc;IAChE,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,wBAAwB,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACvD,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,eAAe,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,UAAU,CAAC,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACF"}
|
|
@@ -11,7 +11,7 @@ import { cloneWithProps, defined } from '../../../utilities';
|
|
|
11
11
|
import { useTheme, CacheProvider } from '../../../providers';
|
|
12
12
|
import { useDisplaySettings } from '../../../hooks/useDisplaySettings';
|
|
13
13
|
import { RecommendationProfileTracker } from '../../Trackers/Recommendation/ProfileTracker';
|
|
14
|
-
import {
|
|
14
|
+
import { ResultTracker } from '../../Trackers/ResultTracker';
|
|
15
15
|
import { BundleSelector } from './BundleSelector';
|
|
16
16
|
import { BundledCTA } from './BundleCTA';
|
|
17
17
|
import { useIntersection } from '../../../hooks';
|
|
@@ -276,7 +276,7 @@ export const RecommendationBundle = observer((properties) => {
|
|
|
276
276
|
};
|
|
277
277
|
const addToCart = (e) => {
|
|
278
278
|
// add to cart tracking
|
|
279
|
-
controller.track.
|
|
279
|
+
controller.track.bundle.addToCart(selectedItems);
|
|
280
280
|
//call the function passed
|
|
281
281
|
onAddToCart && onAddToCart(e, selectedItems);
|
|
282
282
|
};
|
|
@@ -311,8 +311,11 @@ export const RecommendationBundle = observer((properties) => {
|
|
|
311
311
|
}) },
|
|
312
312
|
carouselEnabled ? (jsx(Fragment, null,
|
|
313
313
|
!seedInCarousel && !hideSeed && (jsx("div", { className: "ss__recommendation-bundle__wrapper__seed-container" },
|
|
314
|
-
jsx(
|
|
315
|
-
jsx(BundleSelector, { seedText: seedText, seed: true, onCheck: () =>
|
|
314
|
+
jsx(ResultTracker, { controller: controller, result: seed, track: { impression: false } },
|
|
315
|
+
jsx(BundleSelector, { seedText: seedText, seed: true, onCheck: (e) => {
|
|
316
|
+
e.stopPropagation();
|
|
317
|
+
onProductSelect(seed);
|
|
318
|
+
}, checked: selectedItems.findIndex((item) => item.id == seed.id) > -1, icon: separatorIcon, hideCheckboxes: hideCheckboxes, theme: props.theme, ref: seedRef }, resultComponent ? (cloneWithProps(resultComponent, {
|
|
316
319
|
result: seed,
|
|
317
320
|
seed: true,
|
|
318
321
|
selected: selectedItems.findIndex((item) => item.id == seed.id) > -1,
|
|
@@ -325,35 +328,50 @@ export const RecommendationBundle = observer((properties) => {
|
|
|
325
328
|
.map((result, idx) => {
|
|
326
329
|
const selected = selectedItems.findIndex((item) => item.id == result.id) > -1;
|
|
327
330
|
if (idx == 0 && !hideSeed) {
|
|
328
|
-
return (jsx(
|
|
329
|
-
jsx(BundleSelector, { seedText: seedText, seed: true, icon: separatorIcon, onCheck: () =>
|
|
331
|
+
return (jsx(ResultTracker, { controller: controller, result: result, track: { impression: false } },
|
|
332
|
+
jsx(BundleSelector, { seedText: seedText, seed: true, icon: separatorIcon, onCheck: (e) => {
|
|
333
|
+
e.stopPropagation();
|
|
334
|
+
onProductSelect(result);
|
|
335
|
+
}, checked: selected, hideCheckboxes: hideCheckboxes, theme: props.theme }, resultComponent ? (cloneWithProps(resultComponent, { result: result, seed: true, selected, onProductSelect })) : (jsx(Result, { ...subProps.result, controller: controller, result: result })))));
|
|
330
336
|
}
|
|
331
337
|
else {
|
|
332
|
-
return (jsx(
|
|
333
|
-
jsx(BundleSelector, { icon: separatorIconSeedOnly ? false : separatorIcon, onCheck: () =>
|
|
338
|
+
return (jsx(ResultTracker, { controller: controller, result: result },
|
|
339
|
+
jsx(BundleSelector, { icon: separatorIconSeedOnly ? false : separatorIcon, onCheck: (e) => {
|
|
340
|
+
e.stopPropagation();
|
|
341
|
+
onProductSelect(result);
|
|
342
|
+
}, checked: selected, hideCheckboxes: hideCheckboxes, theme: props.theme, className: idx + 1 == resultsToRender.length ? 'ss__recommendation-bundle__wrapper__selector--last' : '' }, resultComponent ? (cloneWithProps(resultComponent, { result: result, seed: false, selected, onProductSelect })) : (jsx(Result, { ...subProps.result, controller: controller, result: result })))));
|
|
334
343
|
}
|
|
335
344
|
})
|
|
336
345
|
: resultsToRender
|
|
337
346
|
.filter((result, idx) => idx !== 0)
|
|
338
347
|
.map((result, idx, results) => {
|
|
339
348
|
const selected = selectedItems.findIndex((item) => item.id == result.id) > -1;
|
|
340
|
-
return (jsx(
|
|
341
|
-
jsx(BundleSelector, { icon: separatorIconSeedOnly ? false : separatorIcon, onCheck: () =>
|
|
349
|
+
return (jsx(ResultTracker, { controller: controller, result: result },
|
|
350
|
+
jsx(BundleSelector, { icon: separatorIconSeedOnly ? false : separatorIcon, onCheck: (e) => {
|
|
351
|
+
e.stopPropagation();
|
|
352
|
+
onProductSelect(result);
|
|
353
|
+
}, checked: selected, hideCheckboxes: hideCheckboxes, theme: props.theme, className: idx + 1 == results.length ? 'ss__recommendation-bundle__wrapper__selector--last' : '' }, resultComponent ? (cloneWithProps(resultComponent, { result: result, seed: false, selected, onProductSelect })) : (jsx(Result, { ...subProps.result, controller: controller, result: result })))));
|
|
342
354
|
}))))) : (resultsToRender
|
|
343
355
|
.filter((result, idx) => (hideSeed && idx == 0 ? false : true))
|
|
344
356
|
.map((result, idx) => {
|
|
345
357
|
const selected = selectedItems.findIndex((item) => item.id == result.id) > -1;
|
|
346
358
|
if (idx == 0 && !hideSeed) {
|
|
347
|
-
return (jsx(
|
|
348
|
-
jsx(BundleSelector, { seedText: seedText, seed: true, icon: separatorIcon, onCheck: () =>
|
|
359
|
+
return (jsx(ResultTracker, { controller: controller, result: result, track: { impression: false } },
|
|
360
|
+
jsx(BundleSelector, { seedText: seedText, seed: true, icon: separatorIcon, onCheck: (e) => {
|
|
361
|
+
e.stopPropagation();
|
|
362
|
+
onProductSelect(result);
|
|
363
|
+
}, checked: selected, hideCheckboxes: hideCheckboxes, theme: props.theme }, resultComponent ? (cloneWithProps(resultComponent, { result: result, seed: true, selected, onProductSelect })) : (jsx(Result, { ...subProps.result, controller: controller, result: result })))));
|
|
349
364
|
}
|
|
350
365
|
else {
|
|
351
|
-
return (jsx(
|
|
352
|
-
jsx(BundleSelector, { icon: separatorIconSeedOnly ? false : separatorIcon, onCheck: () =>
|
|
366
|
+
return (jsx(ResultTracker, { controller: controller, result: result },
|
|
367
|
+
jsx(BundleSelector, { icon: separatorIconSeedOnly ? false : separatorIcon, onCheck: (e) => {
|
|
368
|
+
e.stopPropagation();
|
|
369
|
+
onProductSelect(result);
|
|
370
|
+
}, checked: selected, hideCheckboxes: hideCheckboxes, theme: props.theme, className: idx + 1 == resultsToRender.length ? 'ss__recommendation-bundle__wrapper__selector--last' : '' }, resultComponent ? (cloneWithProps(resultComponent, { result: result, seed: false, selected, onProductSelect })) : (jsx(Result, { ...subProps.result, controller: controller, result: result })))));
|
|
353
371
|
}
|
|
354
372
|
})),
|
|
355
373
|
ctaInline && (jsx(BundledCTA, { ctaSlot: ctaSlot, cartStore: cartStore, onAddToCart: (e) => addToCart(e), ctaButtonText: ctaButtonText, ctaButtonSuccessText: ctaButtonSuccessText, ctaButtonSuccessTimeout: ctaButtonSuccessTimeout, ctaIcon: ctaIcon }))),
|
|
356
|
-
!ctaInline && (jsx(BundledCTA, { ctaSlot: ctaSlot, cartStore: cartStore, onAddToCart: (e) => addToCart(e), ctaButtonText: ctaButtonText, ctaButtonSuccessText: ctaButtonSuccessText, ctaButtonSuccessTimeout: ctaButtonSuccessTimeout, ctaIcon: ctaIcon })))) : (jsx(RecommendationProfileTracker, { controller: controller }, resultsToRender.map((result) => (jsx(
|
|
374
|
+
!ctaInline && (jsx(BundledCTA, { ctaSlot: ctaSlot, cartStore: cartStore, onAddToCart: (e) => addToCart(e), ctaButtonText: ctaButtonText, ctaButtonSuccessText: ctaButtonSuccessText, ctaButtonSuccessTimeout: ctaButtonSuccessTimeout, ctaIcon: ctaIcon })))) : (jsx(RecommendationProfileTracker, { controller: controller }, resultsToRender.map((result) => (jsx(ResultTracker, { controller: controller, result: result },
|
|
357
375
|
jsx(Fragment, null))))))))) : (jsx(Fragment, null));
|
|
358
376
|
return jsx(Fragment, null);
|
|
359
377
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Results.d.ts","sourceRoot":"","sources":["../../../../../src/components/Organisms/Results/Results.tsx"],"names":[],"mappings":";AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACxH,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,+BAA+B,CAAC;AAIxF,OAAO,EAAE,cAAc,EAAU,UAAU,EAAE,gBAAgB,EAAc,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"Results.d.ts","sourceRoot":"","sources":["../../../../../src/components/Organisms/Results/Results.tsx"],"names":[],"mappings":";AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACxH,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,+BAA+B,CAAC;AAIxF,OAAO,EAAE,cAAc,EAAU,UAAU,EAAE,gBAAgB,EAAc,MAAM,gBAAgB,CAAC;AA+BlG,eAAO,MAAM,OAAO,eAAyB,WAAW,KAAG,WA8GzD,CAAC;AAEH,MAAM,WAAW,WAAY,SAAQ,cAAc;IAClD,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,UAAU,CAAC,EAAE,gBAAgB,GAAG,sBAAsB,GAAG,wBAAwB,CAAC;CAClF"}
|
|
@@ -11,6 +11,7 @@ import { Layout } from '../../../types';
|
|
|
11
11
|
import { defined } from '../../../utilities';
|
|
12
12
|
import { useTheme, CacheProvider } from '../../../providers';
|
|
13
13
|
import { useDisplaySettings } from '../../../hooks/useDisplaySettings';
|
|
14
|
+
import { ResultTracker } from '../../Trackers/ResultTracker';
|
|
14
15
|
const CSS = {
|
|
15
16
|
results: ({ columns, gapSize }) => css({
|
|
16
17
|
display: 'flex',
|
|
@@ -22,14 +23,6 @@ const CSS = {
|
|
|
22
23
|
boxSizing: 'border-box',
|
|
23
24
|
flex: '0 1 auto',
|
|
24
25
|
width: `calc(${100 / columns}% - (${columns - 1} * ${gapSize} / ${columns} ) )`,
|
|
25
|
-
marginRight: gapSize,
|
|
26
|
-
marginBottom: gapSize,
|
|
27
|
-
[`&:nth-of-type(${columns}n)`]: {
|
|
28
|
-
marginRight: '0',
|
|
29
|
-
},
|
|
30
|
-
[`&:nth-last-of-type(-n+${columns})`]: {
|
|
31
|
-
marginBottom: '0',
|
|
32
|
-
},
|
|
33
26
|
},
|
|
34
27
|
'@supports (display: grid)': {
|
|
35
28
|
display: 'grid',
|
|
@@ -115,12 +108,12 @@ export const Results = observer((properties) => {
|
|
|
115
108
|
styling.css = [style];
|
|
116
109
|
}
|
|
117
110
|
return results?.length ? (jsx(CacheProvider, null,
|
|
118
|
-
jsx("div", { ...styling, className: classnames('ss__results', `ss__results-${props.layout}`, className) }, results.map((result) => (() => {
|
|
111
|
+
jsx("div", { ...styling, className: classnames('ss__results', `ss__results-${props.layout}`, className) }, results.map((result) => (jsx(ResultTracker, { result: result, controller: controller }, (() => {
|
|
119
112
|
switch (result.type) {
|
|
120
113
|
case ContentType.BANNER:
|
|
121
114
|
return jsx(InlineBanner, { ...subProps.inlineBanner, key: result.id, banner: result, layout: props.layout });
|
|
122
115
|
default:
|
|
123
116
|
return (jsx(Result, { key: result.id, ...subProps.result, result: result, layout: props.layout, controller: controller }));
|
|
124
117
|
}
|
|
125
|
-
})())))) : (jsx(Fragment, null));
|
|
118
|
+
})())))))) : (jsx(Fragment, null));
|
|
126
119
|
});
|
package/dist/esm/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
+
/** @jsx jsx */
|
|
3
|
+
import { ComponentChildren } from 'preact';
|
|
2
4
|
import type { RecommendationController } from '@searchspring/snap-controller';
|
|
3
5
|
import { ComponentProps } from '../../../../types';
|
|
4
6
|
export declare const RecommendationProfileTracker: (properties: RecommendationProfileTrackerProps) => JSX.Element;
|
|
5
7
|
export interface RecommendationProfileTrackerProps extends ComponentProps {
|
|
6
|
-
children:
|
|
8
|
+
children: ComponentChildren;
|
|
7
9
|
controller: RecommendationController;
|
|
8
10
|
}
|
|
9
11
|
//# sourceMappingURL=RecommendationProfileTracker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecommendationProfileTracker.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"RecommendationProfileTracker.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.tsx"],"names":[],"mappings":";AAAA,eAAe;AACf,OAAO,EAAE,iBAAiB,EAA6B,MAAM,QAAQ,CAAC;AAItE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AAO/D,eAAO,MAAM,4BAA4B,eAAyB,iCAAiC,KAAG,WA8BpG,CAAC;AAEH,MAAM,WAAW,iCAAkC,SAAQ,cAAc;IACxE,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,wBAAwB,CAAC;CACrC"}
|
package/dist/esm/components/Trackers/Recommendation/ProfileTracker/RecommendationProfileTracker.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/** @jsx jsx */
|
|
2
2
|
import { Fragment, toChildArray } from 'preact';
|
|
3
3
|
import { jsx, css } from '@emotion/react';
|
|
4
|
-
import { useRef } from 'preact/hooks';
|
|
5
4
|
import { observer } from 'mobx-react';
|
|
6
5
|
import { useTheme } from '../../../../providers';
|
|
7
|
-
import { useIntersection } from '../../../../hooks';
|
|
8
6
|
import classnames from 'classnames';
|
|
9
7
|
const CSS = {
|
|
10
8
|
RecommendationProfileTracker: () => css({}),
|
|
@@ -19,16 +17,8 @@ export const RecommendationProfileTracker = observer((properties) => {
|
|
|
19
17
|
...properties,
|
|
20
18
|
...properties.theme?.components?.RecommendationProfileTracker,
|
|
21
19
|
};
|
|
22
|
-
const { children,
|
|
20
|
+
const { children, className, style, disableStyles } = props;
|
|
23
21
|
const childs = toChildArray(children);
|
|
24
|
-
// do impression tracking for "profile"
|
|
25
|
-
const componentRef = useRef(null);
|
|
26
|
-
const inViewport = useIntersection(componentRef, '0px');
|
|
27
|
-
if (inViewport) {
|
|
28
|
-
controller.track.impression();
|
|
29
|
-
}
|
|
30
|
-
// takes care of rendering profile
|
|
31
|
-
childs.length && controller.track.render();
|
|
32
22
|
const styling = {};
|
|
33
23
|
if (!disableStyles) {
|
|
34
24
|
styling.css = [CSS.RecommendationProfileTracker(), style];
|
|
@@ -36,5 +26,5 @@ export const RecommendationProfileTracker = observer((properties) => {
|
|
|
36
26
|
else if (style) {
|
|
37
27
|
styling.css = [style];
|
|
38
28
|
}
|
|
39
|
-
return childs.length ? (jsx("div", { className: classnames('ss__recommendation-profile-tracker', className),
|
|
29
|
+
return childs.length ? (jsx("div", { className: classnames('ss__recommendation-profile-tracker', className), ...styling }, children)) : (jsx(Fragment, null));
|
|
40
30
|
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
/** @jsx jsx */
|
|
3
|
+
import { ComponentChildren } from 'preact';
|
|
4
|
+
import type { AutocompleteController, RecommendationController, SearchController } from '@searchspring/snap-controller';
|
|
5
|
+
import { ComponentProps } from '../../../types';
|
|
6
|
+
import type { Banner, Product } from '@searchspring/snap-store-mobx';
|
|
7
|
+
export declare const ResultTracker: (properties: ResultTrackerProps) => JSX.Element;
|
|
8
|
+
export interface ResultTrackerProps extends ComponentProps {
|
|
9
|
+
children: ComponentChildren;
|
|
10
|
+
result: Product | Banner;
|
|
11
|
+
controller: SearchController | AutocompleteController | RecommendationController;
|
|
12
|
+
track?: {
|
|
13
|
+
render?: boolean;
|
|
14
|
+
impression?: boolean;
|
|
15
|
+
click?: boolean;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=ResultTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResultTracker.d.ts","sourceRoot":"","sources":["../../../../../src/components/Trackers/ResultTracker/ResultTracker.tsx"],"names":[],"mappings":";AAAA,eAAe;AACf,OAAO,EAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAM9C,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACxH,OAAO,EAAE,cAAc,EAAc,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAOrE,eAAO,MAAM,aAAa,eAAyB,kBAAkB,KAAG,WA+DtE,CAAC;AAEH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACzD,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,UAAU,EAAE,gBAAgB,GAAG,sBAAsB,GAAG,wBAAwB,CAAC;IACjF,KAAK,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx, css } from '@emotion/react';
|
|
2
|
+
import { useRef, useEffect } from 'preact/hooks';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
4
|
+
import { useTheme } from '../../../providers';
|
|
5
|
+
import { useIntersection } from '../../../hooks';
|
|
6
|
+
import classnames from 'classnames';
|
|
7
|
+
const CSS = {
|
|
8
|
+
ResultTracker: () => css({}),
|
|
9
|
+
};
|
|
10
|
+
export const ResultTracker = observer((properties) => {
|
|
11
|
+
const globalTheme = useTheme();
|
|
12
|
+
const defaultTrack = {
|
|
13
|
+
render: true,
|
|
14
|
+
impression: true,
|
|
15
|
+
click: true,
|
|
16
|
+
};
|
|
17
|
+
const props = {
|
|
18
|
+
// default props
|
|
19
|
+
// global theme
|
|
20
|
+
...globalTheme?.components?.ResultTracker,
|
|
21
|
+
// props
|
|
22
|
+
...properties,
|
|
23
|
+
...properties.theme?.components?.ResultTracker,
|
|
24
|
+
};
|
|
25
|
+
const { children, result, track, controller, className, disableStyles, style } = props;
|
|
26
|
+
const mergedTrack = {
|
|
27
|
+
...defaultTrack,
|
|
28
|
+
...track,
|
|
29
|
+
};
|
|
30
|
+
const resultRef = useRef(null);
|
|
31
|
+
const resultInViewport = useIntersection(resultRef, '0px');
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (mergedTrack.render) {
|
|
34
|
+
if (result.type === 'product') {
|
|
35
|
+
controller?.track?.product?.render(result);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}, [result]);
|
|
39
|
+
if (resultInViewport && mergedTrack.impression) {
|
|
40
|
+
if (result.type === 'product' && controller?.track) {
|
|
41
|
+
controller?.track?.product?.impression(result);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const styling = {};
|
|
45
|
+
if (!disableStyles) {
|
|
46
|
+
styling.css = [CSS.ResultTracker(), style];
|
|
47
|
+
}
|
|
48
|
+
else if (style) {
|
|
49
|
+
styling.css = [style];
|
|
50
|
+
}
|
|
51
|
+
return (jsx("div", { className: classnames('ss__result-tracker', `ss__${controller?.type}-result-tracker`, className), onClick: (e) => {
|
|
52
|
+
if (mergedTrack.click) {
|
|
53
|
+
if (result.type === 'product') {
|
|
54
|
+
controller?.track?.product?.click(e, result);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}, ref: resultRef, ...styling }, children));
|
|
58
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/Trackers/ResultTracker/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ResultTracker';
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -13,8 +13,6 @@ export * from './components/Atoms/Merchandising';
|
|
|
13
13
|
export * from './components/Atoms/Overlay';
|
|
14
14
|
export * from './components/Atoms/Price';
|
|
15
15
|
export * from './components/Atoms/Skeleton';
|
|
16
|
-
export * from './components/Trackers/Recommendation/ResultTracker';
|
|
17
|
-
export * from './components/Trackers/Recommendation/ProfileTracker';
|
|
18
16
|
export * from './components/Molecules/CalloutBadge';
|
|
19
17
|
export * from './components/Molecules/Carousel';
|
|
20
18
|
export * from './components/Molecules/Checkbox';
|
|
@@ -42,6 +40,9 @@ export * from './components/Organisms/FilterSummary';
|
|
|
42
40
|
export * from './components/Organisms/Recommendation';
|
|
43
41
|
export * from './components/Organisms/RecommendationBundle';
|
|
44
42
|
export * from './components/Organisms/Results';
|
|
43
|
+
export * from './components/Trackers/Recommendation/ProfileTracker';
|
|
44
|
+
export * from './components/Trackers/ResultTracker';
|
|
45
|
+
export { ResultTracker as RecommendationResultTracker, ResultTrackerProps as RecommendationResultTrackerProps, } from './components/Trackers/ResultTracker';
|
|
45
46
|
export * from './hooks';
|
|
46
47
|
export * from './providers';
|
|
47
48
|
export * from './toolbox';
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,yCAAyC,CAAC;AACxD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AAGxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,gCAAgC,CAAC;AAG/C,cAAc,qDAAqD,CAAC;AACpE,cAAc,qCAAqC,CAAC;AACpD,OAAO,EACN,aAAa,IAAI,2BAA2B,EAC5C,kBAAkB,IAAI,gCAAgC,GACtD,MAAM,qCAAqC,CAAC;AAG7C,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAG5B,cAAc,WAAW,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -14,8 +14,6 @@ export * from './components/Atoms/Merchandising';
|
|
|
14
14
|
export * from './components/Atoms/Overlay';
|
|
15
15
|
export * from './components/Atoms/Price';
|
|
16
16
|
export * from './components/Atoms/Skeleton';
|
|
17
|
-
export * from './components/Trackers/Recommendation/ResultTracker';
|
|
18
|
-
export * from './components/Trackers/Recommendation/ProfileTracker';
|
|
19
17
|
// MOLECULES
|
|
20
18
|
export * from './components/Molecules/CalloutBadge';
|
|
21
19
|
export * from './components/Molecules/Carousel';
|
|
@@ -45,6 +43,10 @@ export * from './components/Organisms/FilterSummary';
|
|
|
45
43
|
export * from './components/Organisms/Recommendation';
|
|
46
44
|
export * from './components/Organisms/RecommendationBundle';
|
|
47
45
|
export * from './components/Organisms/Results';
|
|
46
|
+
// TRACKERS
|
|
47
|
+
export * from './components/Trackers/Recommendation/ProfileTracker';
|
|
48
|
+
export * from './components/Trackers/ResultTracker';
|
|
49
|
+
export { ResultTracker as RecommendationResultTracker, } from './components/Trackers/ResultTracker';
|
|
48
50
|
// HOOKS
|
|
49
51
|
export * from './hooks';
|
|
50
52
|
// PROVIDERS
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@searchspring/snap-preact-components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.65.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.
|
|
32
|
+
"@searchspring/snap-toolbox": "^0.65.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.
|
|
56
|
-
"@searchspring/snap-controller": "^0.
|
|
57
|
-
"@searchspring/snap-event-manager": "^0.
|
|
58
|
-
"@searchspring/snap-logger": "^0.
|
|
59
|
-
"@searchspring/snap-profiler": "^0.
|
|
60
|
-
"@searchspring/snap-store-mobx": "^0.
|
|
61
|
-
"@searchspring/snap-tracker": "^0.
|
|
62
|
-
"@searchspring/snap-url-manager": "^0.
|
|
55
|
+
"@searchspring/snap-client": "^0.65.0",
|
|
56
|
+
"@searchspring/snap-controller": "^0.65.0",
|
|
57
|
+
"@searchspring/snap-event-manager": "^0.65.0",
|
|
58
|
+
"@searchspring/snap-logger": "^0.65.0",
|
|
59
|
+
"@searchspring/snap-profiler": "^0.65.0",
|
|
60
|
+
"@searchspring/snap-store-mobx": "^0.65.0",
|
|
61
|
+
"@searchspring/snap-tracker": "^0.65.0",
|
|
62
|
+
"@searchspring/snap-url-manager": "^0.65.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": "
|
|
87
|
+
"gitHead": "e96fc4426a64178a94a8ca603ec834bdca020fdb"
|
|
88
88
|
}
|
package/dist/cjs/components/Trackers/Recommendation/ResultTracker/RecommendationResultTracker.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import type { RecommendationController } from '@searchspring/snap-controller';
|
|
3
|
-
import { ComponentProps } from '../../../../types';
|
|
4
|
-
import type { Product } from '@searchspring/snap-store-mobx';
|
|
5
|
-
export declare const RecommendationResultTracker: (properties: RecommendationResultTrackerProps) => JSX.Element;
|
|
6
|
-
export interface RecommendationResultTrackerProps extends ComponentProps {
|
|
7
|
-
children: any;
|
|
8
|
-
result: Product;
|
|
9
|
-
controller: RecommendationController;
|
|
10
|
-
track?: {
|
|
11
|
-
impression?: boolean;
|
|
12
|
-
click?: boolean;
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=RecommendationResultTracker.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,eAAyB,gCAAgC,KAAG,WAwDlG,CAAC;AAEH,MAAM,WAAW,gCAAiC,SAAQ,cAAc;IACvE,QAAQ,EAAE,GAAG,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,wBAAwB,CAAC;IACrC,KAAK,CAAC,EAAE;QACP,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACF"}
|