@builder.io/sdk-solid 0.4.4 → 0.5.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/CHANGELOG.md +13 -0
- package/package.json +1 -1
- package/src/blocks/BaseText.jsx +1 -1
- package/src/blocks/button/button.jsx +5 -3
- package/src/blocks/button/component-info.js +16 -22
- package/src/blocks/columns/columns.jsx +14 -23
- package/src/blocks/columns/component-info.js +203 -226
- package/src/blocks/custom-code/component-info.js +19 -25
- package/src/blocks/embed/component-info.js +31 -37
- package/src/blocks/embed/helpers.js +3 -9
- package/src/blocks/form/component-info.js +174 -212
- package/src/blocks/form/form.jsx +1 -268
- package/src/blocks/fragment/component-info.js +1 -3
- package/src/blocks/helpers.js +27 -0
- package/src/blocks/image/component-info.js +105 -133
- package/src/blocks/image/image.helpers.js +3 -5
- package/src/blocks/img/component-info.js +8 -12
- package/src/blocks/img/img.jsx +2 -0
- package/src/blocks/input/component-info.js +29 -57
- package/src/blocks/input/input.jsx +2 -0
- package/src/blocks/raw-text/component-info.js +7 -11
- package/src/blocks/raw-text/raw-text.jsx +2 -2
- package/src/blocks/section/component-info.js +24 -31
- package/src/blocks/section/section.jsx +3 -0
- package/src/blocks/select/component-info.js +34 -48
- package/src/blocks/select/select.jsx +2 -0
- package/src/blocks/submit-button/component-info.js +6 -10
- package/src/blocks/submit-button/submit-button.jsx +3 -1
- package/src/blocks/symbol/component-info.js +30 -37
- package/src/blocks/symbol/symbol.helpers.js +60 -0
- package/src/blocks/symbol/symbol.jsx +32 -66
- package/src/blocks/text/component-info.js +10 -13
- package/src/blocks/text/text.jsx +1 -1
- package/src/blocks/textarea/component-info.js +22 -30
- package/src/blocks/textarea/textarea.jsx +3 -0
- package/src/blocks/video/component-info.js +74 -96
- package/src/blocks/video/video.jsx +1 -0
- package/src/components/{render-block/render-block.helpers.js → block/block.helpers.js} +26 -44
- package/src/components/{render-block/render-block.jsx → block/block.jsx} +65 -80
- package/src/components/{render-block → block/components}/block-styles.jsx +17 -17
- package/src/components/block/components/block-wrapper.jsx +50 -0
- package/src/components/block/components/component-ref/component-ref.helpers.js +41 -0
- package/src/components/block/components/component-ref/component-ref.jsx +58 -0
- package/src/components/block/components/interactive-element.jsx +30 -0
- package/src/components/block/components/repeated-block.jsx +20 -0
- package/src/components/blocks/blocks-wrapper.jsx +66 -0
- package/src/components/blocks/blocks.jsx +48 -0
- package/src/components/{render-content/render-content.jsx → content/components/enable-editor.jsx} +90 -177
- package/src/components/{render-content/components/render-styles.helpers.js → content/components/styles.helpers.js} +6 -7
- package/src/components/{render-content/components/render-styles.jsx → content/components/styles.jsx} +6 -6
- package/src/components/{render-content/render-content.helpers.js → content/content.helpers.js} +15 -15
- package/src/components/content/content.jsx +129 -0
- package/src/components/content/content.types.js +0 -0
- package/src/components/content/index.js +2 -0
- package/src/components/content/wrap-component-ref.js +2 -0
- package/src/components/content-variants/content-variants.jsx +110 -0
- package/src/components/{render-content-variants → content-variants}/helpers.js +58 -41
- package/src/components/inlined-script.jsx +5 -0
- package/src/components/inlined-styles.jsx +5 -0
- package/src/constants/builder-registered-components.js +34 -25
- package/src/constants/device-sizes.js +6 -6
- package/src/constants/sdk-version.js +1 -1
- package/src/context/builder.context.js +1 -1
- package/src/functions/apply-patch-with-mutation.js +66 -0
- package/src/functions/camel-to-kebab-case.js +2 -4
- package/src/functions/evaluate/acorn.js +1595 -0
- package/src/functions/{evaluate.js → evaluate/evaluate.js} +36 -10
- package/src/functions/evaluate/index.js +2 -0
- package/src/functions/evaluate/interpreter.js +2801 -0
- package/src/functions/evaluate/non-node-runtime.js +92 -0
- package/src/functions/evaluate/types.js +0 -0
- package/src/functions/event-handler-name.js +2 -4
- package/src/functions/extract-text-styles.js +4 -12
- package/src/functions/fast-clone.js +2 -4
- package/src/functions/get-block-actions-handler.js +3 -5
- package/src/functions/get-block-actions.js +15 -4
- package/src/functions/get-block-component-options.js +11 -12
- package/src/functions/get-block-properties.js +29 -19
- package/src/functions/get-builder-search-params/index.js +5 -10
- package/src/functions/get-content/generate-content-url.js +17 -19
- package/src/functions/get-content/index.js +43 -29
- package/src/functions/get-fetch.js +1 -3
- package/src/functions/get-global-this.js +1 -3
- package/src/functions/get-processed-block.js +12 -13
- package/src/functions/get-react-native-block-styles.js +11 -12
- package/src/functions/if-target.js +1 -3
- package/src/functions/is-browser.js +1 -3
- package/src/functions/is-editing.js +1 -3
- package/src/functions/is-iframe.js +1 -3
- package/src/functions/is-non-node-server.js +9 -0
- package/src/functions/is-previewing.js +1 -3
- package/src/functions/on-change.js +1 -4
- package/src/functions/register-component.js +34 -42
- package/src/functions/register.js +1 -3
- package/src/functions/sanitize-react-native-block-styles.js +22 -17
- package/src/functions/set-editor-settings.js +1 -3
- package/src/functions/set.js +1 -3
- package/src/functions/track/helpers.js +3 -5
- package/src/functions/track/index.js +45 -43
- package/src/functions/track/interaction.js +11 -7
- package/src/functions/transform-block-properties.js +1 -3
- package/src/functions/transform-block.js +1 -3
- package/src/helpers/ab-tests.js +46 -26
- package/src/helpers/canTrack.js +3 -5
- package/src/helpers/cookie.js +15 -24
- package/src/helpers/css.js +3 -7
- package/src/helpers/flatten.js +15 -18
- package/src/helpers/localStorage.js +1 -4
- package/src/helpers/logger.js +1 -3
- package/src/helpers/nullable.js +2 -4
- package/src/helpers/preview-lru-cache/get.js +8 -0
- package/src/helpers/preview-lru-cache/helpers.js +10 -0
- package/src/helpers/preview-lru-cache/init.js +10 -0
- package/src/helpers/preview-lru-cache/set.js +35 -0
- package/src/helpers/preview-lru-cache/types.js +0 -0
- package/src/helpers/sessionId.js +14 -11
- package/src/helpers/time.js +1 -3
- package/src/helpers/url.js +2 -4
- package/src/helpers/uuid.js +4 -6
- package/src/helpers/visitorId.js +8 -7
- package/src/index-helpers/blocks-exports.js +3 -14
- package/src/index-helpers/top-of-file.js +1 -3
- package/src/index.js +2 -17
- package/src/scripts/init-editing.js +62 -48
- package/src/types/api-version.js +1 -3
- package/src/types/builder-props.js +0 -0
- package/src/types/enforced-partials.js +0 -0
- package/src/blocks/util.js +0 -8
- package/src/components/render-block/render-component.jsx +0 -40
- package/src/components/render-block/render-repeated-block.jsx +0 -16
- package/src/components/render-blocks.jsx +0 -100
- package/src/components/render-content/builder-editing.jsx +0 -5
- package/src/components/render-content/index.js +0 -4
- package/src/components/render-content/wrap-component-ref.js +0 -4
- package/src/components/render-content-variants/render-content-variants.jsx +0 -94
- package/src/components/render-inlined-styles.jsx +0 -5
- package/src/functions/evaluate.test.js +0 -17
- package/src/functions/get-builder-search-params/fn.test.js +0 -13
- package/src/functions/get-content/generate-content-url.test.js +0 -97
- package/src/functions/get-processed-block.test.js +0 -34
- package/src/functions/on-change.test.js +0 -19
- package/src/functions/set.test.js +0 -16
- package/src/helpers/url.test.js +0 -21
- /package/src/components/{render-block → block}/types.js +0 -0
- /package/src/components/{render-content/render-content.types.js → content-variants/content-variants.types.js} +0 -0
package/src/components/{render-content/render-content.jsx → content/components/enable-editor.jsx}
RENAMED
|
@@ -1,134 +1,57 @@
|
|
|
1
1
|
import { Show, onMount, on, createEffect, createSignal } from "solid-js";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
11
|
-
components,
|
|
12
|
-
createRegisterComponentMessage,
|
|
13
|
-
} from "../../functions/register-component.js";
|
|
14
|
-
import { _track } from "../../functions/track/index.js";
|
|
15
|
-
import RenderBlocks from "../render-blocks.jsx";
|
|
16
|
-
import RenderContentStyles from "./components/render-styles.jsx";
|
|
17
|
-
import builderContext from "../../context/builder.context.js";
|
|
3
|
+
import { evaluate } from "../../../functions/evaluate";
|
|
4
|
+
import { fetch } from "../../../functions/get-fetch.js";
|
|
5
|
+
import { isBrowser } from "../../../functions/is-browser.js";
|
|
6
|
+
import { isEditing } from "../../../functions/is-editing.js";
|
|
7
|
+
import { createRegisterComponentMessage } from "../../../functions/register-component.js";
|
|
8
|
+
import { _track } from "../../../functions/track/index.js";
|
|
9
|
+
import builderContext from "../../../context/builder.context";
|
|
18
10
|
import {
|
|
19
11
|
registerInsertMenu,
|
|
20
12
|
setupBrowserForEditing,
|
|
21
|
-
} from "
|
|
22
|
-
import { checkIsDefined } from "
|
|
23
|
-
import { getInteractionPropertiesForEvent } from "
|
|
24
|
-
import {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
} from "
|
|
28
|
-
import { TARGET } from "../../constants/target.js";
|
|
29
|
-
import { logger } from "../../helpers/logger.js";
|
|
30
|
-
import { getRenderContentScriptString } from "../render-content-variants/helpers.js";
|
|
31
|
-
import { wrapComponentRef } from "./wrap-component-ref.js";
|
|
32
|
-
|
|
33
|
-
function RenderContent(props) {
|
|
34
|
-
const [forceReRenderCount, setForceReRenderCount] = createSignal(0);
|
|
35
|
-
|
|
36
|
-
const [overrideContent, setOverrideContent] = createSignal(null);
|
|
37
|
-
|
|
38
|
-
const [update, setUpdate] = createSignal(0);
|
|
13
|
+
} from "../../../scripts/init-editing.js";
|
|
14
|
+
import { checkIsDefined } from "../../../helpers/nullable.js";
|
|
15
|
+
import { getInteractionPropertiesForEvent } from "../../../functions/track/interaction.js";
|
|
16
|
+
import { logger } from "../../../helpers/logger.js";
|
|
17
|
+
import { getContent } from "../../../functions/get-content/index.js";
|
|
18
|
+
import { isPreviewing } from "../../../functions/is-previewing.js";
|
|
19
|
+
import { postPreviewContent } from "../../../helpers/preview-lru-cache/set.js";
|
|
39
20
|
|
|
21
|
+
function EnableEditor(props) {
|
|
40
22
|
const [canTrackToUse, setCanTrackToUse] = createSignal(
|
|
41
23
|
checkIsDefined(props.canTrack) ? props.canTrack : true
|
|
42
24
|
);
|
|
43
25
|
|
|
44
|
-
const [
|
|
26
|
+
const [forceReRenderCount, setForceReRenderCount] = createSignal(0);
|
|
45
27
|
|
|
46
|
-
const [
|
|
28
|
+
const [lastUpdated, setLastUpdated] = createSignal(0);
|
|
47
29
|
|
|
48
|
-
const [
|
|
49
|
-
getRenderContentScriptString({
|
|
50
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
|
|
51
|
-
contentId: props.content?.id,
|
|
52
|
-
parentContentId: props.parentContentId,
|
|
53
|
-
})
|
|
54
|
-
);
|
|
30
|
+
const [shouldSendResetCookie, setShouldSendResetCookie] = createSignal(false);
|
|
55
31
|
|
|
56
|
-
const [
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
data: props.data,
|
|
60
|
-
}),
|
|
61
|
-
localState: undefined,
|
|
62
|
-
rootState: getContextStateInitialValue({
|
|
63
|
-
content: props.content,
|
|
64
|
-
data: props.data,
|
|
65
|
-
locale: props.locale,
|
|
66
|
-
}),
|
|
67
|
-
rootSetState: contentSetState,
|
|
68
|
-
context: props.context || {},
|
|
69
|
-
apiKey: props.apiKey,
|
|
70
|
-
apiVersion: props.apiVersion,
|
|
71
|
-
registeredComponents: [
|
|
72
|
-
...getDefaultRegisteredComponents(),
|
|
73
|
-
// While this `components` object is deprecated, we must maintain support for it.
|
|
74
|
-
// Since users are able to override our default components, we need to make sure that we do not break such
|
|
75
|
-
// existing usage.
|
|
76
|
-
// This is why we spread `components` after the default Builder.io components, but before the `props.customComponents`,
|
|
77
|
-
// which is the new standard way of providing custom components, and must therefore take precedence.
|
|
78
|
-
...components,
|
|
79
|
-
...(props.customComponents || []),
|
|
80
|
-
].reduce(
|
|
81
|
-
(acc, { component, ...curr }) => ({
|
|
82
|
-
...acc,
|
|
83
|
-
[curr.name]: {
|
|
84
|
-
component:
|
|
85
|
-
TARGET === "vue3" ? wrapComponentRef(component) : component,
|
|
86
|
-
...curr,
|
|
87
|
-
},
|
|
88
|
-
}),
|
|
89
|
-
{}
|
|
90
|
-
),
|
|
91
|
-
inheritedStyles: {},
|
|
92
|
-
});
|
|
32
|
+
const [httpReqsData, setHttpReqsData] = createSignal({});
|
|
33
|
+
|
|
34
|
+
const [clicked, setClicked] = createSignal(false);
|
|
93
35
|
|
|
94
36
|
function mergeNewContent(newContent) {
|
|
95
|
-
|
|
96
|
-
...
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
...
|
|
100
|
-
data
|
|
101
|
-
...builderContextSignal().content?.data,
|
|
102
|
-
...newContent?.data,
|
|
103
|
-
},
|
|
104
|
-
meta: {
|
|
105
|
-
...builderContextSignal().content?.meta,
|
|
106
|
-
...newContent?.meta,
|
|
107
|
-
breakpoints:
|
|
108
|
-
newContent?.meta?.breakpoints ||
|
|
109
|
-
builderContextSignal().content?.meta?.breakpoints,
|
|
110
|
-
},
|
|
37
|
+
const newContentValue = {
|
|
38
|
+
...props.builderContextSignal.content,
|
|
39
|
+
...newContent,
|
|
40
|
+
data: {
|
|
41
|
+
...props.builderContextSignal.content?.data,
|
|
42
|
+
...newContent?.data,
|
|
111
43
|
},
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
content: {
|
|
119
|
-
...builderContextSignal().content,
|
|
120
|
-
meta: {
|
|
121
|
-
...builderContextSignal().content?.meta,
|
|
122
|
-
breakpoints,
|
|
123
|
-
},
|
|
44
|
+
meta: {
|
|
45
|
+
...props.builderContextSignal.content?.meta,
|
|
46
|
+
...newContent?.meta,
|
|
47
|
+
breakpoints:
|
|
48
|
+
newContent?.meta?.breakpoints ||
|
|
49
|
+
props.builderContextSignal.content?.meta?.breakpoints,
|
|
124
50
|
},
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
function contentSetState(newRootState) {
|
|
129
|
-
setBuilderContextSignal((PREVIOUS_VALUE) => ({
|
|
51
|
+
};
|
|
52
|
+
props.setBuilderContextSignal((PREVIOUS_VALUE) => ({
|
|
130
53
|
...PREVIOUS_VALUE,
|
|
131
|
-
|
|
54
|
+
content: newContentValue,
|
|
132
55
|
}));
|
|
133
56
|
}
|
|
134
57
|
|
|
@@ -139,11 +62,18 @@ function RenderContent(props) {
|
|
|
139
62
|
case "builder.configureSdk": {
|
|
140
63
|
const messageContent = data.data;
|
|
141
64
|
const { breakpoints, contentId } = messageContent;
|
|
142
|
-
if (
|
|
65
|
+
if (
|
|
66
|
+
!contentId ||
|
|
67
|
+
contentId !== props.builderContextSignal.content?.id
|
|
68
|
+
) {
|
|
143
69
|
return;
|
|
144
70
|
}
|
|
145
71
|
if (breakpoints) {
|
|
146
|
-
|
|
72
|
+
mergeNewContent({
|
|
73
|
+
meta: {
|
|
74
|
+
breakpoints,
|
|
75
|
+
},
|
|
76
|
+
});
|
|
147
77
|
}
|
|
148
78
|
setForceReRenderCount(forceReRenderCount() + 1); // This is a hack to force Qwik to re-render.
|
|
149
79
|
break;
|
|
@@ -163,32 +93,28 @@ function RenderContent(props) {
|
|
|
163
93
|
|
|
164
94
|
break;
|
|
165
95
|
}
|
|
166
|
-
case "builder.patchUpdates": {
|
|
167
|
-
// TODO
|
|
168
|
-
break;
|
|
169
|
-
}
|
|
170
96
|
}
|
|
171
97
|
}
|
|
172
98
|
}
|
|
173
99
|
|
|
174
100
|
function evaluateJsCode() {
|
|
175
101
|
// run any dynamic JS code attached to content
|
|
176
|
-
const jsCode = builderContextSignal
|
|
102
|
+
const jsCode = props.builderContextSignal.content?.data?.jsCode;
|
|
177
103
|
if (jsCode) {
|
|
178
104
|
evaluate({
|
|
179
105
|
code: jsCode,
|
|
180
106
|
context: props.context || {},
|
|
181
107
|
localState: undefined,
|
|
182
|
-
rootState: builderContextSignal
|
|
183
|
-
rootSetState:
|
|
108
|
+
rootState: props.builderContextSignal.rootState,
|
|
109
|
+
rootSetState: props.builderContextSignal.rootSetState,
|
|
184
110
|
});
|
|
185
111
|
}
|
|
186
112
|
}
|
|
187
113
|
|
|
188
114
|
function onClick(event) {
|
|
189
|
-
if (builderContextSignal
|
|
190
|
-
const variationId = builderContextSignal
|
|
191
|
-
const contentId = builderContextSignal
|
|
115
|
+
if (props.builderContextSignal.content) {
|
|
116
|
+
const variationId = props.builderContextSignal.content?.testVariationId;
|
|
117
|
+
const contentId = props.builderContextSignal.content?.id;
|
|
192
118
|
_track({
|
|
193
119
|
type: "click",
|
|
194
120
|
canTrack: canTrackToUse(),
|
|
@@ -210,8 +136,8 @@ function RenderContent(props) {
|
|
|
210
136
|
code: group,
|
|
211
137
|
context: props.context || {},
|
|
212
138
|
localState: undefined,
|
|
213
|
-
rootState: builderContextSignal
|
|
214
|
-
rootSetState:
|
|
139
|
+
rootState: props.builderContextSignal.rootState,
|
|
140
|
+
rootSetState: props.builderContextSignal.rootSetState,
|
|
215
141
|
})
|
|
216
142
|
);
|
|
217
143
|
}
|
|
@@ -221,10 +147,11 @@ function RenderContent(props) {
|
|
|
221
147
|
.then((response) => response.json())
|
|
222
148
|
.then((json) => {
|
|
223
149
|
const newState = {
|
|
224
|
-
...builderContextSignal
|
|
150
|
+
...props.builderContextSignal.rootState,
|
|
225
151
|
[key]: json,
|
|
226
152
|
};
|
|
227
|
-
|
|
153
|
+
props.builderContextSignal.rootSetState?.(newState);
|
|
154
|
+
httpReqsData()[key] = true;
|
|
228
155
|
})
|
|
229
156
|
.catch((err) => {
|
|
230
157
|
console.error("error fetching dynamic data", url, err);
|
|
@@ -232,7 +159,8 @@ function RenderContent(props) {
|
|
|
232
159
|
}
|
|
233
160
|
|
|
234
161
|
function runHttpRequests() {
|
|
235
|
-
const requests =
|
|
162
|
+
const requests =
|
|
163
|
+
props.builderContextSignal.content?.data?.httpRequests ?? {};
|
|
236
164
|
Object.entries(requests).forEach(([key, url]) => {
|
|
237
165
|
if (url && (!httpReqsData()[key] || isEditing())) {
|
|
238
166
|
const evaluatedUrl = evalExpression(url);
|
|
@@ -249,7 +177,7 @@ function RenderContent(props) {
|
|
|
249
177
|
window.dispatchEvent(
|
|
250
178
|
new CustomEvent("builder:component:stateChange", {
|
|
251
179
|
detail: {
|
|
252
|
-
state: builderContextSignal
|
|
180
|
+
state: props.builderContextSignal.rootState,
|
|
253
181
|
ref: {
|
|
254
182
|
name: props.model,
|
|
255
183
|
},
|
|
@@ -270,6 +198,7 @@ function RenderContent(props) {
|
|
|
270
198
|
if (isBrowser()) {
|
|
271
199
|
if (isEditing()) {
|
|
272
200
|
setForceReRenderCount(forceReRenderCount() + 1);
|
|
201
|
+
window.addEventListener("message", processMessage);
|
|
273
202
|
registerInsertMenu();
|
|
274
203
|
setupBrowserForEditing({
|
|
275
204
|
...(props.locale
|
|
@@ -288,21 +217,20 @@ function RenderContent(props) {
|
|
|
288
217
|
}
|
|
289
218
|
: {}),
|
|
290
219
|
});
|
|
291
|
-
Object.values(builderContextSignal
|
|
220
|
+
Object.values(props.builderContextSignal.componentInfos).forEach(
|
|
292
221
|
(registeredComponent) => {
|
|
293
222
|
const message = createRegisterComponentMessage(registeredComponent);
|
|
294
223
|
window.parent?.postMessage(message, "*");
|
|
295
224
|
}
|
|
296
225
|
);
|
|
297
|
-
window.addEventListener("message", processMessage);
|
|
298
226
|
window.addEventListener(
|
|
299
227
|
"builder:component:stateChangeListenerActivated",
|
|
300
228
|
emitStateUpdate
|
|
301
229
|
);
|
|
302
230
|
}
|
|
303
|
-
if (builderContextSignal
|
|
304
|
-
const variationId = builderContextSignal
|
|
305
|
-
const contentId = builderContextSignal
|
|
231
|
+
if (props.builderContextSignal.content) {
|
|
232
|
+
const variationId = props.builderContextSignal.content?.testVariationId;
|
|
233
|
+
const contentId = props.builderContextSignal.content?.id;
|
|
306
234
|
_track({
|
|
307
235
|
type: "impression",
|
|
308
236
|
canTrack: canTrackToUse(),
|
|
@@ -311,7 +239,6 @@ function RenderContent(props) {
|
|
|
311
239
|
variationId: variationId !== contentId ? variationId : undefined,
|
|
312
240
|
});
|
|
313
241
|
}
|
|
314
|
-
|
|
315
242
|
// override normal content in preview mode
|
|
316
243
|
if (isPreviewing()) {
|
|
317
244
|
const searchParams = new URL(location.href).searchParams;
|
|
@@ -339,7 +266,7 @@ function RenderContent(props) {
|
|
|
339
266
|
getContent({
|
|
340
267
|
model: props.model,
|
|
341
268
|
apiKey: props.apiKey,
|
|
342
|
-
apiVersion: props.apiVersion,
|
|
269
|
+
apiVersion: props.builderContextSignal.apiVersion,
|
|
343
270
|
}).then((content) => {
|
|
344
271
|
if (content) {
|
|
345
272
|
mergeNewContent(content);
|
|
@@ -360,74 +287,60 @@ function RenderContent(props) {
|
|
|
360
287
|
}
|
|
361
288
|
createEffect(on(() => [props.content], onUpdateFn_0));
|
|
362
289
|
|
|
363
|
-
function onUpdateFn_1() {
|
|
290
|
+
function onUpdateFn_1() {}
|
|
291
|
+
createEffect(on(() => [shouldSendResetCookie()], onUpdateFn_1));
|
|
292
|
+
|
|
293
|
+
function onUpdateFn_2() {
|
|
364
294
|
evaluateJsCode();
|
|
365
295
|
}
|
|
366
296
|
createEffect(
|
|
367
297
|
on(
|
|
368
298
|
() => [
|
|
369
|
-
builderContextSignal
|
|
370
|
-
builderContextSignal
|
|
299
|
+
props.builderContextSignal.content?.data?.jsCode,
|
|
300
|
+
props.builderContextSignal.rootState,
|
|
371
301
|
],
|
|
372
|
-
|
|
302
|
+
onUpdateFn_2
|
|
373
303
|
)
|
|
374
304
|
);
|
|
375
305
|
|
|
376
|
-
function
|
|
306
|
+
function onUpdateFn_3() {
|
|
377
307
|
runHttpRequests();
|
|
378
308
|
}
|
|
379
309
|
createEffect(
|
|
380
|
-
on(
|
|
310
|
+
on(
|
|
311
|
+
() => [props.builderContextSignal.content?.data?.httpRequests],
|
|
312
|
+
onUpdateFn_3
|
|
313
|
+
)
|
|
381
314
|
);
|
|
382
315
|
|
|
383
|
-
function
|
|
316
|
+
function onUpdateFn_4() {
|
|
384
317
|
emitStateUpdate();
|
|
385
318
|
}
|
|
386
|
-
createEffect(on(() => [builderContextSignal
|
|
319
|
+
createEffect(on(() => [props.builderContextSignal.rootState], onUpdateFn_4));
|
|
387
320
|
|
|
388
321
|
return (
|
|
389
|
-
<builderContext.Provider value={builderContextSignal
|
|
390
|
-
<Show when={builderContextSignal
|
|
322
|
+
<builderContext.Provider value={props.builderContextSignal}>
|
|
323
|
+
<Show when={props.builderContextSignal.content}>
|
|
391
324
|
<div
|
|
392
325
|
class={props.classNameProp}
|
|
326
|
+
key={forceReRenderCount()}
|
|
393
327
|
ref={elementRef}
|
|
394
328
|
onClick={(event) => onClick(event)}
|
|
395
|
-
builder-content-id={builderContextSignal
|
|
329
|
+
builder-content-id={props.builderContextSignal.content?.id}
|
|
396
330
|
builder-model={props.model}
|
|
397
|
-
{...
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
// we don't need it right now, we just need to identify content divs for testing.
|
|
402
|
-
"builder-content-id": "",
|
|
403
|
-
},
|
|
404
|
-
}
|
|
405
|
-
: {})}
|
|
406
|
-
{...(props.hideContent
|
|
407
|
-
? {
|
|
331
|
+
{...{}}
|
|
332
|
+
{...(props.showContent
|
|
333
|
+
? {}
|
|
334
|
+
: {
|
|
408
335
|
hidden: true,
|
|
409
336
|
"aria-hidden": true,
|
|
410
|
-
}
|
|
411
|
-
: {})}
|
|
337
|
+
})}
|
|
412
338
|
>
|
|
413
|
-
|
|
414
|
-
<script innerHTML={scriptStr()}></script>
|
|
415
|
-
</Show>
|
|
416
|
-
<Show when={TARGET !== "reactNative"}>
|
|
417
|
-
<RenderContentStyles
|
|
418
|
-
contentId={builderContextSignal().content?.id}
|
|
419
|
-
cssCode={builderContextSignal().content?.data?.cssCode}
|
|
420
|
-
customFonts={builderContextSignal().content?.data?.customFonts}
|
|
421
|
-
></RenderContentStyles>
|
|
422
|
-
</Show>
|
|
423
|
-
<RenderBlocks
|
|
424
|
-
blocks={builderContextSignal().content?.data?.blocks}
|
|
425
|
-
key={forceReRenderCount()}
|
|
426
|
-
></RenderBlocks>
|
|
339
|
+
{props.children}
|
|
427
340
|
</div>
|
|
428
341
|
</Show>
|
|
429
342
|
</builderContext.Provider>
|
|
430
343
|
);
|
|
431
344
|
}
|
|
432
345
|
|
|
433
|
-
export default
|
|
346
|
+
export default EnableEditor;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const getCssFromFont =
|
|
1
|
+
const getCssFromFont = font => {
|
|
2
2
|
var _a, _b;
|
|
3
3
|
const family = font.family + (font.kind && !font.kind.includes("#") ? ", " + font.kind : "");
|
|
4
4
|
const name = family.split(",")[0];
|
|
@@ -35,9 +35,11 @@ font-weight: ${weight};
|
|
|
35
35
|
}
|
|
36
36
|
return str;
|
|
37
37
|
};
|
|
38
|
-
const getFontCss = ({
|
|
38
|
+
const getFontCss = ({
|
|
39
|
+
customFonts
|
|
40
|
+
}) => {
|
|
39
41
|
var _a;
|
|
40
|
-
return ((_a = customFonts == null ? void 0 : customFonts.map(
|
|
42
|
+
return ((_a = customFonts == null ? void 0 : customFonts.map(font => getCssFromFont(font))) == null ? void 0 : _a.join(" ")) || "";
|
|
41
43
|
};
|
|
42
44
|
const getCss = ({
|
|
43
45
|
cssCode,
|
|
@@ -51,7 +53,4 @@ const getCss = ({
|
|
|
51
53
|
}
|
|
52
54
|
return (cssCode == null ? void 0 : cssCode.replace(/&/g, `div[builder-content-id="${contentId}"]`)) || "";
|
|
53
55
|
};
|
|
54
|
-
export {
|
|
55
|
-
getCss,
|
|
56
|
-
getFontCss
|
|
57
|
-
};
|
|
56
|
+
export { getCss, getFontCss }
|
package/src/components/{render-content/components/render-styles.jsx → content/components/styles.jsx}
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createSignal } from "solid-js";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import { getCss } from "./
|
|
5
|
-
import { getFontCss } from "./
|
|
3
|
+
import InlinedStyles from "../../inlined-styles.jsx";
|
|
4
|
+
import { getCss } from "./styles.helpers.js";
|
|
5
|
+
import { getFontCss } from "./styles.helpers.js";
|
|
6
6
|
|
|
7
|
-
function
|
|
7
|
+
function ContentStyles(props) {
|
|
8
8
|
const [injectedStyles, setInjectedStyles] = createSignal(
|
|
9
9
|
`
|
|
10
10
|
${getCss({
|
|
@@ -30,7 +30,7 @@ ${getFontCss({
|
|
|
30
30
|
`.trim()
|
|
31
31
|
);
|
|
32
32
|
|
|
33
|
-
return <
|
|
33
|
+
return <InlinedStyles styles={injectedStyles()}></InlinedStyles>;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
export default
|
|
36
|
+
export default ContentStyles;
|
package/src/components/{render-content/render-content.helpers.js → content/content.helpers.js}
RENAMED
|
@@ -4,16 +4,17 @@ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
|
4
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
6
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
configurable: true,
|
|
10
|
+
writable: true,
|
|
11
|
+
value
|
|
12
|
+
}) : obj[key] = value;
|
|
8
13
|
var __spreadValues = (a, b) => {
|
|
9
|
-
for (var prop in b || (b = {}))
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
-
if (__propIsEnum.call(b, prop))
|
|
15
|
-
__defNormalProp(a, prop, b[prop]);
|
|
16
|
-
}
|
|
14
|
+
for (var prop in b || (b = {})) if (__hasOwnProp.call(b, prop)) __defNormalProp(a, prop, b[prop]);
|
|
15
|
+
if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b)) {
|
|
16
|
+
if (__propIsEnum.call(b, prop)) __defNormalProp(a, prop, b[prop]);
|
|
17
|
+
}
|
|
17
18
|
return a;
|
|
18
19
|
};
|
|
19
20
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
@@ -24,13 +25,15 @@ const getContextStateInitialValue = ({
|
|
|
24
25
|
}) => {
|
|
25
26
|
var _a, _b, _c;
|
|
26
27
|
const defaultValues = {};
|
|
27
|
-
(_b = (_a = content == null ? void 0 : content.data) == null ? void 0 : _a.inputs) == null ? void 0 : _b.forEach(
|
|
28
|
+
(_b = (_a = content == null ? void 0 : content.data) == null ? void 0 : _a.inputs) == null ? void 0 : _b.forEach(input => {
|
|
28
29
|
var _a2;
|
|
29
30
|
if (input.name && input.defaultValue !== void 0 && ((_a2 = content == null ? void 0 : content.data) == null ? void 0 : _a2.state) && content.data.state[input.name] === void 0) {
|
|
30
31
|
defaultValues[input.name] = input.defaultValue;
|
|
31
32
|
}
|
|
32
33
|
});
|
|
33
|
-
const stateToUse = __spreadValues(__spreadValues(__spreadValues({}, (_c = content == null ? void 0 : content.data) == null ? void 0 : _c.state), data), locale ? {
|
|
34
|
+
const stateToUse = __spreadValues(__spreadValues(__spreadValues({}, (_c = content == null ? void 0 : content.data) == null ? void 0 : _c.state), data), locale ? {
|
|
35
|
+
locale
|
|
36
|
+
} : {});
|
|
34
37
|
return __spreadValues(__spreadValues({}, defaultValues), stateToUse);
|
|
35
38
|
};
|
|
36
39
|
const getContentInitialValue = ({
|
|
@@ -42,7 +45,4 @@ const getContentInitialValue = ({
|
|
|
42
45
|
meta: content == null ? void 0 : content.meta
|
|
43
46
|
});
|
|
44
47
|
};
|
|
45
|
-
export {
|
|
46
|
-
getContentInitialValue,
|
|
47
|
-
getContextStateInitialValue
|
|
48
|
-
};
|
|
48
|
+
export { getContentInitialValue, getContextStateInitialValue }
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { Show, createSignal } from "solid-js";
|
|
2
|
+
|
|
3
|
+
import { getDefaultRegisteredComponents } from "../../constants/builder-registered-components.js";
|
|
4
|
+
import {
|
|
5
|
+
components,
|
|
6
|
+
serializeComponentInfo,
|
|
7
|
+
} from "../../functions/register-component.js";
|
|
8
|
+
import Blocks from "../blocks/blocks.jsx";
|
|
9
|
+
import ContentStyles from "./components/styles.jsx";
|
|
10
|
+
import {
|
|
11
|
+
getContentInitialValue,
|
|
12
|
+
getContextStateInitialValue,
|
|
13
|
+
} from "./content.helpers.js";
|
|
14
|
+
import { TARGET } from "../../constants/target.js";
|
|
15
|
+
import { getRenderContentScriptString } from "../content-variants/helpers.js";
|
|
16
|
+
import EnableEditor from "./components/enable-editor.jsx";
|
|
17
|
+
import InlinedScript from "../inlined-script.jsx";
|
|
18
|
+
import { wrapComponentRef } from "./wrap-component-ref.js";
|
|
19
|
+
|
|
20
|
+
function ContentComponent(props) {
|
|
21
|
+
const [scriptStr, setScriptStr] = createSignal(
|
|
22
|
+
getRenderContentScriptString({
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
|
|
24
|
+
variationId: props.content?.testVariationId,
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
|
|
26
|
+
contentId: props.content?.id,
|
|
27
|
+
})
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
const [registeredComponents, setRegisteredComponents] = createSignal(
|
|
31
|
+
[
|
|
32
|
+
...getDefaultRegisteredComponents(),
|
|
33
|
+
// While this `components` object is deprecated, we must maintain support for it.
|
|
34
|
+
// Since users are able to override our default components, we need to make sure that we do not break such
|
|
35
|
+
// existing usage.
|
|
36
|
+
// This is why we spread `components` after the default Builder.io components, but before the `props.customComponents`,
|
|
37
|
+
// which is the new standard way of providing custom components, and must therefore take precedence.
|
|
38
|
+
...components,
|
|
39
|
+
...(props.customComponents || []),
|
|
40
|
+
].reduce(
|
|
41
|
+
(acc, { component, ...info }) => ({
|
|
42
|
+
...acc,
|
|
43
|
+
[info.name]: {
|
|
44
|
+
component: component,
|
|
45
|
+
...serializeComponentInfo(info),
|
|
46
|
+
},
|
|
47
|
+
}),
|
|
48
|
+
{}
|
|
49
|
+
)
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const [builderContextSignal, setBuilderContextSignal] = createSignal({
|
|
53
|
+
content: getContentInitialValue({
|
|
54
|
+
content: props.content,
|
|
55
|
+
data: props.data,
|
|
56
|
+
}),
|
|
57
|
+
localState: undefined,
|
|
58
|
+
rootState: getContextStateInitialValue({
|
|
59
|
+
content: props.content,
|
|
60
|
+
data: props.data,
|
|
61
|
+
locale: props.locale,
|
|
62
|
+
}),
|
|
63
|
+
rootSetState: contentSetState,
|
|
64
|
+
context: props.context || {},
|
|
65
|
+
apiKey: props.apiKey,
|
|
66
|
+
apiVersion: props.apiVersion,
|
|
67
|
+
componentInfos: [
|
|
68
|
+
...getDefaultRegisteredComponents(),
|
|
69
|
+
// While this `components` object is deprecated, we must maintain support for it.
|
|
70
|
+
// Since users are able to override our default components, we need to make sure that we do not break such
|
|
71
|
+
// existing usage.
|
|
72
|
+
// This is why we spread `components` after the default Builder.io components, but before the `props.customComponents`,
|
|
73
|
+
// which is the new standard way of providing custom components, and must therefore take precedence.
|
|
74
|
+
...components,
|
|
75
|
+
...(props.customComponents || []),
|
|
76
|
+
].reduce(
|
|
77
|
+
(acc, { component: _, ...info }) => ({
|
|
78
|
+
...acc,
|
|
79
|
+
[info.name]: serializeComponentInfo(info),
|
|
80
|
+
}),
|
|
81
|
+
{}
|
|
82
|
+
),
|
|
83
|
+
inheritedStyles: {},
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
function contentSetState(newRootState) {
|
|
87
|
+
setBuilderContextSignal((PREVIOUS_VALUE) => ({
|
|
88
|
+
...PREVIOUS_VALUE,
|
|
89
|
+
rootState: newRootState,
|
|
90
|
+
}));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<EnableEditor
|
|
95
|
+
content={props.content}
|
|
96
|
+
model={props.model}
|
|
97
|
+
context={props.context}
|
|
98
|
+
apiKey={props.apiKey}
|
|
99
|
+
canTrack={props.canTrack}
|
|
100
|
+
locale={props.locale}
|
|
101
|
+
includeRefs={props.includeRefs}
|
|
102
|
+
enrich={props.enrich}
|
|
103
|
+
classNameProp={props.classNameProp}
|
|
104
|
+
showContent={props.showContent}
|
|
105
|
+
builderContextSignal={builderContextSignal()}
|
|
106
|
+
{...{
|
|
107
|
+
setBuilderContextSignal: setBuilderContextSignal,
|
|
108
|
+
}}
|
|
109
|
+
>
|
|
110
|
+
<Show when={props.isSsrAbTest}>
|
|
111
|
+
<InlinedScript scriptStr={scriptStr()}></InlinedScript>
|
|
112
|
+
</Show>
|
|
113
|
+
<Show when={TARGET !== "reactNative"}>
|
|
114
|
+
<ContentStyles
|
|
115
|
+
contentId={builderContextSignal().content?.id}
|
|
116
|
+
cssCode={builderContextSignal().content?.data?.cssCode}
|
|
117
|
+
customFonts={builderContextSignal().content?.data?.customFonts}
|
|
118
|
+
></ContentStyles>
|
|
119
|
+
</Show>
|
|
120
|
+
<Blocks
|
|
121
|
+
blocks={builderContextSignal().content?.data?.blocks}
|
|
122
|
+
context={builderContextSignal()}
|
|
123
|
+
registeredComponents={registeredComponents()}
|
|
124
|
+
></Blocks>
|
|
125
|
+
</EnableEditor>
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export default ContentComponent;
|
|
File without changes
|