@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.
Files changed (233) hide show
  1. package/README.md +11 -11
  2. package/dist/cjs/components/ClientEditingChromesUpdate.js +53 -52
  3. package/dist/cjs/components/Date.js +49 -45
  4. package/dist/cjs/components/DefaultEmptyFieldEditingComponents.js +32 -22
  5. package/dist/cjs/components/{DesignLibrary.js → DesignLibrary/DesignLibrary.js} +161 -202
  6. package/dist/cjs/components/DesignLibrary/DesignLibraryApp.js +31 -0
  7. package/dist/cjs/components/DesignLibrary/DesignLibraryClientEvents.js +123 -0
  8. package/dist/cjs/components/DesignLibrary/DesignLibraryErrorBoundary.js +65 -0
  9. package/dist/cjs/components/DesignLibrary/DesignLibraryServer.js +193 -0
  10. package/dist/cjs/components/DesignLibrary/index.js +7 -0
  11. package/dist/cjs/components/DesignLibrary/models.js +2 -0
  12. package/dist/cjs/components/EditingScripts.js +44 -43
  13. package/dist/cjs/components/ErrorBoundary.js +101 -92
  14. package/dist/cjs/components/FEaaS/BYOCServerWrapper.js +25 -28
  15. package/dist/cjs/components/FEaaS/BYOCWrapper.js +133 -122
  16. package/dist/cjs/components/FEaaS/FEaaSSeverWrapper.js +26 -34
  17. package/dist/cjs/components/FEaaS/FEaaSWrapper.js +84 -78
  18. package/dist/cjs/components/FEaaS/feaas-utils.js +130 -144
  19. package/dist/cjs/components/FEaaS/index.js +21 -21
  20. package/dist/cjs/components/FEaaS/models.js +7 -7
  21. package/dist/cjs/components/FieldMetadata.js +29 -29
  22. package/dist/cjs/components/File.js +43 -38
  23. package/dist/cjs/components/Form.js +100 -92
  24. package/dist/cjs/components/HiddenRendering.js +23 -23
  25. package/dist/cjs/components/Image.js +71 -66
  26. package/dist/cjs/components/Link.js +91 -86
  27. package/dist/cjs/components/MissingComponent.js +28 -28
  28. package/dist/cjs/components/Placeholder/AppPlaceholder.js +79 -76
  29. package/dist/cjs/components/Placeholder/ClientComponentWrapper.js +21 -21
  30. package/dist/cjs/components/Placeholder/Placeholder.js +144 -110
  31. package/dist/cjs/components/Placeholder/PlaceholderMetadata.js +68 -63
  32. package/dist/cjs/components/Placeholder/index.js +25 -25
  33. package/dist/cjs/components/Placeholder/models.js +18 -18
  34. package/dist/cjs/components/Placeholder/placeholder-utils.js +226 -226
  35. package/dist/cjs/components/RichText.js +75 -70
  36. package/dist/cjs/components/SitecoreProvider.js +62 -52
  37. package/dist/cjs/components/Text.js +69 -65
  38. package/dist/cjs/components/sharedTypes/components.js +7 -7
  39. package/dist/cjs/components/sharedTypes/index.js +18 -18
  40. package/dist/cjs/components/sharedTypes/props.js +2 -2
  41. package/dist/cjs/enhancers/withAppPlaceholder.js +21 -21
  42. package/dist/cjs/enhancers/withComponentMap.js +24 -24
  43. package/dist/cjs/enhancers/withDatasourceCheck.js +31 -30
  44. package/dist/cjs/enhancers/withEditorChromes.js +29 -24
  45. package/dist/cjs/enhancers/withEmptyFieldEditingComponent.js +71 -70
  46. package/dist/cjs/enhancers/withFieldMetadata.js +68 -67
  47. package/dist/cjs/enhancers/withLoadImportMap.js +53 -0
  48. package/dist/cjs/enhancers/withPlaceholder.js +64 -65
  49. package/dist/cjs/enhancers/withSitecore.js +47 -45
  50. package/dist/cjs/index.js +86 -85
  51. package/dist/cjs/rsc-utils/no-rsc.js +5 -5
  52. package/dist/cjs/rsc-utils/rsc.js +5 -5
  53. package/dist/cjs/search/index.js +7 -0
  54. package/dist/cjs/search/useInfiniteSearch.js +136 -0
  55. package/dist/cjs/search/useSearch.js +107 -0
  56. package/dist/cjs/search/utils.js +35 -0
  57. package/dist/cjs/server-actions/update-server-component-action.js +18 -0
  58. package/dist/cjs/utils.js +38 -38
  59. package/dist/esm/components/ClientEditingChromesUpdate.js +16 -15
  60. package/dist/esm/components/Date.js +43 -39
  61. package/dist/esm/components/DefaultEmptyFieldEditingComponents.js +24 -14
  62. package/dist/esm/components/{DesignLibrary.js → DesignLibrary/DesignLibrary.js} +124 -164
  63. package/dist/esm/components/DesignLibrary/DesignLibraryApp.js +24 -0
  64. package/dist/esm/components/DesignLibrary/DesignLibraryClientEvents.js +84 -0
  65. package/dist/esm/components/DesignLibrary/DesignLibraryErrorBoundary.js +28 -0
  66. package/dist/esm/components/DesignLibrary/DesignLibraryServer.js +150 -0
  67. package/dist/esm/components/DesignLibrary/index.js +2 -0
  68. package/dist/esm/components/DesignLibrary/models.js +1 -0
  69. package/dist/esm/components/EditingScripts.js +37 -36
  70. package/dist/esm/components/ErrorBoundary.js +64 -57
  71. package/dist/esm/components/FEaaS/BYOCServerWrapper.js +18 -21
  72. package/dist/esm/components/FEaaS/BYOCWrapper.js +91 -81
  73. package/dist/esm/components/FEaaS/FEaaSSeverWrapper.js +19 -27
  74. package/dist/esm/components/FEaaS/FEaaSWrapper.js +43 -37
  75. package/dist/esm/components/FEaaS/feaas-utils.js +91 -105
  76. package/dist/esm/components/FEaaS/index.js +6 -6
  77. package/dist/esm/components/FEaaS/models.js +4 -4
  78. package/dist/esm/components/FieldMetadata.js +22 -22
  79. package/dist/esm/components/File.js +36 -31
  80. package/dist/esm/components/Form.js +62 -54
  81. package/dist/esm/components/HiddenRendering.js +16 -16
  82. package/dist/esm/components/Image.js +65 -60
  83. package/dist/esm/components/Link.js +55 -50
  84. package/dist/esm/components/MissingComponent.js +21 -21
  85. package/dist/esm/components/Placeholder/AppPlaceholder.js +72 -69
  86. package/dist/esm/components/Placeholder/ClientComponentWrapper.js +14 -14
  87. package/dist/esm/components/Placeholder/Placeholder.js +104 -103
  88. package/dist/esm/components/Placeholder/PlaceholderMetadata.js +61 -56
  89. package/dist/esm/components/Placeholder/index.js +4 -4
  90. package/dist/esm/components/Placeholder/models.js +15 -15
  91. package/dist/esm/components/Placeholder/placeholder-utils.js +214 -214
  92. package/dist/esm/components/RichText.js +39 -34
  93. package/dist/esm/components/SitecoreProvider.js +55 -45
  94. package/dist/esm/components/Text.js +63 -59
  95. package/dist/esm/components/sharedTypes/components.js +4 -4
  96. package/dist/esm/components/sharedTypes/index.js +2 -2
  97. package/dist/esm/components/sharedTypes/props.js +1 -1
  98. package/dist/esm/enhancers/withAppPlaceholder.js +14 -14
  99. package/dist/esm/enhancers/withComponentMap.js +18 -18
  100. package/dist/esm/enhancers/withDatasourceCheck.js +23 -22
  101. package/dist/esm/enhancers/withEditorChromes.js +22 -17
  102. package/dist/esm/enhancers/withEmptyFieldEditingComponent.js +35 -34
  103. package/dist/esm/enhancers/withFieldMetadata.js +32 -31
  104. package/dist/esm/enhancers/withLoadImportMap.js +17 -0
  105. package/dist/esm/enhancers/withPlaceholder.js +58 -59
  106. package/dist/esm/enhancers/withSitecore.js +40 -38
  107. package/dist/esm/index.js +29 -29
  108. package/dist/esm/rsc-utils/no-rsc.js +2 -2
  109. package/dist/esm/rsc-utils/rsc.js +2 -2
  110. package/dist/esm/search/index.js +2 -0
  111. package/dist/esm/search/useInfiniteSearch.js +132 -0
  112. package/dist/esm/search/useSearch.js +103 -0
  113. package/dist/esm/search/utils.js +30 -0
  114. package/dist/esm/server-actions/update-server-component-action.js +15 -0
  115. package/dist/esm/utils.js +33 -33
  116. package/global.d.ts +17 -0
  117. package/package.json +27 -11
  118. package/search.d.ts +1 -0
  119. package/types/components/ClientEditingChromesUpdate.d.ts +8 -6
  120. package/types/components/ClientEditingChromesUpdate.d.ts.map +1 -0
  121. package/types/components/Date.d.ts +25 -16
  122. package/types/components/Date.d.ts.map +1 -0
  123. package/types/components/DefaultEmptyFieldEditingComponents.d.ts +20 -9
  124. package/types/components/DefaultEmptyFieldEditingComponents.d.ts.map +1 -0
  125. package/types/components/DesignLibrary/DesignLibrary.d.ts +20 -0
  126. package/types/components/DesignLibrary/DesignLibrary.d.ts.map +1 -0
  127. package/types/components/DesignLibrary/DesignLibraryApp.d.ts +14 -0
  128. package/types/components/DesignLibrary/DesignLibraryApp.d.ts.map +1 -0
  129. package/types/components/DesignLibrary/DesignLibraryClientEvents.d.ts +21 -0
  130. package/types/components/DesignLibrary/DesignLibraryClientEvents.d.ts.map +1 -0
  131. package/types/components/DesignLibrary/DesignLibraryErrorBoundary.d.ts +19 -0
  132. package/types/components/DesignLibrary/DesignLibraryErrorBoundary.d.ts.map +1 -0
  133. package/types/components/DesignLibrary/DesignLibraryServer.d.ts +38 -0
  134. package/types/components/DesignLibrary/DesignLibraryServer.d.ts.map +1 -0
  135. package/types/components/DesignLibrary/index.d.ts +3 -0
  136. package/types/components/DesignLibrary/index.d.ts.map +1 -0
  137. package/types/components/DesignLibrary/models.d.ts +67 -0
  138. package/types/components/DesignLibrary/models.d.ts.map +1 -0
  139. package/types/components/EditingScripts.d.ts +9 -7
  140. package/types/components/EditingScripts.d.ts.map +1 -0
  141. package/types/components/ErrorBoundary.d.ts +29 -17
  142. package/types/components/ErrorBoundary.d.ts.map +1 -0
  143. package/types/components/FEaaS/BYOCServerWrapper.d.ts +10 -3
  144. package/types/components/FEaaS/BYOCServerWrapper.d.ts.map +1 -0
  145. package/types/components/FEaaS/BYOCWrapper.d.ts +29 -25
  146. package/types/components/FEaaS/BYOCWrapper.d.ts.map +1 -0
  147. package/types/components/FEaaS/FEaaSSeverWrapper.d.ts +10 -8
  148. package/types/components/FEaaS/FEaaSSeverWrapper.d.ts.map +1 -0
  149. package/types/components/FEaaS/FEaaSWrapper.d.ts +14 -7
  150. package/types/components/FEaaS/FEaaSWrapper.d.ts.map +1 -0
  151. package/types/components/FEaaS/feaas-utils.d.ts +24 -21
  152. package/types/components/FEaaS/feaas-utils.d.ts.map +1 -0
  153. package/types/components/FEaaS/index.d.ts +7 -6
  154. package/types/components/FEaaS/index.d.ts.map +1 -0
  155. package/types/components/FEaaS/models.d.ts +136 -125
  156. package/types/components/FEaaS/models.d.ts.map +1 -0
  157. package/types/components/FieldMetadata.d.ts +18 -17
  158. package/types/components/FieldMetadata.d.ts.map +1 -0
  159. package/types/components/File.d.ts +28 -18
  160. package/types/components/File.d.ts.map +1 -0
  161. package/types/components/Form.d.ts +35 -29
  162. package/types/components/Form.d.ts.map +1 -0
  163. package/types/components/HiddenRendering.d.ts +3 -2
  164. package/types/components/HiddenRendering.d.ts.map +1 -0
  165. package/types/components/Image.d.ts +70 -48
  166. package/types/components/Image.d.ts.map +1 -0
  167. package/types/components/Link.d.ts +45 -27
  168. package/types/components/Link.d.ts.map +1 -0
  169. package/types/components/MissingComponent.d.ts +9 -8
  170. package/types/components/MissingComponent.d.ts.map +1 -0
  171. package/types/components/Placeholder/AppPlaceholder.d.ts +12 -10
  172. package/types/components/Placeholder/AppPlaceholder.d.ts.map +1 -0
  173. package/types/components/Placeholder/ClientComponentWrapper.d.ts +10 -9
  174. package/types/components/Placeholder/ClientComponentWrapper.d.ts.map +1 -0
  175. package/types/components/Placeholder/Placeholder.d.ts +33 -28
  176. package/types/components/Placeholder/Placeholder.d.ts.map +1 -0
  177. package/types/components/Placeholder/PlaceholderMetadata.d.ts +35 -28
  178. package/types/components/Placeholder/PlaceholderMetadata.d.ts.map +1 -0
  179. package/types/components/Placeholder/index.d.ts +6 -5
  180. package/types/components/Placeholder/index.d.ts.map +1 -0
  181. package/types/components/Placeholder/models.d.ts +149 -140
  182. package/types/components/Placeholder/models.d.ts.map +1 -0
  183. package/types/components/Placeholder/placeholder-utils.d.ts +52 -53
  184. package/types/components/Placeholder/placeholder-utils.d.ts.map +1 -0
  185. package/types/components/RichText.d.ts +31 -17
  186. package/types/components/RichText.d.ts.map +1 -0
  187. package/types/components/SitecoreProvider.d.ts +68 -48
  188. package/types/components/SitecoreProvider.d.ts.map +1 -0
  189. package/types/components/Text.d.ts +29 -20
  190. package/types/components/Text.d.ts.map +1 -0
  191. package/types/components/sharedTypes/components.d.ts +50 -38
  192. package/types/components/sharedTypes/components.d.ts.map +1 -0
  193. package/types/components/sharedTypes/index.d.ts +3 -2
  194. package/types/components/sharedTypes/index.d.ts.map +1 -0
  195. package/types/components/sharedTypes/props.d.ts +15 -14
  196. package/types/components/sharedTypes/props.d.ts.map +1 -0
  197. package/types/enhancers/withAppPlaceholder.d.ts +16 -15
  198. package/types/enhancers/withAppPlaceholder.d.ts.map +1 -0
  199. package/types/enhancers/withComponentMap.d.ts +13 -12
  200. package/types/enhancers/withComponentMap.d.ts.map +1 -0
  201. package/types/enhancers/withDatasourceCheck.d.ts +23 -21
  202. package/types/enhancers/withDatasourceCheck.d.ts.map +1 -0
  203. package/types/enhancers/withEditorChromes.d.ts +8 -2
  204. package/types/enhancers/withEditorChromes.d.ts.map +1 -0
  205. package/types/enhancers/withEmptyFieldEditingComponent.d.ts +29 -27
  206. package/types/enhancers/withEmptyFieldEditingComponent.d.ts.map +1 -0
  207. package/types/enhancers/withFieldMetadata.d.ts +18 -16
  208. package/types/enhancers/withFieldMetadata.d.ts.map +1 -0
  209. package/types/enhancers/withLoadImportMap.d.ts +22 -0
  210. package/types/enhancers/withLoadImportMap.d.ts.map +1 -0
  211. package/types/enhancers/withPlaceholder.d.ts +37 -35
  212. package/types/enhancers/withPlaceholder.d.ts.map +1 -0
  213. package/types/enhancers/withSitecore.d.ts +63 -48
  214. package/types/enhancers/withSitecore.d.ts.map +1 -0
  215. package/types/index.d.ts +31 -30
  216. package/types/index.d.ts.map +1 -0
  217. package/types/rsc-utils/no-rsc.d.ts +2 -1
  218. package/types/rsc-utils/no-rsc.d.ts.map +1 -0
  219. package/types/rsc-utils/rsc.d.ts +2 -1
  220. package/types/rsc-utils/rsc.d.ts.map +1 -0
  221. package/types/search/index.d.ts +4 -0
  222. package/types/search/index.d.ts.map +1 -0
  223. package/types/search/useInfiniteSearch.d.ts +116 -0
  224. package/types/search/useInfiniteSearch.d.ts.map +1 -0
  225. package/types/search/useSearch.d.ts +107 -0
  226. package/types/search/useSearch.d.ts.map +1 -0
  227. package/types/search/utils.d.ts +19 -0
  228. package/types/search/utils.d.ts.map +1 -0
  229. package/types/server-actions/update-server-component-action.d.ts +25 -0
  230. package/types/server-actions/update-server-component-action.d.ts.map +1 -0
  231. package/types/utils.d.ts +18 -17
  232. package/types/utils.d.ts.map +1 -0
  233. 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("div", { className: "sc-content-sdk-placeholder-error" },
40
- "A rendering error occurred: ",
41
- this.state.error.message,
42
- "."));
43
- }
44
- const renderingData = childProps.rendering;
45
- const placeholderRenderings = getPlaceholderRenderings(renderingData, this.props.name, this.props.page.mode.isEditing);
46
- this.isEmpty = !placeholderRenderings.length;
47
- const components = PlaceholderComponent.getRenderedComponents(this.props, placeholderRenderings);
48
- if (this.isEmpty) {
49
- const rendered = this.props.renderEmpty ? this.props.renderEmpty(components) : components;
50
- return this.props.page.mode.isEditing ? renderEmptyPlaceholder(rendered) : rendered;
51
- }
52
- else if (this.props.render) {
53
- return this.props.render(components, placeholderRenderings, childProps);
54
- }
55
- else if (this.props.renderEach) {
56
- const renderEach = this.props.renderEach;
57
- return components.map((component, index) => {
58
- if (component && component.props && component.props.type === 'text/sitecore') {
59
- return component;
60
- }
61
- return renderEach(component, index);
62
- });
63
- }
64
- else {
65
- return components;
66
- }
67
- }
68
- }
69
- /**
70
- * Renders the components for the placeholder based on the provided rendering data.
71
- * @param {PlaceholderProps} props placeholder component props
72
- * @param {ComponentRendering[]} placeholderRenderings renderings within placeholder
73
- * @returns {React.ReactNode | React.ReactElement[]} rendered components
74
- */
75
- PlaceholderComponent.getRenderedComponents = (props, placeholderRenderings) => {
76
- const { name, missingComponentComponent, hiddenRenderingComponent } = props;
77
- const transformedComponents = placeholderRenderings
78
- .map((componentRendering, index) => {
79
- const key = componentRendering.uid || `component-${index}`;
80
- const renderedProps = getRenderedComponentProps(props, componentRendering, key);
81
- const component = getComponentForRendering(componentRendering, name, props.componentMap, hiddenRenderingComponent, missingComponentComponent);
82
- let rendered = React.createElement(component.component, props.modifyComponentProps ? props.modifyComponentProps(renderedProps) : renderedProps);
83
- if (!component.isEmpty) {
84
- const errorBoundaryKey = rendered.type + '-' + index;
85
- const disableSuspense = props.disableSuspense || false;
86
- 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));
87
- }
88
- // if in edit mode then emit shallow chromes for hydration in Pages
89
- if (props.page.mode.isEditing) {
90
- return (React.createElement(PlaceholderMetadata, { key: key, rendering: componentRendering }, rendered));
91
- }
92
- return rendered;
93
- })
94
- .filter((element) => element); // remove nulls
95
- if (props.page.mode.isEditing) {
96
- return [
97
- React.createElement(PlaceholderMetadata, { key: props.rendering.uid, placeholderName: name, rendering: props.rendering }, transformedComponents),
98
- ];
99
- }
100
- return transformedComponents;
101
- };
102
- const PlaceholderWithComponentMap = withComponentMap(PlaceholderComponent);
103
- export const Placeholder = withSitecore()(PlaceholderWithComponentMap);
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 {JSX.Element} props.children The child components or elements to be wrapped by the metadata code blocks.
12
- * @returns {JSX.Element} A React fragment containing open and close code blocks surrounding the children elements.
13
- */
14
- export const PlaceholderMetadata = ({ rendering, placeholderName, children, }) => {
15
- const getCodeBlockAttributes = (kind, id, placeholderName) => {
16
- const chrometype = placeholderName ? 'placeholder' : 'rendering';
17
- const attributes = {
18
- type: 'text/sitecore',
19
- chrometype: chrometype,
20
- className: 'scpm',
21
- kind: kind,
22
- };
23
- if (kind === MetadataKind.Open) {
24
- if (chrometype === 'placeholder' && placeholderName) {
25
- let phId = '';
26
- for (const placeholder of Object.keys(rendering.placeholders)) {
27
- if (placeholderName === placeholder) {
28
- phId = id
29
- ? `${placeholderName}_${id}`
30
- : `${placeholderName}_${DEFAULT_PLACEHOLDER_UID}`;
31
- break;
32
- }
33
- // Check if the placeholder is a dynamic placeholder
34
- if (isDynamicPlaceholder(placeholder)) {
35
- const pattern = getDynamicPlaceholderPattern(placeholder);
36
- // Check if the placeholder matches the dynamic placeholder pattern
37
- if (pattern.test(placeholderName)) {
38
- phId = id ? `${placeholder}_${id}` : `${placeholder}_${DEFAULT_PLACEHOLDER_UID}`;
39
- break;
40
- }
41
- }
42
- }
43
- attributes.id = phId;
44
- }
45
- else {
46
- attributes.id = id;
47
- }
48
- }
49
- return attributes;
50
- };
51
- const renderComponent = (uid, placeholderName) => (React.createElement(React.Fragment, null,
52
- React.createElement("code", Object.assign({}, getCodeBlockAttributes(MetadataKind.Open, uid, placeholderName))),
53
- children,
54
- React.createElement("code", Object.assign({}, getCodeBlockAttributes(MetadataKind.Close, uid, placeholderName)))));
55
- return React.createElement(React.Fragment, null, renderComponent(rendering.uid, placeholderName));
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
+ ];