@sitecore-content-sdk/react 1.3.0-canary.9 → 1.4.0-canary.2
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/README.md +11 -11
- package/dist/cjs/components/ClientEditingChromesUpdate.js +53 -52
- package/dist/cjs/components/Date.js +49 -45
- package/dist/cjs/components/DefaultEmptyFieldEditingComponents.js +32 -22
- package/dist/cjs/components/{DesignLibrary.js → DesignLibrary/DesignLibrary.js} +161 -202
- package/dist/cjs/components/DesignLibrary/DesignLibraryApp.js +31 -0
- package/dist/cjs/components/DesignLibrary/DesignLibraryClientEvents.js +123 -0
- package/dist/cjs/components/DesignLibrary/DesignLibraryErrorBoundary.js +65 -0
- package/dist/cjs/components/DesignLibrary/DesignLibraryServer.js +193 -0
- package/dist/cjs/components/DesignLibrary/index.js +7 -0
- package/dist/cjs/components/DesignLibrary/models.js +2 -0
- package/dist/cjs/components/EditingScripts.js +44 -43
- package/dist/cjs/components/ErrorBoundary.js +101 -92
- package/dist/cjs/components/FEaaS/BYOCServerWrapper.js +25 -28
- package/dist/cjs/components/FEaaS/BYOCWrapper.js +133 -122
- package/dist/cjs/components/FEaaS/FEaaSSeverWrapper.js +26 -34
- package/dist/cjs/components/FEaaS/FEaaSWrapper.js +84 -78
- package/dist/cjs/components/FEaaS/feaas-utils.js +130 -144
- package/dist/cjs/components/FEaaS/index.js +21 -21
- package/dist/cjs/components/FEaaS/models.js +7 -7
- package/dist/cjs/components/FieldMetadata.js +29 -29
- package/dist/cjs/components/File.js +43 -38
- package/dist/cjs/components/Form.js +100 -92
- package/dist/cjs/components/HiddenRendering.js +23 -23
- package/dist/cjs/components/Image.js +71 -66
- package/dist/cjs/components/Link.js +91 -86
- package/dist/cjs/components/MissingComponent.js +28 -28
- package/dist/cjs/components/Placeholder/AppPlaceholder.js +79 -76
- package/dist/cjs/components/Placeholder/ClientComponentWrapper.js +21 -21
- package/dist/cjs/components/Placeholder/Placeholder.js +144 -110
- package/dist/cjs/components/Placeholder/PlaceholderMetadata.js +68 -63
- package/dist/cjs/components/Placeholder/index.js +25 -25
- package/dist/cjs/components/Placeholder/models.js +18 -18
- package/dist/cjs/components/Placeholder/placeholder-utils.js +226 -226
- package/dist/cjs/components/RichText.js +75 -70
- package/dist/cjs/components/SitecoreProvider.js +62 -52
- package/dist/cjs/components/Text.js +69 -65
- package/dist/cjs/components/sharedTypes/components.js +7 -7
- package/dist/cjs/components/sharedTypes/index.js +18 -18
- package/dist/cjs/components/sharedTypes/props.js +2 -2
- package/dist/cjs/enhancers/withAppPlaceholder.js +21 -21
- package/dist/cjs/enhancers/withComponentMap.js +24 -24
- package/dist/cjs/enhancers/withDatasourceCheck.js +31 -30
- package/dist/cjs/enhancers/withEditorChromes.js +29 -24
- package/dist/cjs/enhancers/withEmptyFieldEditingComponent.js +71 -70
- package/dist/cjs/enhancers/withFieldMetadata.js +68 -67
- package/dist/cjs/enhancers/withLoadImportMap.js +53 -0
- package/dist/cjs/enhancers/withPlaceholder.js +64 -65
- package/dist/cjs/enhancers/withSitecore.js +47 -45
- package/dist/cjs/index.js +86 -85
- package/dist/cjs/rsc-utils/no-rsc.js +5 -5
- package/dist/cjs/rsc-utils/rsc.js +5 -5
- package/dist/cjs/search/index.js +7 -0
- package/dist/cjs/search/useInfiniteSearch.js +136 -0
- package/dist/cjs/search/useSearch.js +107 -0
- package/dist/cjs/search/utils.js +35 -0
- package/dist/cjs/server-actions/update-server-component-action.js +18 -0
- package/dist/cjs/utils.js +38 -38
- package/dist/esm/components/ClientEditingChromesUpdate.js +16 -15
- package/dist/esm/components/Date.js +43 -39
- package/dist/esm/components/DefaultEmptyFieldEditingComponents.js +24 -14
- package/dist/esm/components/{DesignLibrary.js → DesignLibrary/DesignLibrary.js} +124 -164
- package/dist/esm/components/DesignLibrary/DesignLibraryApp.js +24 -0
- package/dist/esm/components/DesignLibrary/DesignLibraryClientEvents.js +84 -0
- package/dist/esm/components/DesignLibrary/DesignLibraryErrorBoundary.js +28 -0
- package/dist/esm/components/DesignLibrary/DesignLibraryServer.js +150 -0
- package/dist/esm/components/DesignLibrary/index.js +2 -0
- package/dist/esm/components/DesignLibrary/models.js +1 -0
- package/dist/esm/components/EditingScripts.js +37 -36
- package/dist/esm/components/ErrorBoundary.js +64 -57
- package/dist/esm/components/FEaaS/BYOCServerWrapper.js +18 -21
- package/dist/esm/components/FEaaS/BYOCWrapper.js +91 -81
- package/dist/esm/components/FEaaS/FEaaSSeverWrapper.js +19 -27
- package/dist/esm/components/FEaaS/FEaaSWrapper.js +43 -37
- package/dist/esm/components/FEaaS/feaas-utils.js +91 -105
- package/dist/esm/components/FEaaS/index.js +6 -6
- package/dist/esm/components/FEaaS/models.js +4 -4
- package/dist/esm/components/FieldMetadata.js +22 -22
- package/dist/esm/components/File.js +36 -31
- package/dist/esm/components/Form.js +62 -54
- package/dist/esm/components/HiddenRendering.js +16 -16
- package/dist/esm/components/Image.js +65 -60
- package/dist/esm/components/Link.js +55 -50
- package/dist/esm/components/MissingComponent.js +21 -21
- package/dist/esm/components/Placeholder/AppPlaceholder.js +72 -69
- package/dist/esm/components/Placeholder/ClientComponentWrapper.js +14 -14
- package/dist/esm/components/Placeholder/Placeholder.js +104 -103
- package/dist/esm/components/Placeholder/PlaceholderMetadata.js +61 -56
- package/dist/esm/components/Placeholder/index.js +4 -4
- package/dist/esm/components/Placeholder/models.js +15 -15
- package/dist/esm/components/Placeholder/placeholder-utils.js +214 -214
- package/dist/esm/components/RichText.js +39 -34
- package/dist/esm/components/SitecoreProvider.js +55 -45
- package/dist/esm/components/Text.js +63 -59
- package/dist/esm/components/sharedTypes/components.js +4 -4
- package/dist/esm/components/sharedTypes/index.js +2 -2
- package/dist/esm/components/sharedTypes/props.js +1 -1
- package/dist/esm/enhancers/withAppPlaceholder.js +14 -14
- package/dist/esm/enhancers/withComponentMap.js +18 -18
- package/dist/esm/enhancers/withDatasourceCheck.js +23 -22
- package/dist/esm/enhancers/withEditorChromes.js +22 -17
- package/dist/esm/enhancers/withEmptyFieldEditingComponent.js +35 -34
- package/dist/esm/enhancers/withFieldMetadata.js +32 -31
- package/dist/esm/enhancers/withLoadImportMap.js +17 -0
- package/dist/esm/enhancers/withPlaceholder.js +58 -59
- package/dist/esm/enhancers/withSitecore.js +40 -38
- package/dist/esm/index.js +29 -29
- package/dist/esm/rsc-utils/no-rsc.js +2 -2
- package/dist/esm/rsc-utils/rsc.js +2 -2
- package/dist/esm/search/index.js +2 -0
- package/dist/esm/search/useInfiniteSearch.js +132 -0
- package/dist/esm/search/useSearch.js +103 -0
- package/dist/esm/search/utils.js +30 -0
- package/dist/esm/server-actions/update-server-component-action.js +15 -0
- package/dist/esm/utils.js +33 -33
- package/global.d.ts +17 -0
- package/package.json +27 -11
- package/search.d.ts +1 -0
- package/types/components/ClientEditingChromesUpdate.d.ts +8 -6
- package/types/components/ClientEditingChromesUpdate.d.ts.map +1 -0
- package/types/components/Date.d.ts +25 -16
- package/types/components/Date.d.ts.map +1 -0
- package/types/components/DefaultEmptyFieldEditingComponents.d.ts +20 -9
- package/types/components/DefaultEmptyFieldEditingComponents.d.ts.map +1 -0
- package/types/components/DesignLibrary/DesignLibrary.d.ts +20 -0
- package/types/components/DesignLibrary/DesignLibrary.d.ts.map +1 -0
- package/types/components/DesignLibrary/DesignLibraryApp.d.ts +14 -0
- package/types/components/DesignLibrary/DesignLibraryApp.d.ts.map +1 -0
- package/types/components/DesignLibrary/DesignLibraryClientEvents.d.ts +21 -0
- package/types/components/DesignLibrary/DesignLibraryClientEvents.d.ts.map +1 -0
- package/types/components/DesignLibrary/DesignLibraryErrorBoundary.d.ts +19 -0
- package/types/components/DesignLibrary/DesignLibraryErrorBoundary.d.ts.map +1 -0
- package/types/components/DesignLibrary/DesignLibraryServer.d.ts +38 -0
- package/types/components/DesignLibrary/DesignLibraryServer.d.ts.map +1 -0
- package/types/components/DesignLibrary/index.d.ts +3 -0
- package/types/components/DesignLibrary/index.d.ts.map +1 -0
- package/types/components/DesignLibrary/models.d.ts +67 -0
- package/types/components/DesignLibrary/models.d.ts.map +1 -0
- package/types/components/EditingScripts.d.ts +9 -7
- package/types/components/EditingScripts.d.ts.map +1 -0
- package/types/components/ErrorBoundary.d.ts +29 -17
- package/types/components/ErrorBoundary.d.ts.map +1 -0
- package/types/components/FEaaS/BYOCServerWrapper.d.ts +10 -3
- package/types/components/FEaaS/BYOCServerWrapper.d.ts.map +1 -0
- package/types/components/FEaaS/BYOCWrapper.d.ts +29 -25
- package/types/components/FEaaS/BYOCWrapper.d.ts.map +1 -0
- package/types/components/FEaaS/FEaaSSeverWrapper.d.ts +10 -8
- package/types/components/FEaaS/FEaaSSeverWrapper.d.ts.map +1 -0
- package/types/components/FEaaS/FEaaSWrapper.d.ts +14 -7
- package/types/components/FEaaS/FEaaSWrapper.d.ts.map +1 -0
- package/types/components/FEaaS/feaas-utils.d.ts +24 -21
- package/types/components/FEaaS/feaas-utils.d.ts.map +1 -0
- package/types/components/FEaaS/index.d.ts +7 -6
- package/types/components/FEaaS/index.d.ts.map +1 -0
- package/types/components/FEaaS/models.d.ts +136 -125
- package/types/components/FEaaS/models.d.ts.map +1 -0
- package/types/components/FieldMetadata.d.ts +18 -17
- package/types/components/FieldMetadata.d.ts.map +1 -0
- package/types/components/File.d.ts +28 -18
- package/types/components/File.d.ts.map +1 -0
- package/types/components/Form.d.ts +35 -29
- package/types/components/Form.d.ts.map +1 -0
- package/types/components/HiddenRendering.d.ts +3 -2
- package/types/components/HiddenRendering.d.ts.map +1 -0
- package/types/components/Image.d.ts +70 -48
- package/types/components/Image.d.ts.map +1 -0
- package/types/components/Link.d.ts +45 -27
- package/types/components/Link.d.ts.map +1 -0
- package/types/components/MissingComponent.d.ts +9 -8
- package/types/components/MissingComponent.d.ts.map +1 -0
- package/types/components/Placeholder/AppPlaceholder.d.ts +12 -10
- package/types/components/Placeholder/AppPlaceholder.d.ts.map +1 -0
- package/types/components/Placeholder/ClientComponentWrapper.d.ts +10 -9
- package/types/components/Placeholder/ClientComponentWrapper.d.ts.map +1 -0
- package/types/components/Placeholder/Placeholder.d.ts +33 -28
- package/types/components/Placeholder/Placeholder.d.ts.map +1 -0
- package/types/components/Placeholder/PlaceholderMetadata.d.ts +35 -28
- package/types/components/Placeholder/PlaceholderMetadata.d.ts.map +1 -0
- package/types/components/Placeholder/index.d.ts +6 -5
- package/types/components/Placeholder/index.d.ts.map +1 -0
- package/types/components/Placeholder/models.d.ts +149 -140
- package/types/components/Placeholder/models.d.ts.map +1 -0
- package/types/components/Placeholder/placeholder-utils.d.ts +52 -53
- package/types/components/Placeholder/placeholder-utils.d.ts.map +1 -0
- package/types/components/RichText.d.ts +31 -17
- package/types/components/RichText.d.ts.map +1 -0
- package/types/components/SitecoreProvider.d.ts +68 -48
- package/types/components/SitecoreProvider.d.ts.map +1 -0
- package/types/components/Text.d.ts +29 -20
- package/types/components/Text.d.ts.map +1 -0
- package/types/components/sharedTypes/components.d.ts +50 -38
- package/types/components/sharedTypes/components.d.ts.map +1 -0
- package/types/components/sharedTypes/index.d.ts +3 -2
- package/types/components/sharedTypes/index.d.ts.map +1 -0
- package/types/components/sharedTypes/props.d.ts +15 -14
- package/types/components/sharedTypes/props.d.ts.map +1 -0
- package/types/enhancers/withAppPlaceholder.d.ts +16 -15
- package/types/enhancers/withAppPlaceholder.d.ts.map +1 -0
- package/types/enhancers/withComponentMap.d.ts +13 -12
- package/types/enhancers/withComponentMap.d.ts.map +1 -0
- package/types/enhancers/withDatasourceCheck.d.ts +23 -21
- package/types/enhancers/withDatasourceCheck.d.ts.map +1 -0
- package/types/enhancers/withEditorChromes.d.ts +8 -2
- package/types/enhancers/withEditorChromes.d.ts.map +1 -0
- package/types/enhancers/withEmptyFieldEditingComponent.d.ts +29 -27
- package/types/enhancers/withEmptyFieldEditingComponent.d.ts.map +1 -0
- package/types/enhancers/withFieldMetadata.d.ts +18 -16
- package/types/enhancers/withFieldMetadata.d.ts.map +1 -0
- package/types/enhancers/withLoadImportMap.d.ts +22 -0
- package/types/enhancers/withLoadImportMap.d.ts.map +1 -0
- package/types/enhancers/withPlaceholder.d.ts +37 -35
- package/types/enhancers/withPlaceholder.d.ts.map +1 -0
- package/types/enhancers/withSitecore.d.ts +63 -48
- package/types/enhancers/withSitecore.d.ts.map +1 -0
- package/types/index.d.ts +31 -30
- package/types/index.d.ts.map +1 -0
- package/types/rsc-utils/no-rsc.d.ts +2 -1
- package/types/rsc-utils/no-rsc.d.ts.map +1 -0
- package/types/rsc-utils/rsc.d.ts +2 -1
- package/types/rsc-utils/rsc.d.ts.map +1 -0
- package/types/search/index.d.ts +4 -0
- package/types/search/index.d.ts.map +1 -0
- package/types/search/useInfiniteSearch.d.ts +116 -0
- package/types/search/useInfiniteSearch.d.ts.map +1 -0
- package/types/search/useSearch.d.ts +107 -0
- package/types/search/useSearch.d.ts.map +1 -0
- package/types/search/utils.d.ts +19 -0
- package/types/search/utils.d.ts.map +1 -0
- package/types/server-actions/update-server-component-action.d.ts +25 -0
- package/types/server-actions/update-server-component-action.d.ts.map +1 -0
- package/types/utils.d.ts +18 -17
- package/types/utils.d.ts.map +1 -0
- package/types/components/DesignLibrary.d.ts +0 -26
|
@@ -1,103 +1,104 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { withComponentMap } from '../../enhancers/withComponentMap';
|
|
4
|
-
import { PagesEditor } from '@sitecore-content-sdk/core/editing';
|
|
5
|
-
import { withSitecore } from '../../enhancers/withSitecore';
|
|
6
|
-
import { getComponentForRendering, getPlaceholderRenderings, getRenderedComponentProps, renderEmptyPlaceholder, } from './placeholder-utils';
|
|
7
|
-
import { PlaceholderMetadata } from './PlaceholderMetadata';
|
|
8
|
-
import ErrorBoundary from '../ErrorBoundary';
|
|
9
|
-
export class PlaceholderComponent extends React.Component {
|
|
10
|
-
constructor(props) {
|
|
11
|
-
super(props);
|
|
12
|
-
this.isEmpty = false;
|
|
13
|
-
this.state = {};
|
|
14
|
-
}
|
|
15
|
-
componentDidMount() {
|
|
16
|
-
if (this.isEmpty && PagesEditor.isActive()) {
|
|
17
|
-
PagesEditor.resetChromes();
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
componentDidCatch(error) {
|
|
21
|
-
this.setState({ error });
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Renders the placeholder when it is empty. The required CSS styles are applied to the placeholder in edit mode.
|
|
25
|
-
* @param {React.ReactNode | React.ReactElement[]} node react node
|
|
26
|
-
* @returns react node
|
|
27
|
-
* @deprecated use renderEmptyPlaceholder from react/nextjs import instead
|
|
28
|
-
*/
|
|
29
|
-
renderEmptyPlaceholder(node) {
|
|
30
|
-
return renderEmptyPlaceholder(node);
|
|
31
|
-
}
|
|
32
|
-
render() {
|
|
33
|
-
const childProps = Object.assign({}, this.props);
|
|
34
|
-
delete childProps.componentMap;
|
|
35
|
-
if (this.state.error) {
|
|
36
|
-
if (childProps.errorComponent) {
|
|
37
|
-
return React.createElement(childProps.errorComponent, { error: this.state.error });
|
|
38
|
-
}
|
|
39
|
-
return (React.createElement(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return this.props.
|
|
51
|
-
}
|
|
52
|
-
else if (this.props.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
*
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
1
|
+
'use client';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { withComponentMap } from '../../enhancers/withComponentMap';
|
|
4
|
+
import { PagesEditor } from '@sitecore-content-sdk/core/editing';
|
|
5
|
+
import { withSitecore } from '../../enhancers/withSitecore';
|
|
6
|
+
import { getComponentForRendering, getPlaceholderRenderings, getRenderedComponentProps, renderEmptyPlaceholder, } from './placeholder-utils';
|
|
7
|
+
import { PlaceholderMetadata } from './PlaceholderMetadata';
|
|
8
|
+
import ErrorBoundary, { ErrorComponent } from '../ErrorBoundary';
|
|
9
|
+
export class PlaceholderComponent extends React.Component {
|
|
10
|
+
constructor(props) {
|
|
11
|
+
super(props);
|
|
12
|
+
this.isEmpty = false;
|
|
13
|
+
this.state = {};
|
|
14
|
+
}
|
|
15
|
+
componentDidMount() {
|
|
16
|
+
if (this.isEmpty && PagesEditor.isActive()) {
|
|
17
|
+
PagesEditor.resetChromes();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
componentDidCatch(error) {
|
|
21
|
+
this.setState({ error });
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Renders the placeholder when it is empty. The required CSS styles are applied to the placeholder in edit mode.
|
|
25
|
+
* @param {React.ReactNode | React.ReactElement[]} node react node
|
|
26
|
+
* @returns react node
|
|
27
|
+
* @deprecated use renderEmptyPlaceholder from react/nextjs import instead
|
|
28
|
+
*/
|
|
29
|
+
renderEmptyPlaceholder(node) {
|
|
30
|
+
return renderEmptyPlaceholder(node);
|
|
31
|
+
}
|
|
32
|
+
render() {
|
|
33
|
+
const childProps = Object.assign({}, this.props);
|
|
34
|
+
delete childProps.componentMap;
|
|
35
|
+
if (this.state.error) {
|
|
36
|
+
if (childProps.errorComponent) {
|
|
37
|
+
return React.createElement(childProps.errorComponent, { error: this.state.error });
|
|
38
|
+
}
|
|
39
|
+
return (React.createElement(ErrorComponent, { message: `A rendering error occurred: ${this.state.error.message}.` }));
|
|
40
|
+
}
|
|
41
|
+
const renderingData = childProps.rendering;
|
|
42
|
+
const placeholderRenderings = getPlaceholderRenderings(renderingData, this.props.name, this.props.page.mode.isEditing);
|
|
43
|
+
this.isEmpty = !placeholderRenderings.length;
|
|
44
|
+
const components = PlaceholderComponent.getRenderedComponents(this.props, placeholderRenderings);
|
|
45
|
+
if (this.isEmpty) {
|
|
46
|
+
const rendered = this.props.renderEmpty ? this.props.renderEmpty(components) : components;
|
|
47
|
+
return this.props.page.mode.isEditing ? renderEmptyPlaceholder(rendered) : rendered;
|
|
48
|
+
}
|
|
49
|
+
else if (this.props.render) {
|
|
50
|
+
return this.props.render(components, placeholderRenderings, childProps);
|
|
51
|
+
}
|
|
52
|
+
else if (this.props.renderEach) {
|
|
53
|
+
const renderEach = this.props.renderEach;
|
|
54
|
+
return components.map((component, index) => {
|
|
55
|
+
if (component && component.props && component.props.type === 'text/sitecore') {
|
|
56
|
+
return component;
|
|
57
|
+
}
|
|
58
|
+
return renderEach(component, index);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
return components;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Renders the components for the placeholder based on the provided rendering data.
|
|
68
|
+
* @param {PlaceholderProps} props placeholder component props
|
|
69
|
+
* @param {ComponentRendering[]} placeholderRenderings renderings within placeholder
|
|
70
|
+
* @returns {React.ReactNode | React.ReactElement[]} rendered components
|
|
71
|
+
*/
|
|
72
|
+
PlaceholderComponent.getRenderedComponents = (props, placeholderRenderings) => {
|
|
73
|
+
const { name, missingComponentComponent, hiddenRenderingComponent } = props;
|
|
74
|
+
const transformedComponents = placeholderRenderings
|
|
75
|
+
.map((componentRendering, index) => {
|
|
76
|
+
const key = componentRendering.uid || `component-${index}`;
|
|
77
|
+
const renderedProps = getRenderedComponentProps(props, componentRendering, key);
|
|
78
|
+
const component = getComponentForRendering(componentRendering, name, props.componentMap, hiddenRenderingComponent, missingComponentComponent);
|
|
79
|
+
let rendered = React.createElement(component.component, props.modifyComponentProps ? props.modifyComponentProps(renderedProps) : renderedProps);
|
|
80
|
+
if (!component.isEmpty) {
|
|
81
|
+
const errorBoundaryKey = rendered.type + '-' + index;
|
|
82
|
+
const disableSuspense = props.disableSuspense || false;
|
|
83
|
+
rendered = (React.createElement(ErrorBoundary, { "data-testid": "error-boundary", key: errorBoundaryKey, errorComponent: props.errorComponent, componentLoadingMessage: props.componentLoadingMessage, isDynamic: component.dynamic, disableSuspense: disableSuspense, rendering: rendered.props.rendering }, rendered));
|
|
84
|
+
}
|
|
85
|
+
// if in edit mode then emit shallow chromes for hydration in Pages
|
|
86
|
+
if (props.page.mode.isEditing) {
|
|
87
|
+
return (React.createElement(PlaceholderMetadata, { key: key, rendering: componentRendering }, rendered));
|
|
88
|
+
}
|
|
89
|
+
return rendered;
|
|
90
|
+
})
|
|
91
|
+
.filter((element) => element); // remove nulls
|
|
92
|
+
if (props.page.mode.isEditing) {
|
|
93
|
+
return [
|
|
94
|
+
React.createElement(PlaceholderMetadata, { key: props.rendering.uid, placeholderName: name, rendering: props.rendering }, transformedComponents),
|
|
95
|
+
];
|
|
96
|
+
}
|
|
97
|
+
return transformedComponents;
|
|
98
|
+
};
|
|
99
|
+
const PlaceholderWithComponentMap = withComponentMap(PlaceholderComponent);
|
|
100
|
+
/**
|
|
101
|
+
* The Placeholder component.
|
|
102
|
+
* @public
|
|
103
|
+
*/
|
|
104
|
+
export const Placeholder = withSitecore()(PlaceholderWithComponentMap);
|
|
@@ -1,56 +1,61 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { getDynamicPlaceholderPattern, isDynamicPlaceholder, } from '@sitecore-content-sdk/core/layout';
|
|
3
|
-
import { MetadataKind, DEFAULT_PLACEHOLDER_UID } from '@sitecore-content-sdk/core/editing';
|
|
4
|
-
/**
|
|
5
|
-
* A React component to generate metadata blocks for a placeholder or rendering.
|
|
6
|
-
* It utilizes dynamic attributes based on whether the component acts as a placeholder
|
|
7
|
-
* or as a rendering to properly render the surrounding code blocks.
|
|
8
|
-
* @param {object} props The properties passed to the component.
|
|
9
|
-
* @param {ComponentRendering} props.rendering The rendering data.
|
|
10
|
-
* @param {string} [props.placeholderName] The name of the placeholder.
|
|
11
|
-
* @param {
|
|
12
|
-
* @
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
};
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { getDynamicPlaceholderPattern, isDynamicPlaceholder, } from '@sitecore-content-sdk/core/layout';
|
|
3
|
+
import { MetadataKind, DEFAULT_PLACEHOLDER_UID } from '@sitecore-content-sdk/core/editing';
|
|
4
|
+
/**
|
|
5
|
+
* A React component to generate metadata blocks for a placeholder or rendering.
|
|
6
|
+
* It utilizes dynamic attributes based on whether the component acts as a placeholder
|
|
7
|
+
* or as a rendering to properly render the surrounding code blocks.
|
|
8
|
+
* @param {object} props The properties passed to the component.
|
|
9
|
+
* @param {ComponentRendering} props.rendering The rendering data.
|
|
10
|
+
* @param {string} [props.placeholderName] The name of the placeholder.
|
|
11
|
+
* @param {'server' | 'client'} [props.componentRuntime] Component runtime type. Used to add data-csdk-component-runtime attribute to rendering chromes.
|
|
12
|
+
* @param {JSX.Element} props.children The child components or elements to be wrapped by the metadata code blocks.
|
|
13
|
+
* @returns {JSX.Element} A React fragment containing open and close code blocks surrounding the children elements.
|
|
14
|
+
*/
|
|
15
|
+
export const PlaceholderMetadata = ({ rendering, placeholderName, children, componentRuntime, }) => {
|
|
16
|
+
const getCodeBlockAttributes = ({ kind, id, placeholderName, }) => {
|
|
17
|
+
var _a;
|
|
18
|
+
const chrometype = placeholderName ? 'placeholder' : 'rendering';
|
|
19
|
+
const attributes = {
|
|
20
|
+
type: 'text/sitecore',
|
|
21
|
+
chrometype: chrometype,
|
|
22
|
+
className: 'scpm',
|
|
23
|
+
kind: kind,
|
|
24
|
+
};
|
|
25
|
+
if (kind === MetadataKind.Open) {
|
|
26
|
+
if (chrometype === 'placeholder' && placeholderName) {
|
|
27
|
+
let phId = '';
|
|
28
|
+
for (const placeholder of Object.keys((_a = rendering.placeholders) !== null && _a !== void 0 ? _a : {})) {
|
|
29
|
+
if (placeholderName === placeholder) {
|
|
30
|
+
phId = id
|
|
31
|
+
? `${placeholderName}_${id}`
|
|
32
|
+
: `${placeholderName}_${DEFAULT_PLACEHOLDER_UID}`;
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
// Check if the placeholder is a dynamic placeholder
|
|
36
|
+
if (isDynamicPlaceholder(placeholder)) {
|
|
37
|
+
const pattern = getDynamicPlaceholderPattern(placeholder);
|
|
38
|
+
// Check if the placeholder matches the dynamic placeholder pattern
|
|
39
|
+
if (pattern.test(placeholderName)) {
|
|
40
|
+
phId = id ? `${placeholder}_${id}` : `${placeholder}_${DEFAULT_PLACEHOLDER_UID}`;
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
attributes.id = phId;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
attributes.id = id;
|
|
49
|
+
}
|
|
50
|
+
// Add component runtime attribute for rendering chromes
|
|
51
|
+
if (chrometype === 'rendering' && componentRuntime) {
|
|
52
|
+
attributes['data-csdk-component-runtime'] = componentRuntime;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return attributes;
|
|
56
|
+
};
|
|
57
|
+
return (React.createElement(React.Fragment, null,
|
|
58
|
+
React.createElement("code", Object.assign({}, getCodeBlockAttributes({ kind: MetadataKind.Open, id: rendering.uid, placeholderName }))),
|
|
59
|
+
children,
|
|
60
|
+
React.createElement("code", Object.assign({}, getCodeBlockAttributes({ kind: MetadataKind.Close, placeholderName })))));
|
|
61
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Placeholder, PlaceholderComponent } from './Placeholder';
|
|
2
|
-
export { PlaceholderMetadata } from './PlaceholderMetadata';
|
|
3
|
-
export { AppPlaceholder } from './AppPlaceholder';
|
|
4
|
-
export * from './placeholder-utils';
|
|
1
|
+
export { Placeholder, PlaceholderComponent } from './Placeholder';
|
|
2
|
+
export { PlaceholderMetadata } from './PlaceholderMetadata';
|
|
3
|
+
export { AppPlaceholder } from './AppPlaceholder';
|
|
4
|
+
export * from './placeholder-utils';
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Prop names from placeholder that cannot be serialized and passed from server to client side components
|
|
3
|
-
*/
|
|
4
|
-
export const nonSerializedPlaceholderProps = [
|
|
5
|
-
'renderEmpty',
|
|
6
|
-
'render',
|
|
7
|
-
'renderEach',
|
|
8
|
-
'errorComponent',
|
|
9
|
-
'componentLoadingMessage',
|
|
10
|
-
'modifyComponentProps',
|
|
11
|
-
'componentMap',
|
|
12
|
-
'page',
|
|
13
|
-
'missingComponentComponent',
|
|
14
|
-
'hiddenRenderingComponent',
|
|
15
|
-
];
|
|
1
|
+
/**
|
|
2
|
+
* Prop names from placeholder that cannot be serialized and passed from server to client side components
|
|
3
|
+
*/
|
|
4
|
+
export const nonSerializedPlaceholderProps = [
|
|
5
|
+
'renderEmpty',
|
|
6
|
+
'render',
|
|
7
|
+
'renderEach',
|
|
8
|
+
'errorComponent',
|
|
9
|
+
'componentLoadingMessage',
|
|
10
|
+
'modifyComponentProps',
|
|
11
|
+
'componentMap',
|
|
12
|
+
'page',
|
|
13
|
+
'missingComponentComponent',
|
|
14
|
+
'hiddenRenderingComponent',
|
|
15
|
+
];
|