@ninetailed/experience.js-react 2.0.0-beta.23 → 2.0.0-beta.24
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 +78 -38
- package/index.umd.js +86 -41
- package/lib/Experience/Experience.d.ts +8 -4
- package/lib/Experience/TrackExperience.d.ts +3 -0
- package/lib/Experience/getSSRLoadingComponent.d.ts +2 -0
- package/lib/Experience/index.d.ts +2 -0
- package/lib/index.d.ts +2 -1
- package/package.json +3 -3
package/index.esm.js
CHANGED
|
@@ -3,6 +3,7 @@ import { Ninetailed, selectVariant, selectHasExperienceVariants, selectActiveExp
|
|
|
3
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
|
+
import has$1 from 'lodash/has';
|
|
6
7
|
|
|
7
8
|
const NinetailedContext = /*#__PURE__*/createContext(undefined);
|
|
8
9
|
|
|
@@ -2333,6 +2334,31 @@ const MergeTag = ({
|
|
|
2333
2334
|
return /*#__PURE__*/React.createElement(React.Fragment, null, value);
|
|
2334
2335
|
};
|
|
2335
2336
|
|
|
2337
|
+
const TrackExperience = ({
|
|
2338
|
+
children,
|
|
2339
|
+
experience,
|
|
2340
|
+
variant
|
|
2341
|
+
}) => {
|
|
2342
|
+
const ninetailed = useNinetailed();
|
|
2343
|
+
const {
|
|
2344
|
+
ref,
|
|
2345
|
+
inView
|
|
2346
|
+
} = useInView({
|
|
2347
|
+
triggerOnce: true
|
|
2348
|
+
});
|
|
2349
|
+
useEffect(() => {
|
|
2350
|
+
if (isBrowser() && inView) {
|
|
2351
|
+
ninetailed.trackExperience({
|
|
2352
|
+
experience,
|
|
2353
|
+
variant
|
|
2354
|
+
});
|
|
2355
|
+
}
|
|
2356
|
+
}, [inView]);
|
|
2357
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
2358
|
+
ref: ref
|
|
2359
|
+
}), children);
|
|
2360
|
+
};
|
|
2361
|
+
|
|
2336
2362
|
var global$2 = global$w;
|
|
2337
2363
|
var aCallable = aCallable$2;
|
|
2338
2364
|
var toObject = toObject$5;
|
|
@@ -2569,7 +2595,10 @@ const Experience = _a => {
|
|
|
2569
2595
|
|
|
2570
2596
|
if (status === 'loading') {
|
|
2571
2597
|
if (LoadingComponent) {
|
|
2572
|
-
return /*#__PURE__*/React.createElement(LoadingComponent,
|
|
2598
|
+
return /*#__PURE__*/React.createElement(LoadingComponent, Object.assign({}, baseline, {
|
|
2599
|
+
experiences: experiences,
|
|
2600
|
+
component: Component
|
|
2601
|
+
}));
|
|
2573
2602
|
}
|
|
2574
2603
|
|
|
2575
2604
|
return /*#__PURE__*/React.createElement("div", {
|
|
@@ -2588,19 +2617,7 @@ const Experience = _a => {
|
|
|
2588
2617
|
}
|
|
2589
2618
|
|
|
2590
2619
|
if (!experience || !variant) {
|
|
2591
|
-
return /*#__PURE__*/React.createElement(
|
|
2592
|
-
variant: {
|
|
2593
|
-
id: baseline.id,
|
|
2594
|
-
audience: {
|
|
2595
|
-
id: 'baseline'
|
|
2596
|
-
},
|
|
2597
|
-
hidden: false
|
|
2598
|
-
},
|
|
2599
|
-
audience: {
|
|
2600
|
-
id: 'baseline'
|
|
2601
|
-
},
|
|
2602
|
-
isPersonalized: false
|
|
2603
|
-
}, /*#__PURE__*/React.createElement(Component, Object.assign({}, baseline, {
|
|
2620
|
+
return /*#__PURE__*/React.createElement(Component, Object.assign({}, baseline, {
|
|
2604
2621
|
key: baseline.id,
|
|
2605
2622
|
ninetailed: {
|
|
2606
2623
|
isPersonalized: false,
|
|
@@ -2608,34 +2625,57 @@ const Experience = _a => {
|
|
|
2608
2625
|
id: 'baseline'
|
|
2609
2626
|
}
|
|
2610
2627
|
}
|
|
2611
|
-
}))
|
|
2628
|
+
}));
|
|
2612
2629
|
}
|
|
2613
2630
|
|
|
2614
|
-
return (
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
},
|
|
2631
|
+
return /*#__PURE__*/React.createElement(TrackExperience, {
|
|
2632
|
+
experience: experience,
|
|
2633
|
+
variant: {
|
|
2634
|
+
id: variant.id,
|
|
2635
|
+
hidden: variant.hidden || false
|
|
2636
|
+
}
|
|
2637
|
+
}, (variant === null || variant === void 0 ? void 0 : variant.hidden) ? null : /*#__PURE__*/React.createElement(Component, Object.assign({}, variant, {
|
|
2638
|
+
key: `${experience.id}-${variant.id}`,
|
|
2639
|
+
ninetailed: {
|
|
2640
|
+
isPersonalized,
|
|
2625
2641
|
audience: {
|
|
2626
2642
|
id: (audience === null || audience === void 0 ? void 0 : audience.id) || 'baseline'
|
|
2627
|
-
},
|
|
2628
|
-
isPersonalized: isPersonalized
|
|
2629
|
-
}, (variant === null || variant === void 0 ? void 0 : variant.hidden) ? null : /*#__PURE__*/React.createElement(Component, Object.assign({}, variant, {
|
|
2630
|
-
key: `${experience.id}-${variant.id}`,
|
|
2631
|
-
ninetailed: {
|
|
2632
|
-
isPersonalized,
|
|
2633
|
-
audience: {
|
|
2634
|
-
id: (audience === null || audience === void 0 ? void 0 : audience.id) || 'baseline'
|
|
2635
|
-
}
|
|
2636
2643
|
}
|
|
2637
|
-
}
|
|
2638
|
-
);
|
|
2644
|
+
}
|
|
2645
|
+
})));
|
|
2646
|
+
};
|
|
2647
|
+
|
|
2648
|
+
const getSSRLoadingComponent = encodedExperienceVariantsMap => // eslint-disable-next-line react/display-name
|
|
2649
|
+
_a => {
|
|
2650
|
+
var {
|
|
2651
|
+
experiences,
|
|
2652
|
+
component: Component
|
|
2653
|
+
} = _a,
|
|
2654
|
+
baseline = __rest(_a, ["experiences", "component"]);
|
|
2655
|
+
|
|
2656
|
+
const experience = experiences.find(experience => has$1(encodedExperienceVariantsMap, experience.id));
|
|
2657
|
+
|
|
2658
|
+
if (!experience) {
|
|
2659
|
+
return /*#__PURE__*/React.createElement(Component, Object.assign({}, baseline));
|
|
2660
|
+
}
|
|
2661
|
+
|
|
2662
|
+
const component = experience.components.find(component => component.baseline.id === baseline.id);
|
|
2663
|
+
|
|
2664
|
+
if (!component) {
|
|
2665
|
+
return /*#__PURE__*/React.createElement(Component, Object.assign({}, baseline));
|
|
2666
|
+
}
|
|
2667
|
+
|
|
2668
|
+
if (encodedExperienceVariantsMap[experience.id] === 0) {
|
|
2669
|
+
return /*#__PURE__*/React.createElement(Component, Object.assign({}, baseline));
|
|
2670
|
+
}
|
|
2671
|
+
|
|
2672
|
+
const variant = component.variants[encodedExperienceVariantsMap[experience.id] - 1];
|
|
2673
|
+
|
|
2674
|
+
if (!variant) {
|
|
2675
|
+
return /*#__PURE__*/React.createElement(Component, Object.assign({}, baseline));
|
|
2676
|
+
}
|
|
2677
|
+
|
|
2678
|
+
return /*#__PURE__*/React.createElement(Component, Object.assign({}, variant));
|
|
2639
2679
|
};
|
|
2640
2680
|
|
|
2641
|
-
export { Experience, MergeTag, NinetailedProvider, Personalize, TrackHasSeenComponent, useNinetailed, usePersonalize, useProfile };
|
|
2681
|
+
export { Experience, MergeTag, NinetailedProvider, Personalize, TrackHasSeenComponent, getSSRLoadingComponent, useNinetailed, usePersonalize, useProfile };
|
package/index.umd.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
(function (global, factory) {
|
|
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';
|
|
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'), require('lodash/has')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports', 'react', '@ninetailed/experience.js', 'react-intersection-observer', '@ninetailed/experience.js-shared', 'lodash/get', 'lodash/has'], 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, global.has$1));
|
|
5
|
+
})(this, (function (exports, React, experience_js, reactIntersectionObserver, experience_jsShared, get$1, has$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
10
|
var get__default = /*#__PURE__*/_interopDefaultLegacy(get$1);
|
|
11
|
+
var has__default = /*#__PURE__*/_interopDefaultLegacy(has$1);
|
|
11
12
|
|
|
12
13
|
var NinetailedContext = /*#__PURE__*/React.createContext(undefined);
|
|
13
14
|
|
|
@@ -1883,6 +1884,31 @@
|
|
|
1883
1884
|
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, value);
|
|
1884
1885
|
};
|
|
1885
1886
|
|
|
1887
|
+
var TrackExperience = function TrackExperience(_a) {
|
|
1888
|
+
var children = _a.children,
|
|
1889
|
+
experience = _a.experience,
|
|
1890
|
+
variant = _a.variant;
|
|
1891
|
+
var ninetailed = useNinetailed();
|
|
1892
|
+
|
|
1893
|
+
var _b = reactIntersectionObserver.useInView({
|
|
1894
|
+
triggerOnce: true
|
|
1895
|
+
}),
|
|
1896
|
+
ref = _b.ref,
|
|
1897
|
+
inView = _b.inView;
|
|
1898
|
+
|
|
1899
|
+
React.useEffect(function () {
|
|
1900
|
+
if (experience_jsShared.isBrowser() && inView) {
|
|
1901
|
+
ninetailed.trackExperience({
|
|
1902
|
+
experience: experience,
|
|
1903
|
+
variant: variant
|
|
1904
|
+
});
|
|
1905
|
+
}
|
|
1906
|
+
}, [inView]);
|
|
1907
|
+
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
1908
|
+
ref: ref
|
|
1909
|
+
}), children);
|
|
1910
|
+
};
|
|
1911
|
+
|
|
1886
1912
|
var global$2 = global$t;
|
|
1887
1913
|
var aCallable = aCallable$2;
|
|
1888
1914
|
var toObject = toObject$3;
|
|
@@ -2114,7 +2140,10 @@
|
|
|
2114
2140
|
|
|
2115
2141
|
if (status === 'loading') {
|
|
2116
2142
|
if (LoadingComponent) {
|
|
2117
|
-
return /*#__PURE__*/React__default["default"].createElement(LoadingComponent,
|
|
2143
|
+
return /*#__PURE__*/React__default["default"].createElement(LoadingComponent, __assign({}, baseline, {
|
|
2144
|
+
experiences: experiences,
|
|
2145
|
+
component: Component
|
|
2146
|
+
}));
|
|
2118
2147
|
}
|
|
2119
2148
|
|
|
2120
2149
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
@@ -2133,19 +2162,7 @@
|
|
|
2133
2162
|
}
|
|
2134
2163
|
|
|
2135
2164
|
if (!experience || !variant) {
|
|
2136
|
-
return /*#__PURE__*/React__default["default"].createElement(
|
|
2137
|
-
variant: {
|
|
2138
|
-
id: baseline.id,
|
|
2139
|
-
audience: {
|
|
2140
|
-
id: 'baseline'
|
|
2141
|
-
},
|
|
2142
|
-
hidden: false
|
|
2143
|
-
},
|
|
2144
|
-
audience: {
|
|
2145
|
-
id: 'baseline'
|
|
2146
|
-
},
|
|
2147
|
-
isPersonalized: false
|
|
2148
|
-
}, /*#__PURE__*/React__default["default"].createElement(Component, __assign({}, baseline, {
|
|
2165
|
+
return /*#__PURE__*/React__default["default"].createElement(Component, __assign({}, baseline, {
|
|
2149
2166
|
key: baseline.id,
|
|
2150
2167
|
ninetailed: {
|
|
2151
2168
|
isPersonalized: false,
|
|
@@ -2153,34 +2170,61 @@
|
|
|
2153
2170
|
id: 'baseline'
|
|
2154
2171
|
}
|
|
2155
2172
|
}
|
|
2156
|
-
}))
|
|
2173
|
+
}));
|
|
2157
2174
|
}
|
|
2158
2175
|
|
|
2159
|
-
return (
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
},
|
|
2176
|
+
return /*#__PURE__*/React__default["default"].createElement(TrackExperience, {
|
|
2177
|
+
experience: experience,
|
|
2178
|
+
variant: {
|
|
2179
|
+
id: variant.id,
|
|
2180
|
+
hidden: variant.hidden || false
|
|
2181
|
+
}
|
|
2182
|
+
}, (variant === null || variant === void 0 ? void 0 : variant.hidden) ? null : /*#__PURE__*/React__default["default"].createElement(Component, __assign({}, variant, {
|
|
2183
|
+
key: "".concat(experience.id, "-").concat(variant.id),
|
|
2184
|
+
ninetailed: {
|
|
2185
|
+
isPersonalized: isPersonalized,
|
|
2170
2186
|
audience: {
|
|
2171
2187
|
id: (audience === null || audience === void 0 ? void 0 : audience.id) || 'baseline'
|
|
2172
|
-
},
|
|
2173
|
-
isPersonalized: isPersonalized
|
|
2174
|
-
}, (variant === null || variant === void 0 ? void 0 : variant.hidden) ? null : /*#__PURE__*/React__default["default"].createElement(Component, __assign({}, variant, {
|
|
2175
|
-
key: "".concat(experience.id, "-").concat(variant.id),
|
|
2176
|
-
ninetailed: {
|
|
2177
|
-
isPersonalized: isPersonalized,
|
|
2178
|
-
audience: {
|
|
2179
|
-
id: (audience === null || audience === void 0 ? void 0 : audience.id) || 'baseline'
|
|
2180
|
-
}
|
|
2181
2188
|
}
|
|
2182
|
-
}
|
|
2183
|
-
);
|
|
2189
|
+
}
|
|
2190
|
+
})));
|
|
2191
|
+
};
|
|
2192
|
+
|
|
2193
|
+
var getSSRLoadingComponent = function getSSRLoadingComponent(encodedExperienceVariantsMap) {
|
|
2194
|
+
// eslint-disable-next-line react/display-name
|
|
2195
|
+
return function (_a) {
|
|
2196
|
+
var experiences = _a.experiences,
|
|
2197
|
+
Component = _a.component,
|
|
2198
|
+
baseline = __rest(_a, ["experiences", "component"]);
|
|
2199
|
+
|
|
2200
|
+
var experience = experiences.find(function (experience) {
|
|
2201
|
+
return has__default["default"](encodedExperienceVariantsMap, experience.id);
|
|
2202
|
+
});
|
|
2203
|
+
|
|
2204
|
+
if (!experience) {
|
|
2205
|
+
return /*#__PURE__*/React__default["default"].createElement(Component, __assign({}, baseline));
|
|
2206
|
+
}
|
|
2207
|
+
|
|
2208
|
+
var component = experience.components.find(function (component) {
|
|
2209
|
+
return component.baseline.id === baseline.id;
|
|
2210
|
+
});
|
|
2211
|
+
|
|
2212
|
+
if (!component) {
|
|
2213
|
+
return /*#__PURE__*/React__default["default"].createElement(Component, __assign({}, baseline));
|
|
2214
|
+
}
|
|
2215
|
+
|
|
2216
|
+
if (encodedExperienceVariantsMap[experience.id] === 0) {
|
|
2217
|
+
return /*#__PURE__*/React__default["default"].createElement(Component, __assign({}, baseline));
|
|
2218
|
+
}
|
|
2219
|
+
|
|
2220
|
+
var variant = component.variants[encodedExperienceVariantsMap[experience.id] - 1];
|
|
2221
|
+
|
|
2222
|
+
if (!variant) {
|
|
2223
|
+
return /*#__PURE__*/React__default["default"].createElement(Component, __assign({}, baseline));
|
|
2224
|
+
}
|
|
2225
|
+
|
|
2226
|
+
return /*#__PURE__*/React__default["default"].createElement(Component, __assign({}, variant));
|
|
2227
|
+
};
|
|
2184
2228
|
};
|
|
2185
2229
|
|
|
2186
2230
|
exports.Experience = Experience;
|
|
@@ -2188,6 +2232,7 @@
|
|
|
2188
2232
|
exports.NinetailedProvider = NinetailedProvider;
|
|
2189
2233
|
exports.Personalize = Personalize;
|
|
2190
2234
|
exports.TrackHasSeenComponent = TrackHasSeenComponent;
|
|
2235
|
+
exports.getSSRLoadingComponent = getSSRLoadingComponent;
|
|
2191
2236
|
exports.useNinetailed = useNinetailed;
|
|
2192
2237
|
exports.usePersonalize = usePersonalize;
|
|
2193
2238
|
exports.useProfile = useProfile;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Baseline, ExperienceConfiguration } from '@ninetailed/experience.js';
|
|
3
|
-
declare type ExperienceComponent<P extends Baseline> = React.ComponentType<Omit<P, 'id'> & {
|
|
3
|
+
export declare type ExperienceComponent<P extends Baseline> = React.ComponentType<Omit<P, 'id'> & {
|
|
4
4
|
ninetailed?: {
|
|
5
5
|
isPersonalized: boolean;
|
|
6
6
|
audience: {
|
|
@@ -8,12 +8,16 @@ declare type ExperienceComponent<P extends Baseline> = React.ComponentType<Omit<
|
|
|
8
8
|
};
|
|
9
9
|
};
|
|
10
10
|
}>;
|
|
11
|
-
declare type
|
|
11
|
+
export declare type ExperienceBaseProps<P extends Baseline = Baseline> = P & {
|
|
12
12
|
experiences: ExperienceConfiguration[];
|
|
13
13
|
component: ExperienceComponent<P> | React.ComponentType<P>;
|
|
14
|
-
|
|
14
|
+
};
|
|
15
|
+
export declare type ExperienceLoadingComponent<P extends Baseline = Baseline> = React.ComponentType<ExperienceBaseProps<P>>;
|
|
16
|
+
export declare type ExperienceProps<P extends Baseline> = ExperienceBaseProps<P> & {
|
|
17
|
+
experiences: ExperienceConfiguration[];
|
|
18
|
+
component: ExperienceComponent<P> | React.ComponentType<P>;
|
|
19
|
+
loadingComponent?: ExperienceLoadingComponent<P>;
|
|
15
20
|
};
|
|
16
21
|
export declare const Experience: <P extends {
|
|
17
22
|
id: string;
|
|
18
23
|
}>({ experiences, component: Component, loadingComponent: LoadingComponent, ...baseline }: ExperienceProps<P>) => JSX.Element;
|
|
19
|
-
export {};
|
package/lib/index.d.ts
CHANGED
|
@@ -9,4 +9,5 @@ export { Personalize } from './Personalize';
|
|
|
9
9
|
export type { PersonalizedComponent } from './Personalize';
|
|
10
10
|
export { MergeTag } from './MergeTag';
|
|
11
11
|
export { TrackHasSeenComponent } from './TrackHasSeenComponent';
|
|
12
|
-
export { Experience } from './Experience';
|
|
12
|
+
export { Experience, getSSRLoadingComponent } from './Experience';
|
|
13
|
+
export type { ExperienceProps, ExperienceBaseProps, ExperienceComponent, ExperienceLoadingComponent, } from './Experience';
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ninetailed/experience.js-react",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.24",
|
|
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": "2.0.0-beta.
|
|
10
|
+
"@ninetailed/experience.js": "2.0.0-beta.24",
|
|
11
11
|
"analytics": "^0.8.0",
|
|
12
|
-
"@ninetailed/experience.js-shared": "2.0.0-beta.
|
|
12
|
+
"@ninetailed/experience.js-shared": "2.0.0-beta.24",
|
|
13
13
|
"uuid": "^8.3.2",
|
|
14
14
|
"ts-toolbelt": "^9.6.0",
|
|
15
15
|
"locale-enum": "^1.1.1",
|