@ninetailed/experience.js-react 1.0.0 → 1.0.1-beta.10
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/index.esm.js +34 -24
- package/index.umd.js +36 -31
- package/lib/Personalize.d.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/package.json +5 -4
package/index.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React, { createContext, useMemo, useContext, useState, useEffect
|
|
1
|
+
import React, { createContext, useMemo, useContext, useState, useEffect } from 'react';
|
|
2
2
|
import { Ninetailed, selectVariant } from '@ninetailed/experience.js';
|
|
3
|
-
import
|
|
3
|
+
import { useInView } from 'react-intersection-observer';
|
|
4
4
|
import { isBrowser } from '@ninetailed/experience.js-shared';
|
|
5
5
|
import get$1 from 'lodash/get';
|
|
6
6
|
|
|
@@ -1631,6 +1631,33 @@ const usePersonalize = (baseline, variants, options = {
|
|
|
1631
1631
|
return selectVariant(baseline, variants, profile, options);
|
|
1632
1632
|
};
|
|
1633
1633
|
|
|
1634
|
+
const TrackHasSeen = ({
|
|
1635
|
+
children,
|
|
1636
|
+
variant,
|
|
1637
|
+
audience,
|
|
1638
|
+
isPersonalized
|
|
1639
|
+
}) => {
|
|
1640
|
+
const ninetailed = useNinetailed();
|
|
1641
|
+
const {
|
|
1642
|
+
ref,
|
|
1643
|
+
inView
|
|
1644
|
+
} = useInView({
|
|
1645
|
+
triggerOnce: true
|
|
1646
|
+
});
|
|
1647
|
+
useEffect(() => {
|
|
1648
|
+
if (isBrowser() && inView) {
|
|
1649
|
+
ninetailed.trackHasSeenComponent({
|
|
1650
|
+
variant,
|
|
1651
|
+
audience,
|
|
1652
|
+
isPersonalized
|
|
1653
|
+
});
|
|
1654
|
+
}
|
|
1655
|
+
}, [inView]);
|
|
1656
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
1657
|
+
ref: ref
|
|
1658
|
+
}), children);
|
|
1659
|
+
};
|
|
1660
|
+
|
|
1634
1661
|
const Personalize = _a => {
|
|
1635
1662
|
var {
|
|
1636
1663
|
component: Component,
|
|
@@ -1640,7 +1667,6 @@ const Personalize = _a => {
|
|
|
1640
1667
|
} = _a,
|
|
1641
1668
|
baseline = __rest(_a, ["component", "loadingComponent", "variants", "holdout"]);
|
|
1642
1669
|
|
|
1643
|
-
const ninetailed = useNinetailed();
|
|
1644
1670
|
const {
|
|
1645
1671
|
loading,
|
|
1646
1672
|
variant,
|
|
@@ -1649,24 +1675,7 @@ const Personalize = _a => {
|
|
|
1649
1675
|
} = usePersonalize(baseline, variants, {
|
|
1650
1676
|
holdout
|
|
1651
1677
|
});
|
|
1652
|
-
const [isVisible, setIsVisible] = useState(false);
|
|
1653
|
-
const onChangeVisibility = useCallback(visibility => {
|
|
1654
|
-
if (visibility) {
|
|
1655
|
-
setIsVisible(true);
|
|
1656
|
-
}
|
|
1657
|
-
}, []);
|
|
1658
|
-
const trackCallFired = useRef(false);
|
|
1659
1678
|
const hasVariants = variants.length > 0;
|
|
1660
|
-
useEffect(() => {
|
|
1661
|
-
if (isBrowser() && hasVariants && !loading && isVisible && variant && audience && audience.id !== 'baseline' && !trackCallFired.current) {
|
|
1662
|
-
ninetailed.trackHasSeenComponent({
|
|
1663
|
-
variant,
|
|
1664
|
-
audience,
|
|
1665
|
-
isPersonalized
|
|
1666
|
-
});
|
|
1667
|
-
trackCallFired.current = true;
|
|
1668
|
-
}
|
|
1669
|
-
}, [loading, isVisible, variant, baseline, isPersonalized]);
|
|
1670
1679
|
|
|
1671
1680
|
if (!hasVariants) {
|
|
1672
1681
|
return /*#__PURE__*/React.createElement(Component, Object.assign({}, baseline, {
|
|
@@ -1695,11 +1704,12 @@ const Personalize = _a => {
|
|
|
1695
1704
|
})));
|
|
1696
1705
|
}
|
|
1697
1706
|
|
|
1698
|
-
return /*#__PURE__*/React.createElement(
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1707
|
+
return /*#__PURE__*/React.createElement(TrackHasSeen, {
|
|
1708
|
+
variant: variant,
|
|
1709
|
+
audience: audience,
|
|
1710
|
+
isPersonalized: isPersonalized
|
|
1702
1711
|
}, /*#__PURE__*/React.createElement(Component, Object.assign({}, variant, {
|
|
1712
|
+
key: `${audience.id}-${variant.id}`,
|
|
1703
1713
|
ninetailed: {
|
|
1704
1714
|
isPersonalized,
|
|
1705
1715
|
audience
|
package/index.umd.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('@ninetailed/experience.js'), require('react-
|
|
3
|
-
typeof define === 'function' && define.amd ? define(['exports', 'react', '@ninetailed/experience.js', 'react-
|
|
4
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.React = {}, global.React, global.experience_js, global.
|
|
5
|
-
})(this, (function (exports, React, experience_js,
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('@ninetailed/experience.js'), require('react-intersection-observer'), require('@ninetailed/experience.js-shared'), require('lodash/get')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports', 'react', '@ninetailed/experience.js', 'react-intersection-observer', '@ninetailed/experience.js-shared', 'lodash/get'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.React = {}, global.React, global.experience_js, global.reactIntersectionObserver, global.experience_jsShared, global.get$1));
|
|
5
|
+
})(this, (function (exports, React, experience_js, reactIntersectionObserver, experience_jsShared, get$1) { 'use strict';
|
|
6
6
|
|
|
7
7
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
8
8
|
|
|
9
9
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
10
|
-
var VisibilitySensor__default = /*#__PURE__*/_interopDefaultLegacy(VisibilitySensor);
|
|
11
10
|
var get__default = /*#__PURE__*/_interopDefaultLegacy(get$1);
|
|
12
11
|
|
|
13
12
|
var NinetailedContext = /*#__PURE__*/React.createContext(undefined);
|
|
@@ -113,6 +112,33 @@
|
|
|
113
112
|
return experience_js.selectVariant(baseline, variants, profile, options);
|
|
114
113
|
};
|
|
115
114
|
|
|
115
|
+
var TrackHasSeen = function TrackHasSeen(_a) {
|
|
116
|
+
var children = _a.children,
|
|
117
|
+
variant = _a.variant,
|
|
118
|
+
audience = _a.audience,
|
|
119
|
+
isPersonalized = _a.isPersonalized;
|
|
120
|
+
var ninetailed = useNinetailed();
|
|
121
|
+
|
|
122
|
+
var _b = reactIntersectionObserver.useInView({
|
|
123
|
+
triggerOnce: true
|
|
124
|
+
}),
|
|
125
|
+
ref = _b.ref,
|
|
126
|
+
inView = _b.inView;
|
|
127
|
+
|
|
128
|
+
React.useEffect(function () {
|
|
129
|
+
if (experience_jsShared.isBrowser() && inView) {
|
|
130
|
+
ninetailed.trackHasSeenComponent({
|
|
131
|
+
variant: variant,
|
|
132
|
+
audience: audience,
|
|
133
|
+
isPersonalized: isPersonalized
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}, [inView]);
|
|
137
|
+
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
138
|
+
ref: ref
|
|
139
|
+
}), children);
|
|
140
|
+
};
|
|
141
|
+
|
|
116
142
|
var Personalize = function Personalize(_a) {
|
|
117
143
|
var Component = _a.component,
|
|
118
144
|
LoadingComponent = _a.loadingComponent,
|
|
@@ -122,8 +148,6 @@
|
|
|
122
148
|
holdout = _c === void 0 ? -1 : _c,
|
|
123
149
|
baseline = __rest(_a, ["component", "loadingComponent", "variants", "holdout"]);
|
|
124
150
|
|
|
125
|
-
var ninetailed = useNinetailed();
|
|
126
|
-
|
|
127
151
|
var _d = usePersonalize(baseline, variants, {
|
|
128
152
|
holdout: holdout
|
|
129
153
|
}),
|
|
@@ -132,27 +156,7 @@
|
|
|
132
156
|
isPersonalized = _d.isPersonalized,
|
|
133
157
|
audience = _d.audience;
|
|
134
158
|
|
|
135
|
-
var _e = React.useState(false),
|
|
136
|
-
isVisible = _e[0],
|
|
137
|
-
setIsVisible = _e[1];
|
|
138
|
-
|
|
139
|
-
var onChangeVisibility = React.useCallback(function (visibility) {
|
|
140
|
-
if (visibility) {
|
|
141
|
-
setIsVisible(true);
|
|
142
|
-
}
|
|
143
|
-
}, []);
|
|
144
|
-
var trackCallFired = React.useRef(false);
|
|
145
159
|
var hasVariants = variants.length > 0;
|
|
146
|
-
React.useEffect(function () {
|
|
147
|
-
if (experience_jsShared.isBrowser() && hasVariants && !loading && isVisible && variant && audience && audience.id !== 'baseline' && !trackCallFired.current) {
|
|
148
|
-
ninetailed.trackHasSeenComponent({
|
|
149
|
-
variant: variant,
|
|
150
|
-
audience: audience,
|
|
151
|
-
isPersonalized: isPersonalized
|
|
152
|
-
});
|
|
153
|
-
trackCallFired.current = true;
|
|
154
|
-
}
|
|
155
|
-
}, [loading, isVisible, variant, baseline, isPersonalized]);
|
|
156
160
|
|
|
157
161
|
if (!hasVariants) {
|
|
158
162
|
return /*#__PURE__*/React__default["default"].createElement(Component, __assign({}, baseline, {
|
|
@@ -181,11 +185,12 @@
|
|
|
181
185
|
})));
|
|
182
186
|
}
|
|
183
187
|
|
|
184
|
-
return /*#__PURE__*/React__default["default"].createElement(
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
+
return /*#__PURE__*/React__default["default"].createElement(TrackHasSeen, {
|
|
189
|
+
variant: variant,
|
|
190
|
+
audience: audience,
|
|
191
|
+
isPersonalized: isPersonalized
|
|
188
192
|
}, /*#__PURE__*/React__default["default"].createElement(Component, __assign({}, variant, {
|
|
193
|
+
key: "".concat(audience.id, "-").concat(variant.id),
|
|
189
194
|
ninetailed: {
|
|
190
195
|
isPersonalized: isPersonalized,
|
|
191
196
|
audience: audience
|
package/lib/Personalize.d.ts
CHANGED
package/lib/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
export { Profile } from '@ninetailed/experience.js-shared';
|
|
1
2
|
export { NinetailedProvider, NinetailedProviderProps, } from './NinetailedProvider';
|
|
2
3
|
export { useNinetailed } from './useNinetailed';
|
|
3
4
|
export { useProfile } from './useProfile';
|
|
4
5
|
export { Personalize, PersonalizedComponent } from './Personalize';
|
|
5
6
|
export { MergeTag } from './MergeTag';
|
|
6
|
-
export { Profile } from '@ninetailed/experience.js-shared';
|
package/package.json
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ninetailed/experience.js-react",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1-beta.10",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"react": ">=16.8.0"
|
|
6
6
|
},
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@analytics/google-analytics": "0.5.3",
|
|
9
9
|
"react-visibility-sensor": "5.1.1",
|
|
10
|
-
"@ninetailed/experience.js-shared": "1.0.
|
|
10
|
+
"@ninetailed/experience.js-shared": "1.0.1-beta.10",
|
|
11
11
|
"uuid": "^8.3.2",
|
|
12
12
|
"ts-toolbelt": "^9.6.0",
|
|
13
13
|
"locale-enum": "^1.1.1",
|
|
14
14
|
"i18n-iso-countries": "^7.3.0",
|
|
15
15
|
"lodash": "^4.17.21",
|
|
16
|
-
"@ninetailed/experience.js": "1.0.
|
|
17
|
-
"analytics": "^0.8.0"
|
|
16
|
+
"@ninetailed/experience.js": "1.0.1-beta.10",
|
|
17
|
+
"analytics": "^0.8.0",
|
|
18
|
+
"react-intersection-observer": "^8.33.1"
|
|
18
19
|
},
|
|
19
20
|
"main": "./index.umd.js",
|
|
20
21
|
"module": "./index.esm.js",
|