@builder.io/sdk-react-native 4.2.2 → 4.2.4
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/lib/browser/commonjs/blocks/img/component-info.js +33 -3
- package/lib/browser/commonjs/blocks/img/component-info.js.map +1 -1
- package/lib/browser/commonjs/blocks/img/img.js +21 -7
- package/lib/browser/commonjs/blocks/img/img.js.map +1 -1
- package/lib/browser/commonjs/blocks/text/component-info.js +0 -1
- package/lib/browser/commonjs/blocks/text/component-info.js.map +1 -1
- package/lib/browser/commonjs/components/block/block.js +4 -3
- package/lib/browser/commonjs/components/block/block.js.map +1 -1
- package/lib/browser/commonjs/components/block/components/interactive-element.js +8 -1
- package/lib/browser/commonjs/components/block/components/interactive-element.js.map +1 -1
- package/lib/browser/commonjs/components/block/components/live-edit-block-styles.js +107 -0
- package/lib/browser/commonjs/components/block/components/live-edit-block-styles.js.map +1 -0
- package/lib/browser/commonjs/components/block/components/style-wrapper.js +34 -0
- package/lib/browser/commonjs/components/block/components/style-wrapper.js.map +1 -0
- package/lib/browser/commonjs/components/content/components/enable-editor.js +15 -6
- package/lib/browser/commonjs/components/content/components/enable-editor.js.map +1 -1
- package/lib/browser/commonjs/components/live-edit.js +28 -0
- package/lib/browser/commonjs/components/live-edit.js.map +1 -0
- package/lib/browser/commonjs/constants/sdk-version.js +1 -1
- package/lib/browser/commonjs/functions/get-builder-search-params/index.js +8 -2
- package/lib/browser/commonjs/functions/get-builder-search-params/index.js.map +1 -1
- package/lib/browser/commonjs/functions/get-content/generate-content-url.js +3 -8
- package/lib/browser/commonjs/functions/get-content/generate-content-url.js.map +1 -1
- package/lib/browser/commonjs/functions/get-content/index.js +9 -0
- package/lib/browser/commonjs/functions/get-content/index.js.map +1 -1
- package/lib/browser/commonjs/functions/is-previewing.js +15 -5
- package/lib/browser/commonjs/functions/is-previewing.js.map +1 -1
- package/lib/browser/commonjs/helpers/find-block.js +49 -0
- package/lib/browser/commonjs/helpers/find-block.js.map +1 -0
- package/lib/browser/commonjs/helpers/subscribe-to-editor.js +4 -2
- package/lib/browser/commonjs/helpers/subscribe-to-editor.js.map +1 -1
- package/lib/browser/module/blocks/img/component-info.js +33 -3
- package/lib/browser/module/blocks/img/component-info.js.map +1 -1
- package/lib/browser/module/blocks/img/img.js +21 -7
- package/lib/browser/module/blocks/img/img.js.map +1 -1
- package/lib/browser/module/blocks/text/component-info.js +0 -1
- package/lib/browser/module/blocks/text/component-info.js.map +1 -1
- package/lib/browser/module/components/block/block.js +4 -3
- package/lib/browser/module/components/block/block.js.map +1 -1
- package/lib/browser/module/components/block/components/interactive-element.js +8 -1
- package/lib/browser/module/components/block/components/interactive-element.js.map +1 -1
- package/lib/browser/module/components/block/components/live-edit-block-styles.js +98 -0
- package/lib/browser/module/components/block/components/live-edit-block-styles.js.map +1 -0
- package/lib/browser/module/components/block/components/style-wrapper.js +25 -0
- package/lib/browser/module/components/block/components/style-wrapper.js.map +1 -0
- package/lib/browser/module/components/content/components/enable-editor.js +15 -6
- package/lib/browser/module/components/content/components/enable-editor.js.map +1 -1
- package/lib/browser/module/components/live-edit.js +20 -0
- package/lib/browser/module/components/live-edit.js.map +1 -0
- package/lib/browser/module/constants/sdk-version.js +1 -1
- package/lib/browser/module/functions/get-builder-search-params/index.js +8 -2
- package/lib/browser/module/functions/get-builder-search-params/index.js.map +1 -1
- package/lib/browser/module/functions/get-content/generate-content-url.js +3 -8
- package/lib/browser/module/functions/get-content/generate-content-url.js.map +1 -1
- package/lib/browser/module/functions/get-content/index.js +9 -0
- package/lib/browser/module/functions/get-content/index.js.map +1 -1
- package/lib/browser/module/functions/is-previewing.js +15 -4
- package/lib/browser/module/functions/is-previewing.js.map +1 -1
- package/lib/browser/module/helpers/find-block.js +41 -0
- package/lib/browser/module/helpers/find-block.js.map +1 -0
- package/lib/browser/module/helpers/subscribe-to-editor.js +4 -2
- package/lib/browser/module/helpers/subscribe-to-editor.js.map +1 -1
- package/lib/browser/typescript/blocks/text/component-info.d.ts.map +1 -1
- package/lib/browser/typescript/components/block/block.d.ts.map +1 -1
- package/lib/browser/typescript/components/block/components/interactive-element.d.ts.map +1 -1
- package/lib/browser/typescript/components/block/components/live-edit-block-styles.d.ts +9 -0
- package/lib/browser/typescript/components/block/components/live-edit-block-styles.d.ts.map +1 -0
- package/lib/browser/typescript/components/block/components/style-wrapper.d.ts +10 -0
- package/lib/browser/typescript/components/block/components/style-wrapper.d.ts.map +1 -0
- package/lib/browser/typescript/components/content/components/enable-editor.d.ts.map +1 -1
- package/lib/browser/typescript/components/live-edit.d.ts +10 -0
- package/lib/browser/typescript/components/live-edit.d.ts.map +1 -0
- package/lib/browser/typescript/constants/sdk-version.d.ts +1 -1
- package/lib/browser/typescript/context/index.d.ts +2 -0
- package/lib/browser/typescript/context/index.d.ts.map +1 -0
- package/lib/browser/typescript/functions/get-builder-search-params/index.d.ts +8 -2
- package/lib/browser/typescript/functions/get-builder-search-params/index.d.ts.map +1 -1
- package/lib/browser/typescript/functions/get-content/generate-content-url.d.ts.map +1 -1
- package/lib/browser/typescript/functions/get-content/index.d.ts.map +1 -1
- package/lib/browser/typescript/functions/is-previewing.d.ts +11 -1
- package/lib/browser/typescript/functions/is-previewing.d.ts.map +1 -1
- package/lib/browser/typescript/helpers/find-block.d.ts +19 -0
- package/lib/browser/typescript/helpers/find-block.d.ts.map +1 -0
- package/lib/browser/typescript/helpers/subscribe-to-editor.d.ts +3 -2
- package/lib/browser/typescript/helpers/subscribe-to-editor.d.ts.map +1 -1
- package/lib/edge/commonjs/blocks/img/component-info.js +33 -3
- package/lib/edge/commonjs/blocks/img/component-info.js.map +1 -1
- package/lib/edge/commonjs/blocks/img/img.js +21 -7
- package/lib/edge/commonjs/blocks/img/img.js.map +1 -1
- package/lib/edge/commonjs/blocks/text/component-info.js +0 -1
- package/lib/edge/commonjs/blocks/text/component-info.js.map +1 -1
- package/lib/edge/commonjs/components/block/block.js +4 -3
- package/lib/edge/commonjs/components/block/block.js.map +1 -1
- package/lib/edge/commonjs/components/block/components/interactive-element.js +8 -1
- package/lib/edge/commonjs/components/block/components/interactive-element.js.map +1 -1
- package/lib/edge/commonjs/components/block/components/live-edit-block-styles.js +107 -0
- package/lib/edge/commonjs/components/block/components/live-edit-block-styles.js.map +1 -0
- package/lib/edge/commonjs/components/block/components/style-wrapper.js +34 -0
- package/lib/edge/commonjs/components/block/components/style-wrapper.js.map +1 -0
- package/lib/edge/commonjs/components/content/components/enable-editor.js +15 -6
- package/lib/edge/commonjs/components/content/components/enable-editor.js.map +1 -1
- package/lib/edge/commonjs/components/live-edit.js +28 -0
- package/lib/edge/commonjs/components/live-edit.js.map +1 -0
- package/lib/edge/commonjs/constants/sdk-version.js +1 -1
- package/lib/edge/commonjs/functions/get-builder-search-params/index.js +8 -2
- package/lib/edge/commonjs/functions/get-builder-search-params/index.js.map +1 -1
- package/lib/edge/commonjs/functions/get-content/generate-content-url.js +3 -8
- package/lib/edge/commonjs/functions/get-content/generate-content-url.js.map +1 -1
- package/lib/edge/commonjs/functions/get-content/index.js +9 -0
- package/lib/edge/commonjs/functions/get-content/index.js.map +1 -1
- package/lib/edge/commonjs/functions/is-previewing.js +15 -5
- package/lib/edge/commonjs/functions/is-previewing.js.map +1 -1
- package/lib/edge/commonjs/helpers/find-block.js +49 -0
- package/lib/edge/commonjs/helpers/find-block.js.map +1 -0
- package/lib/edge/commonjs/helpers/subscribe-to-editor.js +4 -2
- package/lib/edge/commonjs/helpers/subscribe-to-editor.js.map +1 -1
- package/lib/edge/module/blocks/img/component-info.js +33 -3
- package/lib/edge/module/blocks/img/component-info.js.map +1 -1
- package/lib/edge/module/blocks/img/img.js +21 -7
- package/lib/edge/module/blocks/img/img.js.map +1 -1
- package/lib/edge/module/blocks/text/component-info.js +0 -1
- package/lib/edge/module/blocks/text/component-info.js.map +1 -1
- package/lib/edge/module/components/block/block.js +4 -3
- package/lib/edge/module/components/block/block.js.map +1 -1
- package/lib/edge/module/components/block/components/interactive-element.js +8 -1
- package/lib/edge/module/components/block/components/interactive-element.js.map +1 -1
- package/lib/edge/module/components/block/components/live-edit-block-styles.js +98 -0
- package/lib/edge/module/components/block/components/live-edit-block-styles.js.map +1 -0
- package/lib/edge/module/components/block/components/style-wrapper.js +25 -0
- package/lib/edge/module/components/block/components/style-wrapper.js.map +1 -0
- package/lib/edge/module/components/content/components/enable-editor.js +15 -6
- package/lib/edge/module/components/content/components/enable-editor.js.map +1 -1
- package/lib/edge/module/components/live-edit.js +20 -0
- package/lib/edge/module/components/live-edit.js.map +1 -0
- package/lib/edge/module/constants/sdk-version.js +1 -1
- package/lib/edge/module/functions/get-builder-search-params/index.js +8 -2
- package/lib/edge/module/functions/get-builder-search-params/index.js.map +1 -1
- package/lib/edge/module/functions/get-content/generate-content-url.js +3 -8
- package/lib/edge/module/functions/get-content/generate-content-url.js.map +1 -1
- package/lib/edge/module/functions/get-content/index.js +9 -0
- package/lib/edge/module/functions/get-content/index.js.map +1 -1
- package/lib/edge/module/functions/is-previewing.js +15 -4
- package/lib/edge/module/functions/is-previewing.js.map +1 -1
- package/lib/edge/module/helpers/find-block.js +41 -0
- package/lib/edge/module/helpers/find-block.js.map +1 -0
- package/lib/edge/module/helpers/subscribe-to-editor.js +4 -2
- package/lib/edge/module/helpers/subscribe-to-editor.js.map +1 -1
- package/lib/edge/typescript/blocks/text/component-info.d.ts.map +1 -1
- package/lib/edge/typescript/components/block/block.d.ts.map +1 -1
- package/lib/edge/typescript/components/block/components/interactive-element.d.ts.map +1 -1
- package/lib/edge/typescript/components/block/components/live-edit-block-styles.d.ts +9 -0
- package/lib/edge/typescript/components/block/components/live-edit-block-styles.d.ts.map +1 -0
- package/lib/edge/typescript/components/block/components/style-wrapper.d.ts +10 -0
- package/lib/edge/typescript/components/block/components/style-wrapper.d.ts.map +1 -0
- package/lib/edge/typescript/components/content/components/enable-editor.d.ts.map +1 -1
- package/lib/edge/typescript/components/live-edit.d.ts +10 -0
- package/lib/edge/typescript/components/live-edit.d.ts.map +1 -0
- package/lib/edge/typescript/constants/sdk-version.d.ts +1 -1
- package/lib/edge/typescript/context/index.d.ts +2 -0
- package/lib/edge/typescript/context/index.d.ts.map +1 -0
- package/lib/edge/typescript/functions/get-builder-search-params/index.d.ts +8 -2
- package/lib/edge/typescript/functions/get-builder-search-params/index.d.ts.map +1 -1
- package/lib/edge/typescript/functions/get-content/generate-content-url.d.ts.map +1 -1
- package/lib/edge/typescript/functions/get-content/index.d.ts.map +1 -1
- package/lib/edge/typescript/functions/is-previewing.d.ts +11 -1
- package/lib/edge/typescript/functions/is-previewing.d.ts.map +1 -1
- package/lib/edge/typescript/helpers/find-block.d.ts +19 -0
- package/lib/edge/typescript/helpers/find-block.d.ts.map +1 -0
- package/lib/edge/typescript/helpers/subscribe-to-editor.d.ts +3 -2
- package/lib/edge/typescript/helpers/subscribe-to-editor.d.ts.map +1 -1
- package/lib/node/commonjs/blocks/img/component-info.js +33 -3
- package/lib/node/commonjs/blocks/img/component-info.js.map +1 -1
- package/lib/node/commonjs/blocks/img/img.js +21 -7
- package/lib/node/commonjs/blocks/img/img.js.map +1 -1
- package/lib/node/commonjs/blocks/text/component-info.js +0 -1
- package/lib/node/commonjs/blocks/text/component-info.js.map +1 -1
- package/lib/node/commonjs/components/block/block.js +4 -3
- package/lib/node/commonjs/components/block/block.js.map +1 -1
- package/lib/node/commonjs/components/block/components/interactive-element.js +8 -1
- package/lib/node/commonjs/components/block/components/interactive-element.js.map +1 -1
- package/lib/node/commonjs/components/block/components/live-edit-block-styles.js +107 -0
- package/lib/node/commonjs/components/block/components/live-edit-block-styles.js.map +1 -0
- package/lib/node/commonjs/components/block/components/style-wrapper.js +34 -0
- package/lib/node/commonjs/components/block/components/style-wrapper.js.map +1 -0
- package/lib/node/commonjs/components/content/components/enable-editor.js +15 -6
- package/lib/node/commonjs/components/content/components/enable-editor.js.map +1 -1
- package/lib/node/commonjs/components/live-edit.js +28 -0
- package/lib/node/commonjs/components/live-edit.js.map +1 -0
- package/lib/node/commonjs/constants/sdk-version.js +1 -1
- package/lib/node/commonjs/functions/get-builder-search-params/index.js +8 -2
- package/lib/node/commonjs/functions/get-builder-search-params/index.js.map +1 -1
- package/lib/node/commonjs/functions/get-content/generate-content-url.js +3 -8
- package/lib/node/commonjs/functions/get-content/generate-content-url.js.map +1 -1
- package/lib/node/commonjs/functions/get-content/index.js +9 -0
- package/lib/node/commonjs/functions/get-content/index.js.map +1 -1
- package/lib/node/commonjs/functions/is-previewing.js +15 -5
- package/lib/node/commonjs/functions/is-previewing.js.map +1 -1
- package/lib/node/commonjs/helpers/find-block.js +49 -0
- package/lib/node/commonjs/helpers/find-block.js.map +1 -0
- package/lib/node/commonjs/helpers/subscribe-to-editor.js +4 -2
- package/lib/node/commonjs/helpers/subscribe-to-editor.js.map +1 -1
- package/lib/node/module/blocks/img/component-info.js +33 -3
- package/lib/node/module/blocks/img/component-info.js.map +1 -1
- package/lib/node/module/blocks/img/img.js +21 -7
- package/lib/node/module/blocks/img/img.js.map +1 -1
- package/lib/node/module/blocks/text/component-info.js +0 -1
- package/lib/node/module/blocks/text/component-info.js.map +1 -1
- package/lib/node/module/components/block/block.js +4 -3
- package/lib/node/module/components/block/block.js.map +1 -1
- package/lib/node/module/components/block/components/interactive-element.js +8 -1
- package/lib/node/module/components/block/components/interactive-element.js.map +1 -1
- package/lib/node/module/components/block/components/live-edit-block-styles.js +98 -0
- package/lib/node/module/components/block/components/live-edit-block-styles.js.map +1 -0
- package/lib/node/module/components/block/components/style-wrapper.js +25 -0
- package/lib/node/module/components/block/components/style-wrapper.js.map +1 -0
- package/lib/node/module/components/content/components/enable-editor.js +15 -6
- package/lib/node/module/components/content/components/enable-editor.js.map +1 -1
- package/lib/node/module/components/live-edit.js +20 -0
- package/lib/node/module/components/live-edit.js.map +1 -0
- package/lib/node/module/constants/sdk-version.js +1 -1
- package/lib/node/module/functions/get-builder-search-params/index.js +8 -2
- package/lib/node/module/functions/get-builder-search-params/index.js.map +1 -1
- package/lib/node/module/functions/get-content/generate-content-url.js +3 -8
- package/lib/node/module/functions/get-content/generate-content-url.js.map +1 -1
- package/lib/node/module/functions/get-content/index.js +9 -0
- package/lib/node/module/functions/get-content/index.js.map +1 -1
- package/lib/node/module/functions/is-previewing.js +15 -4
- package/lib/node/module/functions/is-previewing.js.map +1 -1
- package/lib/node/module/helpers/find-block.js +41 -0
- package/lib/node/module/helpers/find-block.js.map +1 -0
- package/lib/node/module/helpers/subscribe-to-editor.js +4 -2
- package/lib/node/module/helpers/subscribe-to-editor.js.map +1 -1
- package/lib/node/typescript/blocks/text/component-info.d.ts.map +1 -1
- package/lib/node/typescript/components/block/block.d.ts.map +1 -1
- package/lib/node/typescript/components/block/components/interactive-element.d.ts.map +1 -1
- package/lib/node/typescript/components/block/components/live-edit-block-styles.d.ts +9 -0
- package/lib/node/typescript/components/block/components/live-edit-block-styles.d.ts.map +1 -0
- package/lib/node/typescript/components/block/components/style-wrapper.d.ts +10 -0
- package/lib/node/typescript/components/block/components/style-wrapper.d.ts.map +1 -0
- package/lib/node/typescript/components/content/components/enable-editor.d.ts.map +1 -1
- package/lib/node/typescript/components/live-edit.d.ts +10 -0
- package/lib/node/typescript/components/live-edit.d.ts.map +1 -0
- package/lib/node/typescript/constants/sdk-version.d.ts +1 -1
- package/lib/node/typescript/context/index.d.ts +2 -0
- package/lib/node/typescript/context/index.d.ts.map +1 -0
- package/lib/node/typescript/functions/get-builder-search-params/index.d.ts +8 -2
- package/lib/node/typescript/functions/get-builder-search-params/index.d.ts.map +1 -1
- package/lib/node/typescript/functions/get-content/generate-content-url.d.ts.map +1 -1
- package/lib/node/typescript/functions/get-content/index.d.ts.map +1 -1
- package/lib/node/typescript/functions/is-previewing.d.ts +11 -1
- package/lib/node/typescript/functions/is-previewing.d.ts.map +1 -1
- package/lib/node/typescript/helpers/find-block.d.ts +19 -0
- package/lib/node/typescript/helpers/find-block.d.ts.map +1 -0
- package/lib/node/typescript/helpers/subscribe-to-editor.d.ts +3 -2
- package/lib/node/typescript/helpers/subscribe-to-editor.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/blocks/img/component-info.ts +33 -3
- package/src/blocks/img/img.tsx +22 -7
- package/src/blocks/text/component-info.ts +0 -1
- package/src/components/block/block.tsx +6 -2
- package/src/components/block/components/interactive-element.tsx +11 -0
- package/src/components/block/components/live-edit-block-styles.tsx +154 -0
- package/src/components/block/components/style-wrapper.tsx +53 -0
- package/src/components/content/components/enable-editor.tsx +22 -7
- package/src/components/live-edit.tsx +32 -0
- package/src/constants/sdk-version.ts +1 -1
- package/src/functions/get-builder-search-params/index.ts +8 -2
- package/src/functions/get-content/generate-content-url.ts +3 -8
- package/src/functions/get-content/index.ts +8 -0
- package/src/functions/is-previewing.ts +15 -4
- package/src/helpers/find-block.ts +40 -0
- package/src/helpers/subscribe-to-editor.ts +7 -4
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { IMAGE_FILE_TYPES } from '../../constants/file-types';
|
|
2
2
|
import type { ComponentInfo } from '../../types/components';
|
|
3
3
|
export const componentInfo: ComponentInfo = {
|
|
4
|
-
// friendlyName?
|
|
5
4
|
name: 'Raw:Img',
|
|
6
5
|
hideFromInsertMenu: true,
|
|
7
6
|
image: 'https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-insert_photo-24px.svg?alt=media&token=4e5d0ef4-f5e8-4e57-b3a9-38d63a9b9dc4',
|
|
@@ -11,7 +10,38 @@ export const componentInfo: ComponentInfo = {
|
|
|
11
10
|
type: 'file',
|
|
12
11
|
allowedFileTypes: IMAGE_FILE_TYPES,
|
|
13
12
|
required: true
|
|
13
|
+
}, {
|
|
14
|
+
name: 'backgroundSize',
|
|
15
|
+
type: 'text',
|
|
16
|
+
defaultValue: 'cover',
|
|
17
|
+
enum: [{
|
|
18
|
+
label: 'contain',
|
|
19
|
+
value: 'contain',
|
|
20
|
+
helperText: 'The image should never get cropped'
|
|
21
|
+
}, {
|
|
22
|
+
label: 'cover',
|
|
23
|
+
value: 'cover',
|
|
24
|
+
helperText: "The image should fill it's box, cropping when needed"
|
|
25
|
+
}]
|
|
26
|
+
}, {
|
|
27
|
+
name: 'backgroundPosition',
|
|
28
|
+
type: 'text',
|
|
29
|
+
defaultValue: 'center',
|
|
30
|
+
enum: ['center', 'top', 'left', 'right', 'bottom', 'top left', 'top right', 'bottom left', 'bottom right']
|
|
31
|
+
}, {
|
|
32
|
+
name: 'altText',
|
|
33
|
+
type: 'string',
|
|
34
|
+
helperText: 'Text to display when the user has images off'
|
|
35
|
+
}, {
|
|
36
|
+
name: 'title',
|
|
37
|
+
type: 'string',
|
|
38
|
+
helperText: 'Text to display when hovering over the asset'
|
|
39
|
+
}, {
|
|
40
|
+
name: 'aspectRatio',
|
|
41
|
+
type: 'number',
|
|
42
|
+
helperText: "This is the ratio of height/width, e.g. set to 1.5 for a 300px wide and 200px tall photo. Set to 0 to not force the image to maintain it's aspect ratio",
|
|
43
|
+
advanced: true,
|
|
44
|
+
defaultValue: 0.7041
|
|
14
45
|
}],
|
|
15
|
-
noWrap: true
|
|
16
|
-
static: true
|
|
46
|
+
noWrap: true
|
|
17
47
|
}
|
package/src/blocks/img/img.tsx
CHANGED
|
@@ -21,12 +21,14 @@ export interface ImgProps {
|
|
|
21
21
|
| "top right"
|
|
22
22
|
| "bottom left"
|
|
23
23
|
| "bottom right";
|
|
24
|
+
aspectRatio?: number;
|
|
25
|
+
title?: string;
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
import { isEditing } from "../../functions/is-editing";
|
|
27
29
|
import { filterAttrs } from "../helpers";
|
|
28
30
|
import { getSrcSet } from "../image/image.helpers";
|
|
29
|
-
import {
|
|
31
|
+
import { getClassPropName } from "../../functions/get-class-prop-name";
|
|
30
32
|
|
|
31
33
|
function ImgComponent(props: ImgProps) {
|
|
32
34
|
function srcSetToUse() {
|
|
@@ -42,19 +44,32 @@ function ImgComponent(props: ImgProps) {
|
|
|
42
44
|
return getSrcSet(url);
|
|
43
45
|
}
|
|
44
46
|
|
|
47
|
+
function imgAttrs() {
|
|
48
|
+
const attrs = {
|
|
49
|
+
...props.attributes,
|
|
50
|
+
...{},
|
|
51
|
+
[getClassPropName()]: `builder-raw-img ${
|
|
52
|
+
props.attributes[getClassPropName()] || ""
|
|
53
|
+
}`,
|
|
54
|
+
} as Record<string, any>;
|
|
55
|
+
delete attrs.style;
|
|
56
|
+
return attrs;
|
|
57
|
+
}
|
|
58
|
+
|
|
45
59
|
return (
|
|
46
60
|
<Image
|
|
47
61
|
loading="lazy"
|
|
62
|
+
key={(isEditing() && props.imgSrc) || "default-key"}
|
|
63
|
+
alt={props.altText}
|
|
64
|
+
title={props.title}
|
|
65
|
+
source={{ uri: props.imgSrc || props.image }}
|
|
66
|
+
{...imgAttrs()}
|
|
48
67
|
style={{
|
|
49
68
|
objectFit: props.backgroundSize || "cover",
|
|
50
69
|
objectPosition: props.backgroundPosition || "center",
|
|
70
|
+
aspectRatio: props.aspectRatio || undefined,
|
|
71
|
+
...(props.attributes?.style || {}),
|
|
51
72
|
}}
|
|
52
|
-
key={(isEditing() && props.imgSrc) || "default-key"}
|
|
53
|
-
alt={props.altText}
|
|
54
|
-
source={{ uri: props.imgSrc || props.image }}
|
|
55
|
-
srcSet={srcSetToUse()}
|
|
56
|
-
{...{}}
|
|
57
|
-
{...props.attributes}
|
|
58
73
|
/>
|
|
59
74
|
);
|
|
60
75
|
}
|
|
@@ -7,7 +7,6 @@ export const componentInfo: ComponentInfo = {
|
|
|
7
7
|
} : {},
|
|
8
8
|
name: 'Text',
|
|
9
9
|
static: true,
|
|
10
|
-
isRSC: true,
|
|
11
10
|
image: 'https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-text_fields-24px%20(1).svg?alt=media&token=12177b73-0ee3-42ca-98c6-0dd003de1929',
|
|
12
11
|
inputs: [{
|
|
13
12
|
name: 'text',
|
|
@@ -30,11 +30,11 @@ import {
|
|
|
30
30
|
provideLinkComponent,
|
|
31
31
|
provideRegisteredComponents,
|
|
32
32
|
} from "./block.helpers";
|
|
33
|
-
import BlockStyles from "./components/block-styles";
|
|
34
33
|
import BlockWrapper from "./components/block-wrapper";
|
|
35
34
|
import type { ComponentProps } from "./components/component-ref/component-ref.helpers";
|
|
36
35
|
import ComponentRef from "./components/component-ref/component-ref";
|
|
37
36
|
import RepeatedBlock from "./components/repeated-block";
|
|
37
|
+
import StyleWrapper from "./components/style-wrapper";
|
|
38
38
|
import { memo } from "react";
|
|
39
39
|
import { View } from "react-native";
|
|
40
40
|
|
|
@@ -153,7 +153,11 @@ function Block(props: BlockProps) {
|
|
|
153
153
|
<>
|
|
154
154
|
{canShowBlock() ? (
|
|
155
155
|
<>
|
|
156
|
-
<
|
|
156
|
+
<StyleWrapper
|
|
157
|
+
block={processedBlock()}
|
|
158
|
+
context={props.context}
|
|
159
|
+
id={props.block.id}
|
|
160
|
+
/>
|
|
157
161
|
{!blockComponent?.()?.noWrap ? (
|
|
158
162
|
<>
|
|
159
163
|
{!repeatItem() ? (
|
|
@@ -10,12 +10,15 @@ export type InteractiveElementProps = {
|
|
|
10
10
|
includeBlockProps: boolean;
|
|
11
11
|
children?: any;
|
|
12
12
|
};
|
|
13
|
+
import { TARGET } from "../../../constants/target";
|
|
13
14
|
import type { BuilderContextInterface } from "../../../context/types";
|
|
14
15
|
import { getBlockActions } from "../../../functions/get-block-actions";
|
|
15
16
|
import { getBlockProperties } from "../../../functions/get-block-properties";
|
|
17
|
+
import { isEditing } from "../../../server-index";
|
|
16
18
|
import type { BuilderBlock } from "../../../types/builder-block";
|
|
17
19
|
import type { Dictionary } from "../../../types/typescript";
|
|
18
20
|
import Awaiter from "../../awaiter";
|
|
21
|
+
import LiveEdit from "../../live-edit";
|
|
19
22
|
|
|
20
23
|
function InteractiveElement(props: InteractiveElementProps) {
|
|
21
24
|
const [forceRenderCount, setForceRenderCount] = useState(() => 0);
|
|
@@ -57,6 +60,14 @@ function InteractiveElement(props: InteractiveElementProps) {
|
|
|
57
60
|
{props.children}
|
|
58
61
|
</Awaiter>
|
|
59
62
|
</>
|
|
63
|
+
) : TARGET === "rsc" && isEditing() ? (
|
|
64
|
+
<LiveEdit
|
|
65
|
+
Wrapper={props.Wrapper}
|
|
66
|
+
id={props.block.id || ""}
|
|
67
|
+
attributes={attributes()}
|
|
68
|
+
>
|
|
69
|
+
{props.children}
|
|
70
|
+
</LiveEdit>
|
|
60
71
|
) : (
|
|
61
72
|
<props.Wrapper {...targetWrapperProps()} attributes={attributes()}>
|
|
62
73
|
{props.children}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import {} from "react-native";
|
|
3
|
+
|
|
4
|
+
type LiveEditBlockStylesProps = {
|
|
5
|
+
id?: any;
|
|
6
|
+
contextProvider: BuilderContextInterface;
|
|
7
|
+
};
|
|
8
|
+
import {
|
|
9
|
+
getMaxWidthQueryForSize,
|
|
10
|
+
getSizesForBreakpoints,
|
|
11
|
+
} from "../../../constants/device-sizes";
|
|
12
|
+
import { TARGET } from "../../../constants/target";
|
|
13
|
+
import { camelToKebabCase } from "../../../functions/camel-to-kebab-case";
|
|
14
|
+
import { getProcessedBlock } from "../../../functions/get-processed-block";
|
|
15
|
+
import { createCssClass } from "../../../helpers/css";
|
|
16
|
+
import { findBlockById } from "../../../helpers/find-block";
|
|
17
|
+
import { checkIsDefined } from "../../../helpers/nullable";
|
|
18
|
+
import type {
|
|
19
|
+
BuilderBlock,
|
|
20
|
+
BuilderContextInterface,
|
|
21
|
+
} from "../../../server-index";
|
|
22
|
+
import InlinedStyles from "../../inlined-styles";
|
|
23
|
+
|
|
24
|
+
function LiveEditBlockStyles(props: LiveEditBlockStylesProps) {
|
|
25
|
+
function block() {
|
|
26
|
+
return findBlockById(props.contextProvider.content!, props.id);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function processedBlock() {
|
|
30
|
+
const foundBlock = block();
|
|
31
|
+
if (!foundBlock) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const blockToUse = foundBlock.repeat?.collection
|
|
35
|
+
? foundBlock
|
|
36
|
+
: getProcessedBlock({
|
|
37
|
+
block: foundBlock,
|
|
38
|
+
localState: props.contextProvider.localState,
|
|
39
|
+
rootState: props.contextProvider.rootState,
|
|
40
|
+
rootSetState: props.contextProvider.rootSetState,
|
|
41
|
+
context: props.contextProvider.context,
|
|
42
|
+
});
|
|
43
|
+
return blockToUse;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function canShowBlock() {
|
|
47
|
+
if (checkIsDefined(processedBlock?.()?.hide)) {
|
|
48
|
+
return !processedBlock?.()?.hide;
|
|
49
|
+
}
|
|
50
|
+
if (checkIsDefined(processedBlock?.()?.show)) {
|
|
51
|
+
return processedBlock?.()?.show;
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function css() {
|
|
57
|
+
const styles = processedBlock?.()?.responsiveStyles;
|
|
58
|
+
const content = props.contextProvider.content;
|
|
59
|
+
const sizesWithUpdatedBreakpoints = getSizesForBreakpoints(
|
|
60
|
+
content?.meta?.breakpoints || {}
|
|
61
|
+
);
|
|
62
|
+
const contentHasXSmallBreakpoint = Boolean(
|
|
63
|
+
content?.meta?.breakpoints?.xsmall
|
|
64
|
+
);
|
|
65
|
+
const largeStyles = styles?.large;
|
|
66
|
+
const mediumStyles = styles?.medium;
|
|
67
|
+
const smallStyles = styles?.small;
|
|
68
|
+
const xsmallStyles = styles?.xsmall;
|
|
69
|
+
const className = processedBlock?.()?.id;
|
|
70
|
+
if (!className) {
|
|
71
|
+
return "";
|
|
72
|
+
}
|
|
73
|
+
const largeStylesClass = largeStyles
|
|
74
|
+
? createCssClass({
|
|
75
|
+
className,
|
|
76
|
+
styles: largeStyles,
|
|
77
|
+
})
|
|
78
|
+
: "";
|
|
79
|
+
const mediumStylesClass = mediumStyles
|
|
80
|
+
? createCssClass({
|
|
81
|
+
className,
|
|
82
|
+
styles: mediumStyles,
|
|
83
|
+
mediaQuery: getMaxWidthQueryForSize(
|
|
84
|
+
"medium",
|
|
85
|
+
sizesWithUpdatedBreakpoints
|
|
86
|
+
),
|
|
87
|
+
})
|
|
88
|
+
: "";
|
|
89
|
+
const smallStylesClass = smallStyles
|
|
90
|
+
? createCssClass({
|
|
91
|
+
className,
|
|
92
|
+
styles: smallStyles,
|
|
93
|
+
mediaQuery: getMaxWidthQueryForSize(
|
|
94
|
+
"small",
|
|
95
|
+
sizesWithUpdatedBreakpoints
|
|
96
|
+
),
|
|
97
|
+
})
|
|
98
|
+
: "";
|
|
99
|
+
const xsmallStylesClass =
|
|
100
|
+
xsmallStyles && contentHasXSmallBreakpoint
|
|
101
|
+
? createCssClass({
|
|
102
|
+
className,
|
|
103
|
+
styles: xsmallStyles,
|
|
104
|
+
mediaQuery: getMaxWidthQueryForSize(
|
|
105
|
+
"xsmall",
|
|
106
|
+
sizesWithUpdatedBreakpoints
|
|
107
|
+
),
|
|
108
|
+
})
|
|
109
|
+
: "";
|
|
110
|
+
const hoverAnimation =
|
|
111
|
+
processedBlock().animations &&
|
|
112
|
+
processedBlock().animations.find((item) => item.trigger === "hover");
|
|
113
|
+
let hoverStylesClass = "";
|
|
114
|
+
if (hoverAnimation) {
|
|
115
|
+
const hoverStyles = hoverAnimation.steps?.[1]?.styles || {};
|
|
116
|
+
hoverStylesClass =
|
|
117
|
+
createCssClass({
|
|
118
|
+
className: `${className}:hover`,
|
|
119
|
+
styles: {
|
|
120
|
+
...hoverStyles,
|
|
121
|
+
transition: `all ${hoverAnimation.duration}s ${camelToKebabCase(
|
|
122
|
+
hoverAnimation.easing
|
|
123
|
+
)}`,
|
|
124
|
+
transitionDelay: hoverAnimation.delay
|
|
125
|
+
? `${hoverAnimation.delay}s`
|
|
126
|
+
: "0s",
|
|
127
|
+
},
|
|
128
|
+
}) || "";
|
|
129
|
+
}
|
|
130
|
+
return [
|
|
131
|
+
largeStylesClass,
|
|
132
|
+
mediumStylesClass,
|
|
133
|
+
smallStylesClass,
|
|
134
|
+
xsmallStylesClass,
|
|
135
|
+
hoverStylesClass,
|
|
136
|
+
].join(" ");
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return (
|
|
140
|
+
<>
|
|
141
|
+
{TARGET === "rsc" && css() && canShowBlock() ? (
|
|
142
|
+
<>
|
|
143
|
+
<InlinedStyles
|
|
144
|
+
id="builderio-block"
|
|
145
|
+
styles={css()}
|
|
146
|
+
nonce={props.contextProvider.nonce}
|
|
147
|
+
/>
|
|
148
|
+
</>
|
|
149
|
+
) : null}
|
|
150
|
+
</>
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export default LiveEditBlockStyles;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import {} from "react-native";
|
|
3
|
+
import { useState, useContext, useEffect } from "react";
|
|
4
|
+
|
|
5
|
+
type StyleWrapperProps = {
|
|
6
|
+
block: BuilderBlock;
|
|
7
|
+
context: BuilderContextInterface;
|
|
8
|
+
id?: string;
|
|
9
|
+
};
|
|
10
|
+
import { TARGET } from "../../../constants/target";
|
|
11
|
+
import { BuilderContext } from "../../../context/index";
|
|
12
|
+
import {
|
|
13
|
+
isEditing,
|
|
14
|
+
BuilderBlock,
|
|
15
|
+
BuilderContextInterface,
|
|
16
|
+
} from "../../../server-index";
|
|
17
|
+
import BlockStyles from "./block-styles";
|
|
18
|
+
import LiveEditBlockStyles from "./live-edit-block-styles";
|
|
19
|
+
|
|
20
|
+
function StyleWrapper(props: StyleWrapperProps) {
|
|
21
|
+
const [isClientEditing, setIsClientEditing] = useState(() => false);
|
|
22
|
+
|
|
23
|
+
const [isHydrated, setIsHydrated] = useState(() => false);
|
|
24
|
+
|
|
25
|
+
const contextProvider = useContext(BuilderContext);
|
|
26
|
+
|
|
27
|
+
useEffect(() => {}, []);
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<>
|
|
31
|
+
{isHydrated ? (
|
|
32
|
+
<>
|
|
33
|
+
{TARGET === "rsc" && isClientEditing ? (
|
|
34
|
+
<LiveEditBlockStyles
|
|
35
|
+
id={props.block.id}
|
|
36
|
+
contextProvider={contextProvider}
|
|
37
|
+
/>
|
|
38
|
+
) : (
|
|
39
|
+
<>
|
|
40
|
+
<BlockStyles block={props.block} context={props.context} />
|
|
41
|
+
</>
|
|
42
|
+
)}
|
|
43
|
+
</>
|
|
44
|
+
) : (
|
|
45
|
+
<>
|
|
46
|
+
<BlockStyles block={props.block} context={props.context} />
|
|
47
|
+
</>
|
|
48
|
+
)}
|
|
49
|
+
</>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export default StyleWrapper;
|
|
@@ -51,7 +51,10 @@ import { getInteractionPropertiesForEvent } from "../../../functions/track/inter
|
|
|
51
51
|
import { getDefaultCanTrack } from "../../../helpers/canTrack";
|
|
52
52
|
import { getCookieSync } from "../../../helpers/cookie";
|
|
53
53
|
import { postPreviewContent } from "../../../helpers/preview-lru-cache/set";
|
|
54
|
-
import {
|
|
54
|
+
import {
|
|
55
|
+
createEditorListener,
|
|
56
|
+
EditType,
|
|
57
|
+
} from "../../../helpers/subscribe-to-editor";
|
|
55
58
|
import { setupBrowserForEditing } from "../../../scripts/init-editing";
|
|
56
59
|
import type { BuilderContent } from "../../../types/builder-content";
|
|
57
60
|
import type { ComponentInfo } from "../../../types/components";
|
|
@@ -70,11 +73,15 @@ function EnableEditor(props: BuilderEditorProps) {
|
|
|
70
73
|
const elementRef = useRef<HTMLDivElement>(null);
|
|
71
74
|
const [hasExecuted, setHasExecuted] = useState<boolean>(() => false);
|
|
72
75
|
|
|
76
|
+
const [contextValue, setContextValue] = useState<any>(
|
|
77
|
+
() => props.builderContextSignal
|
|
78
|
+
);
|
|
79
|
+
|
|
73
80
|
const [prevData, setPrevData] = useState(() => null);
|
|
74
81
|
|
|
75
82
|
const [prevLocale, setPrevLocale] = useState(() => "");
|
|
76
83
|
|
|
77
|
-
function mergeNewRootState(newData: Dictionary<any
|
|
84
|
+
function mergeNewRootState(newData: Dictionary<any>, editType?: EditType) {
|
|
78
85
|
const combinedState = {
|
|
79
86
|
...props.builderContextSignal.rootState,
|
|
80
87
|
...newData,
|
|
@@ -87,9 +94,17 @@ function EnableEditor(props: BuilderEditorProps) {
|
|
|
87
94
|
rootState: combinedState,
|
|
88
95
|
}));
|
|
89
96
|
}
|
|
97
|
+
if (props.builderContextSignal.rootSetState) {
|
|
98
|
+
props.builderContextSignal.rootSetState(combinedState);
|
|
99
|
+
} else {
|
|
100
|
+
props.setBuilderContextSignal((PREVIOUS_VALUE) => ({
|
|
101
|
+
...PREVIOUS_VALUE,
|
|
102
|
+
rootState: combinedState,
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
90
105
|
}
|
|
91
106
|
|
|
92
|
-
function mergeNewContent(newContent: BuilderContent) {
|
|
107
|
+
function mergeNewContent(newContent: BuilderContent, editType?: EditType) {
|
|
93
108
|
const newContentValue = {
|
|
94
109
|
...props.builderContextSignal.content,
|
|
95
110
|
...newContent,
|
|
@@ -148,11 +163,11 @@ function EnableEditor(props: BuilderEditorProps) {
|
|
|
148
163
|
animation: (animation) => {
|
|
149
164
|
triggerAnimation(animation);
|
|
150
165
|
},
|
|
151
|
-
contentUpdate: (newContent) => {
|
|
152
|
-
mergeNewContent(newContent);
|
|
166
|
+
contentUpdate: (newContent, editType) => {
|
|
167
|
+
mergeNewContent(newContent, editType);
|
|
153
168
|
},
|
|
154
|
-
stateUpdate: (newState) => {
|
|
155
|
-
mergeNewRootState(newState);
|
|
169
|
+
stateUpdate: (newState, editType) => {
|
|
170
|
+
mergeNewRootState(newState, editType);
|
|
156
171
|
},
|
|
157
172
|
},
|
|
158
173
|
})(event);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Text } from "react-native";
|
|
3
|
+
import { useContext } from "react";
|
|
4
|
+
|
|
5
|
+
type LiveEditProps = {
|
|
6
|
+
children?: any;
|
|
7
|
+
id?: any;
|
|
8
|
+
Wrapper?: any;
|
|
9
|
+
attributes?: any;
|
|
10
|
+
};
|
|
11
|
+
import { BuilderContext } from "../context/index";
|
|
12
|
+
import { findBlockById } from "../helpers/find-block";
|
|
13
|
+
|
|
14
|
+
function LiveEdit(props: LiveEditProps) {
|
|
15
|
+
function block() {
|
|
16
|
+
return findBlockById(context.content!, props.id);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function options() {
|
|
20
|
+
return block?.()?.component?.options || {};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const context = useContext(BuilderContext);
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<props.Wrapper {...options()} attributes={props.attributes}>
|
|
27
|
+
{props.children}
|
|
28
|
+
</props.Wrapper>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export default LiveEdit;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const SDK_VERSION = "4.2.
|
|
1
|
+
export const SDK_VERSION = "4.2.4"
|
|
@@ -5,8 +5,14 @@ const BUILDER_SEARCHPARAMS_PREFIX = 'builder.';
|
|
|
5
5
|
const BUILDER_OPTIONS_PREFIX = 'options.';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* Receives a `URLSearchParams` object or a regular query object, and returns
|
|
9
|
-
* relevant to the Builder SDK.
|
|
8
|
+
* Receives a `URLSearchParams` object or a regular query object, and returns
|
|
9
|
+
* the subset of query params that are relevant to the Builder SDK.
|
|
10
|
+
*
|
|
11
|
+
* Outputs a key-value object to be passed to `fetchOneEntry` or `fetchEntries`
|
|
12
|
+
* functions as the `options` argument.
|
|
13
|
+
*
|
|
14
|
+
* NOTE: This function is generally not needed. Instead, it is recommended to use `isPreviewing()`
|
|
15
|
+
* to check if the current page requires previewed content.
|
|
10
16
|
*
|
|
11
17
|
* @returns
|
|
12
18
|
*/
|
|
@@ -39,15 +39,10 @@ export const generateContentUrl = (options: GetContentOptions): URL => {
|
|
|
39
39
|
url.searchParams.set('limit', String(limit));
|
|
40
40
|
url.searchParams.set('noTraverse', String(noTraverse));
|
|
41
41
|
url.searchParams.set('includeRefs', String(true));
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if (finalLocale) {
|
|
45
|
-
url.searchParams.set('locale', finalLocale);
|
|
46
|
-
finalUserAttributes = {
|
|
47
|
-
locale: finalLocale,
|
|
48
|
-
...finalUserAttributes
|
|
49
|
-
};
|
|
42
|
+
if (locale) {
|
|
43
|
+
url.searchParams.set('locale', locale);
|
|
50
44
|
}
|
|
45
|
+
let finalUserAttributes: Record<string, any> = userAttributes || {};
|
|
51
46
|
if (enrich) url.searchParams.set('enrich', String(enrich));
|
|
52
47
|
url.searchParams.set('omit', omit ?? 'meta.componentsUsed');
|
|
53
48
|
if (fields) {
|
|
@@ -15,6 +15,14 @@ const checkContentHasResults = (content: ContentResponse): content is ContentRes
|
|
|
15
15
|
* Returns the first content entry that matches the given options.
|
|
16
16
|
*/
|
|
17
17
|
export async function fetchOneEntry(options: GetContentOptions): Promise<BuilderContent | null> {
|
|
18
|
+
const finalLocale = options.locale || options.userAttributes?.locale;
|
|
19
|
+
if (finalLocale) {
|
|
20
|
+
options.locale = finalLocale;
|
|
21
|
+
options.userAttributes = {
|
|
22
|
+
locale: finalLocale,
|
|
23
|
+
...options.userAttributes
|
|
24
|
+
};
|
|
25
|
+
}
|
|
18
26
|
const allContent = await fetchEntries({
|
|
19
27
|
...options,
|
|
20
28
|
limit: 1
|
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
import type { Search } from '../helpers/search/search';
|
|
2
2
|
import { getSearchString } from '../helpers/search/search';
|
|
3
3
|
import { isBrowser } from './is-browser';
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Checks the current URL's search parameters to see if it is attempting to
|
|
7
|
+
* preview Builder Content.
|
|
8
|
+
*
|
|
9
|
+
* When called on the client, it uses `window.location.search`.
|
|
10
|
+
* When called on the server (SSR), it requires a `search` argument.
|
|
11
|
+
*
|
|
12
|
+
* @param search - The search parameters to check. Can be a URL string (containing the search parameters), `URLSearchParams`, or a key-value object containing the search parameters.
|
|
13
|
+
* @returns `true` if the current page is being previewed, `false` otherwise.
|
|
14
|
+
*/
|
|
15
|
+
export function isPreviewing(search?: Search) {
|
|
16
|
+
const searchToUse = search || (isBrowser() ? window.location.search : undefined);
|
|
6
17
|
|
|
7
18
|
/**
|
|
8
19
|
* If this function is called on the server without an explicit `search` argument,
|
|
9
20
|
* then it can't check if the user is previewing, and will return `false`.
|
|
10
21
|
*/
|
|
11
|
-
if (!
|
|
22
|
+
if (!searchToUse) {
|
|
12
23
|
return false;
|
|
13
24
|
}
|
|
14
|
-
const normalizedSearch = getSearchString(
|
|
25
|
+
const normalizedSearch = getSearchString(searchToUse);
|
|
15
26
|
return Boolean(normalizedSearch.indexOf('builder.preview=') !== -1);
|
|
16
27
|
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { BuilderBlock, BuilderContent } from '../server-index';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Recursively searches for a block by ID.
|
|
5
|
+
*
|
|
6
|
+
* @param content The Builder content to search through.
|
|
7
|
+
* @param id The ID of the block to search for.
|
|
8
|
+
* @returns The block if found, otherwise null.
|
|
9
|
+
*/
|
|
10
|
+
export const findBlockById = (content: BuilderContent, id: string): BuilderBlock | null => {
|
|
11
|
+
return findBlockInTree(content.data?.blocks, id);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Helper function to recursively search through block tree.
|
|
16
|
+
*
|
|
17
|
+
* @param blocks The blocks to search through.
|
|
18
|
+
* @param id The ID of the block to search for.
|
|
19
|
+
* @returns The block if found, otherwise null.
|
|
20
|
+
* @private This is an internal implementation detail.
|
|
21
|
+
*/
|
|
22
|
+
export const findBlockInTree = (blocks: BuilderBlock[] | undefined, id: string): BuilderBlock | null => {
|
|
23
|
+
if (!blocks) return null;
|
|
24
|
+
for (const block of blocks) {
|
|
25
|
+
if (block.id === id) return block;
|
|
26
|
+
if (block.children) {
|
|
27
|
+
const child = findBlockInTree(block.children, id);
|
|
28
|
+
if (child) return child;
|
|
29
|
+
}
|
|
30
|
+
if (block.component?.name === 'Columns' && block.component?.options?.columns) {
|
|
31
|
+
for (const column of block.component.options.columns) {
|
|
32
|
+
if (column.blocks) {
|
|
33
|
+
const child = findBlockInTree(column.blocks, id);
|
|
34
|
+
if (child) return child;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
@@ -6,10 +6,11 @@ import type { BuilderAnimation } from '../types/builder-block';
|
|
|
6
6
|
import type { BuilderContent } from '../types/builder-content';
|
|
7
7
|
import type { Dictionary } from '../types/typescript';
|
|
8
8
|
import { logger } from './logger';
|
|
9
|
+
export type EditType = 'client' | 'server' | undefined;
|
|
9
10
|
type ContentListener = Required<Pick<ContentProps, 'model' | 'trustedHosts'>> & {
|
|
10
11
|
callbacks: {
|
|
11
|
-
contentUpdate: (updatedContent: BuilderContent) => void;
|
|
12
|
-
stateUpdate: (newState: Dictionary<string
|
|
12
|
+
contentUpdate: (updatedContent: BuilderContent, editType?: EditType) => void;
|
|
13
|
+
stateUpdate: (newState: Dictionary<string>, editType?: EditType) => void;
|
|
13
14
|
animation: (updatedContent: BuilderAnimation) => void;
|
|
14
15
|
configureSdk: (updatedContent: any) => void;
|
|
15
16
|
};
|
|
@@ -43,8 +44,9 @@ export const createEditorListener = ({
|
|
|
43
44
|
const messageContent = data.data;
|
|
44
45
|
const modelName = messageContent.model;
|
|
45
46
|
const newState = messageContent?.state;
|
|
47
|
+
const editType = messageContent.editType;
|
|
46
48
|
if (modelName === model && newState) {
|
|
47
|
-
callbacks.stateUpdate(newState);
|
|
49
|
+
callbacks.stateUpdate(newState, editType);
|
|
48
50
|
}
|
|
49
51
|
break;
|
|
50
52
|
}
|
|
@@ -53,8 +55,9 @@ export const createEditorListener = ({
|
|
|
53
55
|
const messageContent = data.data;
|
|
54
56
|
const key = messageContent.key || messageContent.alias || messageContent.entry || messageContent.modelName;
|
|
55
57
|
const contentData = messageContent.data;
|
|
58
|
+
const editType = messageContent.editType;
|
|
56
59
|
if (key === model) {
|
|
57
|
-
callbacks.contentUpdate(contentData);
|
|
60
|
+
callbacks.contentUpdate(contentData, editType);
|
|
58
61
|
}
|
|
59
62
|
break;
|
|
60
63
|
}
|