@builder.io/sdk-react-native 0.2.3 → 0.4.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/blocks/button/button.js +1 -0
- package/dist/blocks/columns/columns.js +2 -1
- package/dist/blocks/custom-code/custom-code.js +1 -0
- package/dist/blocks/embed/embed.js +1 -0
- package/dist/blocks/form/form.js +1 -0
- package/dist/blocks/fragment/fragment.js +1 -0
- package/dist/blocks/img/img.js +1 -0
- package/dist/blocks/input/input.js +1 -0
- package/dist/blocks/raw-text/raw-text.js +1 -0
- package/dist/blocks/section/section.js +1 -0
- package/dist/blocks/select/select.js +1 -0
- package/dist/blocks/submit-button/submit-button.js +1 -0
- package/dist/blocks/symbol/symbol.js +2 -1
- package/dist/blocks/textarea/textarea.js +1 -0
- package/dist/components/render-block/block-styles.js +4 -1
- package/dist/components/render-block/render-block.helpers.js +8 -20
- package/dist/components/render-block/render-block.js +28 -21
- package/dist/components/render-block/render-component.js +4 -3
- package/dist/components/render-block/render-repeated-block.js +4 -2
- package/dist/components/render-blocks.js +1 -0
- package/dist/components/render-content/builder-editing.js +1 -0
- package/dist/components/render-content/components/render-styles.js +2 -1
- package/dist/components/render-content/render-content.js +48 -10
- package/dist/components/render-content/wrap-component-ref.js +5 -0
- package/dist/components/render-content-variants/helpers.js +137 -0
- package/dist/components/render-content-variants/render-content-variants.js +73 -0
- package/dist/components/render-inlined-styles.js +2 -12
- package/dist/constants/sdk-version.js +4 -0
- package/dist/context/builder.context.js +3 -2
- package/dist/functions/evaluate.js +25 -3
- package/dist/functions/evaluate.test.js +19 -0
- package/dist/functions/get-block-actions-handler.js +3 -1
- package/dist/functions/get-content/generate-content-url.js +2 -2
- package/dist/functions/get-content/generate-content-url.test.js +15 -0
- package/dist/functions/get-content/index.js +36 -19
- package/dist/functions/get-processed-block.js +16 -4
- package/dist/functions/get-processed-block.test.js +3 -1
- package/dist/helpers/ab-tests.js +123 -6
- package/dist/helpers/canTrack.js +6 -0
- package/dist/helpers/cookie.js +9 -2
- package/dist/helpers/logger.js +2 -1
- package/dist/index.js +17 -10
- package/dist/scripts/init-editing.js +2 -0
- package/package.json +2 -5
- package/src/blocks/button/button.jsx +1 -0
- package/src/blocks/columns/columns.jsx +2 -1
- package/src/blocks/custom-code/custom-code.jsx +1 -0
- package/src/blocks/embed/embed.jsx +1 -0
- package/src/blocks/form/form.jsx +1 -0
- package/src/blocks/fragment/fragment.jsx +1 -0
- package/src/blocks/img/img.jsx +1 -0
- package/src/blocks/input/input.jsx +1 -0
- package/src/blocks/raw-text/raw-text.jsx +1 -0
- package/src/blocks/section/section.jsx +1 -0
- package/src/blocks/select/select.jsx +1 -0
- package/src/blocks/submit-button/submit-button.jsx +1 -0
- package/src/blocks/symbol/symbol.jsx +2 -1
- package/src/blocks/textarea/textarea.jsx +1 -0
- package/src/components/render-block/block-styles.jsx +4 -1
- package/src/components/render-block/render-block.helpers.js +7 -19
- package/src/components/render-block/render-block.jsx +24 -23
- package/src/components/render-block/render-component.jsx +5 -5
- package/src/components/render-block/render-repeated-block.jsx +4 -2
- package/src/components/render-blocks.jsx +1 -0
- package/src/components/render-content/builder-editing.jsx +1 -0
- package/src/components/render-content/components/render-styles.jsx +4 -3
- package/src/components/render-content/render-content.jsx +54 -9
- package/src/components/render-content/wrap-component-ref.js +4 -0
- package/src/components/render-content-variants/helpers.js +139 -0
- package/src/components/render-content-variants/render-content-variants.jsx +101 -0
- package/src/components/render-inlined-styles.jsx +2 -22
- package/src/constants/sdk-version.js +1 -0
- package/src/context/builder.context.js +3 -2
- package/src/functions/evaluate.js +27 -3
- package/src/functions/evaluate.test.js +17 -0
- package/src/functions/get-block-actions-handler.js +3 -1
- package/src/functions/get-content/generate-content-url.js +2 -1
- package/src/functions/get-content/generate-content-url.test.js +15 -0
- package/src/functions/get-content/index.js +35 -18
- package/src/functions/get-processed-block.js +20 -4
- package/src/functions/get-processed-block.test.js +3 -1
- package/src/helpers/ab-tests.js +132 -10
- package/src/helpers/canTrack.js +5 -0
- package/src/helpers/cookie.js +9 -2
- package/src/helpers/logger.js +2 -1
- package/src/index.js +18 -7
- package/src/scripts/init-editing.js +2 -0
- package/src/functions/get-content/ab-testing.js +0 -99
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
'use client';
|
|
2
3
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
4
|
if (k2 === undefined) k2 = k;
|
|
4
5
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -80,7 +81,7 @@ function Columns(props) {
|
|
|
80
81
|
};
|
|
81
82
|
}
|
|
82
83
|
const width = getColumnCssWidth(index);
|
|
83
|
-
const gutterPixels = `${
|
|
84
|
+
const gutterPixels = `${gutter}px`;
|
|
84
85
|
const mobileWidth = "100%";
|
|
85
86
|
const mobileMarginLeft = 0;
|
|
86
87
|
return {
|
package/dist/blocks/form/form.js
CHANGED
package/dist/blocks/img/img.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
'use client';
|
|
2
3
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
4
|
if (k2 === undefined) k2 = k;
|
|
4
5
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -98,7 +99,7 @@ function Symbol(props) {
|
|
|
98
99
|
} },
|
|
99
100
|
React.createElement(render_content_1.default, { apiVersion: builderContext.apiVersion, apiKey: builderContext.apiKey, context: builderContext.context, customComponents: Object.values(builderContext.registeredComponents), data: {
|
|
100
101
|
...(_a = props.symbol) === null || _a === void 0 ? void 0 : _a.data,
|
|
101
|
-
...builderContext.
|
|
102
|
+
...builderContext.localState,
|
|
102
103
|
...(_b = contentToUse === null || contentToUse === void 0 ? void 0 : contentToUse.data) === null || _b === void 0 ? void 0 : _b.state,
|
|
103
104
|
}, model: (_c = props.symbol) === null || _c === void 0 ? void 0 : _c.model, content: contentToUse })));
|
|
104
105
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
'use client';
|
|
2
3
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
4
|
if (k2 === undefined) k2 = k;
|
|
4
5
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -38,7 +39,9 @@ function BlockStyles(props) {
|
|
|
38
39
|
function useBlock() {
|
|
39
40
|
return (0, get_processed_block_js_1.getProcessedBlock)({
|
|
40
41
|
block: props.block,
|
|
41
|
-
|
|
42
|
+
localState: props.context.localState,
|
|
43
|
+
rootState: props.context.rootState,
|
|
44
|
+
rootSetState: props.context.rootSetState,
|
|
42
45
|
context: props.context.context,
|
|
43
46
|
shouldEvaluateBindings: true,
|
|
44
47
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isEmptyHtmlElement = exports.getRepeatItemData = exports.
|
|
3
|
+
exports.isEmptyHtmlElement = exports.getRepeatItemData = exports.getComponent = void 0;
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __defProps = Object.defineProperties;
|
|
6
6
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
@@ -59,7 +59,9 @@ const getComponent = ({ block, context }) => {
|
|
|
59
59
|
var _a;
|
|
60
60
|
const componentName = (_a = (0, get_processed_block_1.getProcessedBlock)({
|
|
61
61
|
block,
|
|
62
|
-
|
|
62
|
+
localState: context.localState,
|
|
63
|
+
rootState: context.rootState,
|
|
64
|
+
rootSetState: context.rootSetState,
|
|
63
65
|
context: context.context,
|
|
64
66
|
shouldEvaluateBindings: false
|
|
65
67
|
}).component) == null ? void 0 : _a.name;
|
|
@@ -85,7 +87,9 @@ const getRepeatItemData = ({ block, context }) => {
|
|
|
85
87
|
}
|
|
86
88
|
const itemsArray = (0, evaluate_1.evaluate)({
|
|
87
89
|
code: repeat.collection,
|
|
88
|
-
|
|
90
|
+
localState: context.localState,
|
|
91
|
+
rootState: context.rootState,
|
|
92
|
+
rootSetState: context.rootSetState,
|
|
89
93
|
context: context.context
|
|
90
94
|
});
|
|
91
95
|
if (!Array.isArray(itemsArray)) {
|
|
@@ -95,7 +99,7 @@ const getRepeatItemData = ({ block, context }) => {
|
|
|
95
99
|
const itemNameToUse = repeat.itemName || (collectionName ? collectionName + "Item" : "item");
|
|
96
100
|
const repeatArray = itemsArray.map((item, index) => ({
|
|
97
101
|
context: __spreadProps(__spreadValues({}, context), {
|
|
98
|
-
|
|
102
|
+
localState: __spreadProps(__spreadValues({}, context.localState), {
|
|
99
103
|
$index: index,
|
|
100
104
|
$item: item,
|
|
101
105
|
[itemNameToUse]: item,
|
|
@@ -107,19 +111,3 @@ const getRepeatItemData = ({ block, context }) => {
|
|
|
107
111
|
return repeatArray;
|
|
108
112
|
};
|
|
109
113
|
exports.getRepeatItemData = getRepeatItemData;
|
|
110
|
-
const getProxyState = (context) => {
|
|
111
|
-
if (typeof Proxy === "undefined") {
|
|
112
|
-
console.error("no Proxy available in this environment, cannot proxy state.");
|
|
113
|
-
return context.state;
|
|
114
|
-
}
|
|
115
|
-
const useState = new Proxy(context.state, {
|
|
116
|
-
set: (obj, prop, value) => {
|
|
117
|
-
var _a;
|
|
118
|
-
obj[prop] = value;
|
|
119
|
-
(_a = context.setState) == null ? void 0 : _a.call(context, obj);
|
|
120
|
-
return true;
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
return useState;
|
|
124
|
-
};
|
|
125
|
-
exports.getProxyState = getProxyState;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
'use client';
|
|
2
3
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
4
|
if (k2 === undefined) k2 = k;
|
|
4
5
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -41,26 +42,30 @@ const extract_text_styles_js_1 = require("../../functions/extract-text-styles.js
|
|
|
41
42
|
const render_component_1 = __importDefault(require("./render-component"));
|
|
42
43
|
const get_react_native_block_styles_js_1 = require("../../functions/get-react-native-block-styles.js");
|
|
43
44
|
function RenderBlock(props) {
|
|
44
|
-
var _a, _b;
|
|
45
|
+
var _a, _b, _c;
|
|
45
46
|
const [component, setComponent] = (0, react_1.useState)(() => (0, render_block_helpers_js_1.getComponent)({
|
|
46
47
|
block: props.block,
|
|
47
48
|
context: props.context,
|
|
48
49
|
}));
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
function repeatItem() {
|
|
51
|
+
return (0, render_block_helpers_js_1.getRepeatItemData)({
|
|
52
|
+
block: props.block,
|
|
53
|
+
context: props.context,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
53
56
|
function useBlock() {
|
|
54
|
-
return
|
|
57
|
+
return repeatItem()
|
|
55
58
|
? props.block
|
|
56
59
|
: (0, get_processed_block_js_1.getProcessedBlock)({
|
|
57
60
|
block: props.block,
|
|
58
|
-
|
|
61
|
+
localState: props.context.localState,
|
|
62
|
+
rootState: props.context.rootState,
|
|
63
|
+
rootSetState: props.context.rootSetState,
|
|
59
64
|
context: props.context.context,
|
|
60
65
|
shouldEvaluateBindings: true,
|
|
61
66
|
});
|
|
62
67
|
}
|
|
63
|
-
const [
|
|
68
|
+
const [Tag, setTag] = (0, react_1.useState)(() => props.block.tagName || "div");
|
|
64
69
|
function canShowBlock() {
|
|
65
70
|
if ("hide" in useBlock()) {
|
|
66
71
|
return !useBlock().hide;
|
|
@@ -70,11 +75,12 @@ function RenderBlock(props) {
|
|
|
70
75
|
}
|
|
71
76
|
return true;
|
|
72
77
|
}
|
|
73
|
-
const [proxyState, setProxyState] = (0, react_1.useState)(() => (0, render_block_helpers_js_1.getProxyState)(props.context));
|
|
74
78
|
function actions() {
|
|
75
79
|
return (0, get_block_actions_js_1.getBlockActions)({
|
|
76
80
|
block: useBlock(),
|
|
77
|
-
|
|
81
|
+
rootState: props.context.rootState,
|
|
82
|
+
rootSetState: props.context.rootSetState,
|
|
83
|
+
localState: props.context.localState,
|
|
78
84
|
context: props.context.context,
|
|
79
85
|
});
|
|
80
86
|
}
|
|
@@ -101,7 +107,7 @@ function RenderBlock(props) {
|
|
|
101
107
|
* NOTE: We make sure not to render this if `repeatItemData` is non-null, because that means we are rendering an array of
|
|
102
108
|
* blocks, and the children will be repeated within those blocks.
|
|
103
109
|
*/
|
|
104
|
-
const shouldRenderChildrenOutsideRef = !(component === null || component === void 0 ? void 0 : component.component) && !
|
|
110
|
+
const shouldRenderChildrenOutsideRef = !(component === null || component === void 0 ? void 0 : component.component) && !repeatItem();
|
|
105
111
|
return shouldRenderChildrenOutsideRef ? (_a = useBlock().children) !== null && _a !== void 0 ? _a : [] : [];
|
|
106
112
|
}
|
|
107
113
|
function childrenContext() {
|
|
@@ -118,10 +124,11 @@ function RenderBlock(props) {
|
|
|
118
124
|
return {
|
|
119
125
|
apiKey: props.context.apiKey,
|
|
120
126
|
apiVersion: props.context.apiVersion,
|
|
121
|
-
|
|
127
|
+
localState: props.context.localState,
|
|
128
|
+
rootState: props.context.rootState,
|
|
129
|
+
rootSetState: props.context.rootSetState,
|
|
122
130
|
content: props.context.content,
|
|
123
131
|
context: props.context.context,
|
|
124
|
-
setState: props.context.setState,
|
|
125
132
|
registeredComponents: props.context.registeredComponents,
|
|
126
133
|
inheritedStyles: getInheritedTextStyles(),
|
|
127
134
|
};
|
|
@@ -150,14 +157,14 @@ function RenderBlock(props) {
|
|
|
150
157
|
};
|
|
151
158
|
}
|
|
152
159
|
return (React.createElement(React.Fragment, null, canShowBlock() ? (React.createElement(React.Fragment, null, !(component === null || component === void 0 ? void 0 : component.noWrap) ? (React.createElement(React.Fragment, null,
|
|
153
|
-
(0, render_block_helpers_js_1.isEmptyHtmlElement)(
|
|
154
|
-
React.createElement(
|
|
155
|
-
!(0, render_block_helpers_js_1.isEmptyHtmlElement)(
|
|
156
|
-
!(0, render_block_helpers_js_1.isEmptyHtmlElement)(
|
|
157
|
-
React.createElement(
|
|
158
|
-
React.createElement(render_component_1.default, { ...renderComponentProps() }), (
|
|
159
|
-
|
|
160
|
-
|
|
160
|
+
(0, render_block_helpers_js_1.isEmptyHtmlElement)(Tag) ? (React.createElement(React.Fragment, null,
|
|
161
|
+
React.createElement(Tag, { ...attributes(), ...actions() }))) : null,
|
|
162
|
+
!(0, render_block_helpers_js_1.isEmptyHtmlElement)(Tag) && repeatItem() ? (React.createElement(React.Fragment, null, (_a = repeatItem()) === null || _a === void 0 ? void 0 : _a.map((data, index) => (React.createElement(render_repeated_block_1.default, { key: index, repeatContext: data.context, block: data.block }))))) : null,
|
|
163
|
+
!(0, render_block_helpers_js_1.isEmptyHtmlElement)(Tag) && !repeatItem() ? (React.createElement(React.Fragment, null,
|
|
164
|
+
React.createElement(Tag, { ...attributes(), ...actions() },
|
|
165
|
+
React.createElement(render_component_1.default, { ...renderComponentProps() }), (_b = childrenWithoutParentComponent()) === null || _b === void 0 ? void 0 :
|
|
166
|
+
_b.map((child) => (React.createElement(RenderBlock, { key: "render-block-" + child.id, block: child, context: childrenContext() }))), (_c = childrenWithoutParentComponent()) === null || _c === void 0 ? void 0 :
|
|
167
|
+
_c.map((child) => (React.createElement(block_styles_1.default, { key: "block-style-" + child.id, block: child, context: childrenContext() })))))) : null)) : (React.createElement(React.Fragment, null,
|
|
161
168
|
React.createElement(render_component_1.default, { ...renderComponentProps() }))))) : null));
|
|
162
169
|
}
|
|
163
170
|
exports.default = RenderBlock;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
'use client';
|
|
2
3
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
4
|
if (k2 === undefined) k2 = k;
|
|
4
5
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -34,17 +35,17 @@ const render_block_1 = __importDefault(require("./render-block"));
|
|
|
34
35
|
const builder_context_js_1 = __importDefault(require("../../context/builder.context.js"));
|
|
35
36
|
function RenderComponent(props) {
|
|
36
37
|
var _a, _b;
|
|
37
|
-
const ComponentRefRef = props.componentRef;
|
|
38
38
|
return (React.createElement(builder_context_js_1.default.Provider, { value: {
|
|
39
39
|
content: props.context.content,
|
|
40
|
-
|
|
40
|
+
rootState: props.context.rootState,
|
|
41
|
+
localState: props.context.localState,
|
|
41
42
|
context: props.context.context,
|
|
42
43
|
apiKey: props.context.apiKey,
|
|
43
44
|
registeredComponents: props.context.registeredComponents,
|
|
44
45
|
inheritedStyles: props.context.inheritedStyles,
|
|
45
46
|
apiVersion: props.context.apiVersion,
|
|
46
47
|
} }, props.componentRef ? (React.createElement(React.Fragment, null,
|
|
47
|
-
React.createElement(
|
|
48
|
+
React.createElement(props.componentRef, { ...props.componentOptions }, (_a = props.blockChildren) === null || _a === void 0 ? void 0 :
|
|
48
49
|
_a.map((child) => (React.createElement(render_block_1.default, { key: "render-block-" + child.id, block: child, context: props.context }))), (_b = props.blockChildren) === null || _b === void 0 ? void 0 :
|
|
49
50
|
_b.map((child) => (React.createElement(block_styles_1.default, { key: "block-style-" + child.id, block: child, context: props.context })))))) : null));
|
|
50
51
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
'use client';
|
|
2
3
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
4
|
if (k2 === undefined) k2 = k;
|
|
4
5
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -34,8 +35,9 @@ const render_block_1 = __importDefault(require("./render-block"));
|
|
|
34
35
|
function RenderRepeatedBlock(props) {
|
|
35
36
|
return (React.createElement(builder_context_js_1.default.Provider, { value: {
|
|
36
37
|
content: props.repeatContext.content,
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
localState: props.repeatContext.localState,
|
|
39
|
+
rootState: props.repeatContext.rootState,
|
|
40
|
+
rootSetState: props.repeatContext.rootSetState,
|
|
39
41
|
context: props.repeatContext.context,
|
|
40
42
|
apiKey: props.repeatContext.apiKey,
|
|
41
43
|
registeredComponents: props.repeatContext.registeredComponents,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
'use client';
|
|
2
3
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
4
|
if (k2 === undefined) k2 = k;
|
|
4
5
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -54,7 +55,7 @@ ${(0, render_styles_helpers_2.getFontCss)({
|
|
|
54
55
|
text-align: inherit;
|
|
55
56
|
font-family: inherit;
|
|
56
57
|
}
|
|
57
|
-
|
|
58
|
+
`.trim());
|
|
58
59
|
return React.createElement(render_inlined_styles_1.default, { styles: injectedStyles });
|
|
59
60
|
}
|
|
60
61
|
exports.default = RenderContentStyles;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
'use client';
|
|
2
3
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
4
|
if (k2 === undefined) k2 = k;
|
|
4
5
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -47,6 +48,8 @@ const interaction_js_1 = require("../../functions/track/interaction.js");
|
|
|
47
48
|
const render_content_helpers_js_1 = require("./render-content.helpers.js");
|
|
48
49
|
const target_js_1 = require("../../constants/target.js");
|
|
49
50
|
const logger_js_1 = require("../../helpers/logger.js");
|
|
51
|
+
const helpers_js_1 = require("../render-content-variants/helpers.js");
|
|
52
|
+
const wrap_component_ref_js_1 = require("./wrap-component-ref.js");
|
|
50
53
|
function RenderContent(props) {
|
|
51
54
|
var _a, _b, _c, _d, _e;
|
|
52
55
|
const elementRef = (0, react_1.useRef)(null);
|
|
@@ -88,8 +91,8 @@ function RenderContent(props) {
|
|
|
88
91
|
data: props.data,
|
|
89
92
|
locale: props.locale,
|
|
90
93
|
}));
|
|
91
|
-
function
|
|
92
|
-
setContentState(
|
|
94
|
+
function contentSetState(newRootState) {
|
|
95
|
+
setContentState(newRootState);
|
|
93
96
|
}
|
|
94
97
|
const [allRegisteredComponents, setAllRegisteredComponents] = (0, react_1.useState)(() => [
|
|
95
98
|
...(0, builder_registered_components_js_1.getDefaultRegisteredComponents)(),
|
|
@@ -100,9 +103,12 @@ function RenderContent(props) {
|
|
|
100
103
|
// which is the new standard way of providing custom components, and must therefore take precedence.
|
|
101
104
|
...register_component_js_1.components,
|
|
102
105
|
...(props.customComponents || []),
|
|
103
|
-
].reduce((acc, curr) => ({
|
|
106
|
+
].reduce((acc, { component, ...curr }) => ({
|
|
104
107
|
...acc,
|
|
105
|
-
[curr.name]:
|
|
108
|
+
[curr.name]: {
|
|
109
|
+
component: target_js_1.TARGET === "vue3" ? (0, wrap_component_ref_js_1.wrapComponentRef)(component) : component,
|
|
110
|
+
...curr,
|
|
111
|
+
},
|
|
106
112
|
}), {}));
|
|
107
113
|
function processMessage(event) {
|
|
108
114
|
const { data } = event;
|
|
@@ -148,7 +154,9 @@ function RenderContent(props) {
|
|
|
148
154
|
(0, evaluate_js_1.evaluate)({
|
|
149
155
|
code: jsCode,
|
|
150
156
|
context: props.context || {},
|
|
151
|
-
|
|
157
|
+
localState: undefined,
|
|
158
|
+
rootState: contentState,
|
|
159
|
+
rootSetState: contentSetState,
|
|
152
160
|
});
|
|
153
161
|
}
|
|
154
162
|
}
|
|
@@ -176,7 +184,9 @@ function RenderContent(props) {
|
|
|
176
184
|
return expression.replace(/{{([^}]+)}}/g, (_match, group) => (0, evaluate_js_1.evaluate)({
|
|
177
185
|
code: group,
|
|
178
186
|
context: props.context || {},
|
|
179
|
-
|
|
187
|
+
localState: undefined,
|
|
188
|
+
rootState: contentState,
|
|
189
|
+
rootSetState: contentSetState,
|
|
180
190
|
}));
|
|
181
191
|
}
|
|
182
192
|
function handleRequest({ url, key }) {
|
|
@@ -187,7 +197,7 @@ function RenderContent(props) {
|
|
|
187
197
|
...contentState,
|
|
188
198
|
[key]: json,
|
|
189
199
|
};
|
|
190
|
-
|
|
200
|
+
contentSetState(newState);
|
|
191
201
|
})
|
|
192
202
|
.catch((err) => {
|
|
193
203
|
console.error("error fetching dynamic data", url, err);
|
|
@@ -218,6 +228,14 @@ function RenderContent(props) {
|
|
|
218
228
|
}));
|
|
219
229
|
}
|
|
220
230
|
}
|
|
231
|
+
const [scriptStr, setScriptStr] = (0, react_1.useState)(() => {
|
|
232
|
+
var _a;
|
|
233
|
+
return (0, helpers_js_1.getRenderContentScriptString)({
|
|
234
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
|
|
235
|
+
contentId: (_a = props.content) === null || _a === void 0 ? void 0 : _a.id,
|
|
236
|
+
parentContentId: props.parentContentId,
|
|
237
|
+
});
|
|
238
|
+
});
|
|
221
239
|
(0, react_1.useEffect)(() => {
|
|
222
240
|
if (!props.apiKey) {
|
|
223
241
|
logger_js_1.logger.error("No API key provided to `RenderContent` component. This can cause issues. Please provide an API key using the `apiKey` prop.");
|
|
@@ -237,6 +255,11 @@ function RenderContent(props) {
|
|
|
237
255
|
includeRefs: props.includeRefs,
|
|
238
256
|
}
|
|
239
257
|
: {}),
|
|
258
|
+
...(props.enrich
|
|
259
|
+
? {
|
|
260
|
+
enrich: props.enrich,
|
|
261
|
+
}
|
|
262
|
+
: {}),
|
|
240
263
|
});
|
|
241
264
|
Object.values(allRegisteredComponents).forEach((registeredComponent) => {
|
|
242
265
|
var _a;
|
|
@@ -313,15 +336,30 @@ function RenderContent(props) {
|
|
|
313
336
|
}, []);
|
|
314
337
|
return (React.createElement(builder_context_js_1.default.Provider, { value: {
|
|
315
338
|
content: useContent,
|
|
316
|
-
|
|
317
|
-
|
|
339
|
+
localState: undefined,
|
|
340
|
+
rootState: contentState,
|
|
341
|
+
rootSetState: target_js_1.TARGET === "qwik" ? undefined : contentSetState,
|
|
318
342
|
context: props.context || {},
|
|
319
343
|
apiKey: props.apiKey,
|
|
320
344
|
apiVersion: props.apiVersion,
|
|
321
345
|
registeredComponents: allRegisteredComponents,
|
|
322
346
|
inheritedStyles: {},
|
|
323
347
|
} }, useContent ? (React.createElement(React.Fragment, null,
|
|
324
|
-
React.createElement(react_native_1.ScrollView, { ref: elementRef, onClick: (event) => onClick(event), "builder-content-id": useContent === null || useContent === void 0 ? void 0 : useContent.id, "builder-model": props.model
|
|
348
|
+
React.createElement(react_native_1.ScrollView, { ref: elementRef, onClick: (event) => onClick(event), "builder-content-id": useContent === null || useContent === void 0 ? void 0 : useContent.id, "builder-model": props.model, ...(target_js_1.TARGET === "reactNative"
|
|
349
|
+
? {
|
|
350
|
+
dataSet: {
|
|
351
|
+
// currently, we can't set the actual ID here. // we don't need it right now, we just need to identify content divs for testing.
|
|
352
|
+
"builder-content-id": "",
|
|
353
|
+
},
|
|
354
|
+
}
|
|
355
|
+
: {}), ...(props.hideContent
|
|
356
|
+
? {
|
|
357
|
+
hidden: true,
|
|
358
|
+
"aria-hidden": true,
|
|
359
|
+
}
|
|
360
|
+
: {}) },
|
|
361
|
+
props.isSsrAbTest ? (React.createElement(React.Fragment, null,
|
|
362
|
+
React.createElement(react_native_1.ScrollView, { dangerouslySetInnerHTML: { __html: scriptStr } }))) : null,
|
|
325
363
|
target_js_1.TARGET !== "reactNative" ? (React.createElement(React.Fragment, null,
|
|
326
364
|
React.createElement(render_styles_1.default, { contentId: useContent === null || useContent === void 0 ? void 0 : useContent.id, cssCode: (_c = useContent === null || useContent === void 0 ? void 0 : useContent.data) === null || _c === void 0 ? void 0 : _c.cssCode, customFonts: (_d = useContent === null || useContent === void 0 ? void 0 : useContent.data) === null || _d === void 0 ? void 0 : _d.customFonts }))) : null,
|
|
327
365
|
React.createElement(render_blocks_1.default, { blocks: (_e = useContent === null || useContent === void 0 ? void 0 : useContent.data) === null || _e === void 0 ? void 0 : _e.blocks, key: forceReRenderCount })))) : null));
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getVariantsScriptString = exports.getVariants = exports.getRenderContentScriptString = exports.checkShouldRunVariants = void 0;
|
|
4
|
+
const is_browser_1 = require("../../functions/is-browser");
|
|
5
|
+
const getVariants = (content) => Object.values((content == null ? void 0 : content.variations) || {});
|
|
6
|
+
exports.getVariants = getVariants;
|
|
7
|
+
const checkShouldRunVariants = ({ canTrack, content }) => {
|
|
8
|
+
const hasVariants = getVariants(content).length > 0;
|
|
9
|
+
if (!hasVariants) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
if (!canTrack) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if ((0, is_browser_1.isBrowser)()) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return true;
|
|
19
|
+
};
|
|
20
|
+
exports.checkShouldRunVariants = checkShouldRunVariants;
|
|
21
|
+
function bldrAbTest(contentId, variants, isHydrationTarget2) {
|
|
22
|
+
function getAndSetVariantId() {
|
|
23
|
+
function setCookie(name, value, days) {
|
|
24
|
+
let expires = "";
|
|
25
|
+
if (days) {
|
|
26
|
+
const date = new Date();
|
|
27
|
+
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1e3);
|
|
28
|
+
expires = "; expires=" + date.toUTCString();
|
|
29
|
+
}
|
|
30
|
+
document.cookie = name + "=" + (value || "") + expires + "; path=/; Secure; SameSite=None";
|
|
31
|
+
}
|
|
32
|
+
function getCookie(name) {
|
|
33
|
+
const nameEQ = name + "=";
|
|
34
|
+
const ca = document.cookie.split(";");
|
|
35
|
+
for (let i = 0; i < ca.length; i++) {
|
|
36
|
+
let c = ca[i];
|
|
37
|
+
while (c.charAt(0) === " ")
|
|
38
|
+
c = c.substring(1, c.length);
|
|
39
|
+
if (c.indexOf(nameEQ) === 0)
|
|
40
|
+
return c.substring(nameEQ.length, c.length);
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const cookieName = `builder.tests.${contentId}`;
|
|
45
|
+
const variantInCookie = getCookie(cookieName);
|
|
46
|
+
const availableIDs = variants.map((vr) => vr.id).concat(contentId);
|
|
47
|
+
if (variantInCookie && availableIDs.includes(variantInCookie)) {
|
|
48
|
+
return variantInCookie;
|
|
49
|
+
}
|
|
50
|
+
let n = 0;
|
|
51
|
+
const random = Math.random();
|
|
52
|
+
for (let i = 0; i < variants.length; i++) {
|
|
53
|
+
const variant = variants[i];
|
|
54
|
+
const testRatio = variant.testRatio;
|
|
55
|
+
n += testRatio;
|
|
56
|
+
if (random < n) {
|
|
57
|
+
setCookie(cookieName, variant.id);
|
|
58
|
+
return variant.id;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
setCookie(cookieName, contentId);
|
|
62
|
+
return contentId;
|
|
63
|
+
}
|
|
64
|
+
const winningVariantId = getAndSetVariantId();
|
|
65
|
+
const styleEl = document.getElementById(`variants-styles-${contentId}`);
|
|
66
|
+
if (isHydrationTarget2) {
|
|
67
|
+
styleEl.remove();
|
|
68
|
+
const thisScriptEl = document.getElementById(`variants-script-${contentId}`);
|
|
69
|
+
thisScriptEl == null ? void 0 : thisScriptEl.remove();
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const newStyleStr = variants.concat({ id: contentId }).filter((variant) => variant.id !== winningVariantId).map((value) => {
|
|
73
|
+
return `.variant-${value.id} { display: none; }
|
|
74
|
+
`;
|
|
75
|
+
}).join("");
|
|
76
|
+
styleEl.innerHTML = newStyleStr;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function bldrCntntScrpt(variantContentId, defaultContentId, isHydrationTarget2) {
|
|
80
|
+
if (!navigator.cookieEnabled) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
function getCookie(name) {
|
|
84
|
+
const nameEQ = name + "=";
|
|
85
|
+
const ca = document.cookie.split(";");
|
|
86
|
+
for (let i = 0; i < ca.length; i++) {
|
|
87
|
+
let c = ca[i];
|
|
88
|
+
while (c.charAt(0) === " ")
|
|
89
|
+
c = c.substring(1, c.length);
|
|
90
|
+
if (c.indexOf(nameEQ) === 0)
|
|
91
|
+
return c.substring(nameEQ.length, c.length);
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
const cookieName = `builder.tests.${defaultContentId}`;
|
|
96
|
+
const variantId = getCookie(cookieName);
|
|
97
|
+
const parentDiv = document.querySelector(`[builder-content-id="${variantContentId}"]`);
|
|
98
|
+
const variantIsDefaultContent = variantContentId === defaultContentId;
|
|
99
|
+
if (variantId === variantContentId) {
|
|
100
|
+
if (variantIsDefaultContent) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
parentDiv == null ? void 0 : parentDiv.removeAttribute("hidden");
|
|
104
|
+
parentDiv == null ? void 0 : parentDiv.removeAttribute("aria-hidden");
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
if (variantIsDefaultContent) {
|
|
108
|
+
if (isHydrationTarget2) {
|
|
109
|
+
parentDiv == null ? void 0 : parentDiv.remove();
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
parentDiv == null ? void 0 : parentDiv.setAttribute("hidden", "true");
|
|
113
|
+
parentDiv == null ? void 0 : parentDiv.setAttribute("aria-hidden", "true");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const isHydrationTarget = (target) => target === "react" || target === "reactNative" || target === "vue3" || target === "vue2";
|
|
121
|
+
const AB_TEST_FN_NAME = "bldrAbTest";
|
|
122
|
+
const CONTENT_FN_NAME = "bldrCntntScrpt";
|
|
123
|
+
const getVariantsScriptString = (variants, contentId) => {
|
|
124
|
+
const fnStr = bldrAbTest.toString().replace(/\s+/g, " ");
|
|
125
|
+
const fnStr2 = bldrCntntScrpt.toString().replace(/\s+/g, " ");
|
|
126
|
+
return `
|
|
127
|
+
const ${AB_TEST_FN_NAME} = ${fnStr}
|
|
128
|
+
const ${CONTENT_FN_NAME} = ${fnStr2}
|
|
129
|
+
${AB_TEST_FN_NAME}("${contentId}", ${JSON.stringify(variants)}, ${isHydrationTarget})
|
|
130
|
+
`;
|
|
131
|
+
};
|
|
132
|
+
exports.getVariantsScriptString = getVariantsScriptString;
|
|
133
|
+
const getRenderContentScriptString = ({ parentContentId, contentId }) => {
|
|
134
|
+
return `
|
|
135
|
+
${CONTENT_FN_NAME}("${contentId}", "${parentContentId}", ${isHydrationTarget})`;
|
|
136
|
+
};
|
|
137
|
+
exports.getRenderContentScriptString = getRenderContentScriptString;
|