@sitecore-content-sdk/react 2.0.0-canary.2 → 2.0.0-canary.20

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 (135) hide show
  1. package/dist/cjs/components/Date.js +13 -11
  2. package/dist/cjs/components/DefaultEmptyFieldEditingComponents.js +2 -1
  3. package/dist/cjs/components/DesignLibrary/DesignLibrary.js +5 -9
  4. package/dist/cjs/components/DesignLibrary/DesignLibraryErrorBoundary.js +6 -0
  5. package/dist/cjs/components/DesignLibrary/index.js +3 -3
  6. package/dist/cjs/components/EditingScripts.js +2 -2
  7. package/dist/cjs/components/ErrorBoundary.js +11 -6
  8. package/dist/cjs/components/File.js +3 -1
  9. package/dist/cjs/components/Form.js +16 -7
  10. package/dist/cjs/components/Image.js +12 -9
  11. package/dist/cjs/components/Link.js +19 -46
  12. package/dist/cjs/components/Placeholder/AppPlaceholder.js +56 -58
  13. package/dist/cjs/components/Placeholder/ClientComponentWrapper.js +5 -9
  14. package/dist/cjs/components/Placeholder/Placeholder.js +21 -93
  15. package/dist/cjs/components/Placeholder/PlaceholderMetadata.js +1 -0
  16. package/dist/cjs/components/Placeholder/index.js +1 -2
  17. package/dist/cjs/components/Placeholder/placeholder-utils.js +7 -35
  18. package/dist/cjs/components/RichText.js +18 -49
  19. package/dist/cjs/components/SitecoreProvider.js +81 -33
  20. package/dist/cjs/components/Text.js +12 -8
  21. package/dist/cjs/enhancers/withAppPlaceholder.js +6 -0
  22. package/dist/cjs/enhancers/withDatasourceCheck.js +4 -3
  23. package/dist/cjs/enhancers/withEditorChromes.js +50 -15
  24. package/dist/cjs/enhancers/withEmptyFieldEditingComponent.js +8 -38
  25. package/dist/cjs/enhancers/withFieldMetadata.js +9 -39
  26. package/dist/cjs/enhancers/withPlaceholder.js +16 -52
  27. package/dist/cjs/enhancers/withSitecore.js +5 -29
  28. package/dist/cjs/index.js +13 -8
  29. package/dist/cjs/search/utils.js +2 -2
  30. package/dist/esm/components/Date.js +13 -11
  31. package/dist/esm/components/DefaultEmptyFieldEditingComponents.js +2 -1
  32. package/dist/esm/components/DesignLibrary/DesignLibrary.js +5 -9
  33. package/dist/esm/components/DesignLibrary/DesignLibraryErrorBoundary.js +6 -0
  34. package/dist/esm/components/DesignLibrary/index.js +1 -1
  35. package/dist/esm/components/EditingScripts.js +2 -2
  36. package/dist/esm/components/ErrorBoundary.js +11 -6
  37. package/dist/esm/components/File.js +3 -1
  38. package/dist/esm/components/Form.js +15 -6
  39. package/dist/esm/components/Image.js +12 -9
  40. package/dist/esm/components/Link.js +16 -13
  41. package/dist/esm/components/Placeholder/AppPlaceholder.js +57 -59
  42. package/dist/esm/components/Placeholder/ClientComponentWrapper.js +4 -8
  43. package/dist/esm/components/Placeholder/Placeholder.js +20 -89
  44. package/dist/esm/components/Placeholder/PlaceholderMetadata.js +1 -0
  45. package/dist/esm/components/Placeholder/index.js +1 -1
  46. package/dist/esm/components/Placeholder/placeholder-utils.js +5 -32
  47. package/dist/esm/components/RichText.js +15 -16
  48. package/dist/esm/components/SitecoreProvider.js +46 -32
  49. package/dist/esm/components/Text.js +12 -8
  50. package/dist/esm/enhancers/withAppPlaceholder.js +6 -0
  51. package/dist/esm/enhancers/withDatasourceCheck.js +3 -2
  52. package/dist/esm/enhancers/withEditorChromes.js +17 -12
  53. package/dist/esm/enhancers/withEmptyFieldEditingComponent.js +5 -5
  54. package/dist/esm/enhancers/withFieldMetadata.js +6 -6
  55. package/dist/esm/enhancers/withPlaceholder.js +15 -52
  56. package/dist/esm/enhancers/withSitecore.js +6 -29
  57. package/dist/esm/index.js +7 -5
  58. package/dist/esm/search/utils.js +1 -1
  59. package/package.json +7 -6
  60. package/types/components/Date.d.ts.map +1 -1
  61. package/types/components/DefaultEmptyFieldEditingComponents.d.ts.map +1 -1
  62. package/types/components/DesignLibrary/DesignLibrary.d.ts +0 -2
  63. package/types/components/DesignLibrary/DesignLibrary.d.ts.map +1 -1
  64. package/types/components/DesignLibrary/DesignLibraryErrorBoundary.d.ts +13 -0
  65. package/types/components/DesignLibrary/DesignLibraryErrorBoundary.d.ts.map +1 -1
  66. package/types/components/DesignLibrary/index.d.ts +2 -1
  67. package/types/components/DesignLibrary/index.d.ts.map +1 -1
  68. package/types/components/DesignLibrary/models.d.ts +13 -55
  69. package/types/components/DesignLibrary/models.d.ts.map +1 -1
  70. package/types/components/EditingScripts.d.ts +2 -2
  71. package/types/components/EditingScripts.d.ts.map +1 -1
  72. package/types/components/ErrorBoundary.d.ts +3 -2
  73. package/types/components/ErrorBoundary.d.ts.map +1 -1
  74. package/types/components/File.d.ts.map +1 -1
  75. package/types/components/Form.d.ts.map +1 -1
  76. package/types/components/Image.d.ts.map +1 -1
  77. package/types/components/Link.d.ts.map +1 -1
  78. package/types/components/Placeholder/AppPlaceholder.d.ts +1 -1
  79. package/types/components/Placeholder/AppPlaceholder.d.ts.map +1 -1
  80. package/types/components/Placeholder/ClientComponentWrapper.d.ts +2 -2
  81. package/types/components/Placeholder/ClientComponentWrapper.d.ts.map +1 -1
  82. package/types/components/Placeholder/Placeholder.d.ts +4 -19
  83. package/types/components/Placeholder/Placeholder.d.ts.map +1 -1
  84. package/types/components/Placeholder/PlaceholderMetadata.d.ts +1 -0
  85. package/types/components/Placeholder/PlaceholderMetadata.d.ts.map +1 -1
  86. package/types/components/Placeholder/index.d.ts +1 -1
  87. package/types/components/Placeholder/index.d.ts.map +1 -1
  88. package/types/components/Placeholder/models.d.ts +35 -58
  89. package/types/components/Placeholder/models.d.ts.map +1 -1
  90. package/types/components/Placeholder/placeholder-utils.d.ts +5 -13
  91. package/types/components/Placeholder/placeholder-utils.d.ts.map +1 -1
  92. package/types/components/RichText.d.ts +2 -0
  93. package/types/components/RichText.d.ts.map +1 -1
  94. package/types/components/SitecoreProvider.d.ts +43 -13
  95. package/types/components/SitecoreProvider.d.ts.map +1 -1
  96. package/types/components/Text.d.ts.map +1 -1
  97. package/types/enhancers/withAppPlaceholder.d.ts +6 -0
  98. package/types/enhancers/withAppPlaceholder.d.ts.map +1 -1
  99. package/types/enhancers/withDatasourceCheck.d.ts.map +1 -1
  100. package/types/enhancers/withEditorChromes.d.ts +4 -1
  101. package/types/enhancers/withEditorChromes.d.ts.map +1 -1
  102. package/types/enhancers/withEmptyFieldEditingComponent.d.ts +5 -3
  103. package/types/enhancers/withEmptyFieldEditingComponent.d.ts.map +1 -1
  104. package/types/enhancers/withFieldMetadata.d.ts +4 -2
  105. package/types/enhancers/withFieldMetadata.d.ts.map +1 -1
  106. package/types/enhancers/withPlaceholder.d.ts +14 -32
  107. package/types/enhancers/withPlaceholder.d.ts.map +1 -1
  108. package/types/enhancers/withSitecore.d.ts +8 -50
  109. package/types/enhancers/withSitecore.d.ts.map +1 -1
  110. package/types/index.d.ts +7 -5
  111. package/types/index.d.ts.map +1 -1
  112. package/dist/cjs/components/DesignLibrary/DesignLibraryApp.js +0 -31
  113. package/dist/cjs/components/DesignLibrary/DesignLibraryClientEvents.js +0 -131
  114. package/dist/cjs/components/DesignLibrary/DesignLibraryServer.js +0 -212
  115. package/dist/cjs/enhancers/withComponentMap.js +0 -24
  116. package/dist/cjs/enhancers/withLoadImportMap.js +0 -62
  117. package/dist/cjs/server-actions/update-server-component-action.js +0 -51
  118. package/dist/esm/components/DesignLibrary/DesignLibraryApp.js +0 -24
  119. package/dist/esm/components/DesignLibrary/DesignLibraryClientEvents.js +0 -92
  120. package/dist/esm/components/DesignLibrary/DesignLibraryServer.js +0 -169
  121. package/dist/esm/enhancers/withComponentMap.js +0 -18
  122. package/dist/esm/enhancers/withLoadImportMap.js +0 -25
  123. package/dist/esm/server-actions/update-server-component-action.js +0 -47
  124. package/types/components/DesignLibrary/DesignLibraryApp.d.ts +0 -14
  125. package/types/components/DesignLibrary/DesignLibraryApp.d.ts.map +0 -1
  126. package/types/components/DesignLibrary/DesignLibraryClientEvents.d.ts +0 -21
  127. package/types/components/DesignLibrary/DesignLibraryClientEvents.d.ts.map +0 -1
  128. package/types/components/DesignLibrary/DesignLibraryServer.d.ts +0 -38
  129. package/types/components/DesignLibrary/DesignLibraryServer.d.ts.map +0 -1
  130. package/types/enhancers/withComponentMap.d.ts +0 -13
  131. package/types/enhancers/withComponentMap.d.ts.map +0 -1
  132. package/types/enhancers/withLoadImportMap.d.ts +0 -28
  133. package/types/enhancers/withLoadImportMap.d.ts.map +0 -1
  134. package/types/server-actions/update-server-component-action.d.ts +0 -58
  135. package/types/server-actions/update-server-component-action.d.ts.map +0 -1
@@ -20,19 +20,13 @@ const withFieldMetadata_1 = require("../enhancers/withFieldMetadata");
20
20
  const withEmptyFieldEditingComponent_1 = require("../enhancers/withEmptyFieldEditingComponent");
21
21
  const DefaultEmptyFieldEditingComponents_1 = require("./DefaultEmptyFieldEditingComponents");
22
22
  const layout_1 = require("@sitecore-content-sdk/content/layout");
23
- /**
24
- * The DateField component.
25
- * @public
26
- */
27
- exports.DateField = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEditingComponent_1.withEmptyFieldEditingComponent)(
28
- // eslint-disable-next-line no-unused-vars
29
- (_a) => {
30
- var { field, tag, editable = true, render } = _a, otherProps = __rest(_a, ["field", "tag", "editable", "render"]);
23
+ const DateFieldComponent = (_a) => {
24
+ var { field, tag, render } = _a, htmlProps = __rest(_a, ["field", "tag", "render"]);
31
25
  if ((0, layout_1.isFieldValueEmpty)(field)) {
32
26
  return null;
33
27
  }
28
+ delete htmlProps.editable; // prevent editable from being passed to the DOM
34
29
  let children;
35
- const htmlProps = Object.assign({}, otherProps);
36
30
  if (render) {
37
31
  children = render(field.value ? new Date(field.value) : null);
38
32
  }
@@ -40,10 +34,18 @@ exports.DateField = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFiel
40
34
  children = field.value;
41
35
  }
42
36
  if (tag) {
43
- return react_1.default.createElement(tag || 'span', htmlProps, children);
37
+ const Tag = (tag || 'span');
38
+ return react_1.default.createElement(Tag, Object.assign({}, htmlProps), children);
44
39
  }
45
40
  else {
46
41
  return react_1.default.createElement(react_1.default.Fragment, null, children);
47
42
  }
48
- }, { defaultEmptyFieldEditingComponent: DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentText }));
43
+ };
44
+ /**
45
+ * The DateField component.
46
+ * @public
47
+ */
48
+ exports.DateField = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEditingComponent_1.withEmptyFieldEditingComponent)(DateFieldComponent, {
49
+ defaultEmptyFieldEditingComponent: DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentText,
50
+ }));
49
51
  exports.DateField.displayName = 'Date';
@@ -11,7 +11,8 @@ const react_1 = __importDefault(require("react"));
11
11
  * @public
12
12
  */
13
13
  const DefaultEmptyFieldEditingComponentText = (props) => {
14
- return react_1.default.createElement(props.tag || 'span', Object.assign(Object.assign({}, props), { suppressHydrationWarning: true }), '[No text in field]');
14
+ const Tag = (props.tag || 'span');
15
+ return (react_1.default.createElement(Tag, Object.assign({}, props, { suppressHydrationWarning: true }), "[No text in field]"));
15
16
  };
16
17
  exports.DefaultEmptyFieldEditingComponentText = DefaultEmptyFieldEditingComponentText;
17
18
  /**
@@ -42,10 +42,9 @@ const layout_1 = require("@sitecore-content-sdk/content/layout");
42
42
  const editing_1 = require("@sitecore-content-sdk/content/editing");
43
43
  const codegen = __importStar(require("@sitecore-content-sdk/content/codegen"));
44
44
  const editing = __importStar(require("@sitecore-content-sdk/content/editing"));
45
- const withSitecore_1 = require("../../enhancers/withSitecore");
45
+ const SitecoreProvider_1 = require("../../components/SitecoreProvider");
46
46
  const Placeholder_1 = require("../Placeholder");
47
47
  const DesignLibraryErrorBoundary_1 = require("./DesignLibraryErrorBoundary");
48
- const withLoadImportMap_1 = require("../../enhancers/withLoadImportMap");
49
48
  const ErrorBoundary_1 = require("../ErrorBoundary");
50
49
  let { getDesignLibraryImportMapEvent, getDesignLibraryComponentPropsEvent, addComponentPreviewHandler, sendErrorEvent, } = codegen;
51
50
  let { postToDesignLibrary } = editing;
@@ -66,15 +65,12 @@ exports.__mockDependencies = __mockDependencies;
66
65
  * when generation is enabled (`page.mode.designLibrary.isVariantGeneration === true`),
67
66
  * wires the **variant generation** handshake so the parent (DL Studio) can send
68
67
  * generated code to preview and iterate on.
69
- * @param {DesignLibraryProps} props
70
- * @param {() => Promise} [props.loadImportMap] Optional async loader that resolves to the import-map used to resolve the generated component’s imports. Required when `isVariantGeneration` is true.
71
68
  * @returns {JSX.Element} The preview surface, or `null` when not in Design Library mode.
72
69
  * @public
73
70
  */
74
71
  const DesignLibrary = () => {
75
72
  var _a, _b;
76
- const { page } = (0, withSitecore_1.useSitecore)();
77
- const loadImportMap = (0, withLoadImportMap_1.useLoadImportMap)();
73
+ const { page, loadImportMap } = (0, SitecoreProvider_1.useSitecore)();
78
74
  const route = page.layout.sitecore.route;
79
75
  const rendering = (_a = route === null || route === void 0 ? void 0 : route.placeholders[layout_1.EDITING_COMPONENT_PLACEHOLDER]) === null || _a === void 0 ? void 0 : _a[0];
80
76
  const uid = rendering === null || rendering === void 0 ? void 0 : rendering.uid;
@@ -123,7 +119,7 @@ const DesignLibrary = () => {
123
119
  let unsubscribe;
124
120
  (async () => {
125
121
  if (!loadImportMap) {
126
- sendErrorEvent(uid, 'No loadImportMap provided', codegen.DesignLibraryPreviewError.RenderInit);
122
+ sendErrorEvent(uid, 'No loadImportMap provided', codegen.DesignLibraryPreviewError.ImportMapMissing);
127
123
  return;
128
124
  }
129
125
  let importMap;
@@ -132,7 +128,7 @@ const DesignLibrary = () => {
132
128
  importMap = mod.default;
133
129
  }
134
130
  catch (e) {
135
- sendErrorEvent(uid, `Error loading import map: ${e}`, codegen.DesignLibraryPreviewError.RenderInit);
131
+ sendErrorEvent(uid, `Error loading import map: ${e}`, codegen.DesignLibraryPreviewError.ImportMapLoad);
136
132
  return;
137
133
  }
138
134
  // account for component being unmounted while resolving async import map
@@ -155,7 +151,7 @@ const DesignLibrary = () => {
155
151
  cancelled = true;
156
152
  unsubscribe && unsubscribe();
157
153
  };
158
- }, [isVariantGeneration, uid]);
154
+ }, [isDesignLibrary, isVariantGeneration, uid, loadImportMap, propsState]);
159
155
  return (react_1.default.createElement("main", null, isGeneratedComponentActive ? (react_1.default.createElement(DesignLibraryErrorBoundary_1.DesignLibraryErrorBoundary, { uid: uid, renderKey: renderKey },
160
156
  react_1.default.createElement(Placeholder_1.PlaceholderMetadata, { rendering: rendering },
161
157
  react_1.default.createElement(Component, { fields: propsState.fields, params: propsState.params, key: renderKey })))) : (react_1.default.createElement("div", { id: layout_1.EDITING_COMPONENT_ID }, route && (react_1.default.createElement(Placeholder_1.Placeholder, { name: layout_1.EDITING_COMPONENT_PLACEHOLDER, rendering: route, key: renderKey }))))));
@@ -37,6 +37,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
37
37
  exports.DesignLibraryErrorBoundary = void 0;
38
38
  const react_1 = __importStar(require("react"));
39
39
  const codegen_1 = require("@sitecore-content-sdk/content/codegen");
40
+ /**
41
+ * Error boundary for the Design Library component.
42
+ * Catches errors during rendering and sends them to the Design Library
43
+ * @param {DesignLibraryErrorBoundaryProps} props - The props for the error boundary, including the component UID and children to render.
44
+ * @internal
45
+ */
40
46
  class DesignLibraryErrorBoundary extends react_1.default.Component {
41
47
  constructor() {
42
48
  super(...arguments);
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DesignLibraryApp = exports.DesignLibrary = void 0;
3
+ exports.DesignLibraryErrorBoundary = exports.DesignLibrary = void 0;
4
4
  var DesignLibrary_1 = require("./DesignLibrary");
5
5
  Object.defineProperty(exports, "DesignLibrary", { enumerable: true, get: function () { return DesignLibrary_1.DesignLibrary; } });
6
- var DesignLibraryApp_1 = require("./DesignLibraryApp");
7
- Object.defineProperty(exports, "DesignLibraryApp", { enumerable: true, get: function () { return DesignLibraryApp_1.DesignLibraryApp; } });
6
+ var DesignLibraryErrorBoundary_1 = require("./DesignLibraryErrorBoundary");
7
+ Object.defineProperty(exports, "DesignLibraryErrorBoundary", { enumerable: true, get: function () { return DesignLibraryErrorBoundary_1.DesignLibraryErrorBoundary; } });
@@ -6,7 +6,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.EditingScripts = void 0;
8
8
  const react_1 = __importDefault(require("react"));
9
- const withSitecore_1 = require("../enhancers/withSitecore");
9
+ const SitecoreProvider_1 = require("./SitecoreProvider");
10
10
  const editing_1 = require("@sitecore-content-sdk/content/editing");
11
11
  /**
12
12
  * Renders client scripts and data for editing/preview mode for Pages.
@@ -16,7 +16,7 @@ const editing_1 = require("@sitecore-content-sdk/content/editing");
16
16
  */
17
17
  const EditingScripts = () => {
18
18
  var _a;
19
- const { page: { mode, layout }, api, } = (0, withSitecore_1.useSitecore)();
19
+ const { page: { mode, layout }, api, } = (0, SitecoreProvider_1.useSitecore)();
20
20
  const { clientData, clientScripts } = layout.sitecore.context;
21
21
  // Don't render anything if not in editing mode and rendering type is not component
22
22
  if (mode.isNormal || mode.isPreview) {
@@ -36,16 +36,17 @@ var __importStar = (this && this.__importStar) || (function () {
36
36
  Object.defineProperty(exports, "__esModule", { value: true });
37
37
  exports.ErrorComponent = void 0;
38
38
  const react_1 = __importStar(require("react"));
39
- const withSitecore_1 = require("../enhancers/withSitecore");
39
+ const SitecoreProvider_1 = require("./SitecoreProvider");
40
40
  /**
41
41
  * Simple error component applying basic error styling.
42
42
  * @param {object} props - Either with `message` (string) or with `children` (ReactNode), but not both.
43
+ * @internal
43
44
  */
44
45
  const ErrorComponent = (props) => {
45
46
  return (react_1.default.createElement("div", { className: "sc-content-sdk-placeholder-error" }, props.message ? props.message : props.children));
46
47
  };
47
48
  exports.ErrorComponent = ErrorComponent;
48
- class ErrorBoundary extends react_1.default.Component {
49
+ class ErrorBoundaryClass extends react_1.default.Component {
49
50
  constructor(props) {
50
51
  super(props);
51
52
  this.defaultErrorMessage = 'There was a problem loading this section.';
@@ -69,7 +70,7 @@ class ErrorBoundary extends react_1.default.Component {
69
70
  return this.isInDevMode() || this.props.page.mode.isEditing || this.props.page.mode.isPreview;
70
71
  }
71
72
  render() {
72
- var _a;
73
+ var _a, _b;
73
74
  if (this.state.error) {
74
75
  if (this.props.errorComponent) {
75
76
  return react_1.default.createElement(this.props.errorComponent, { error: this.state.error });
@@ -92,10 +93,14 @@ class ErrorBoundary extends react_1.default.Component {
92
93
  }
93
94
  }
94
95
  // do not apply suspense when suspense is disabled or when on already dynamic components
95
- if (this.props.disableSuspense || this.props.isDynamic) {
96
+ if (((_b = this.props.disableSuspense) !== null && _b !== void 0 ? _b : true) || this.props.isDynamic)
96
97
  return this.props.children;
97
- }
98
98
  return (react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement("h4", null, this.props.componentLoadingMessage || this.defaultLoadingMessage) }, this.props.children));
99
99
  }
100
100
  }
101
- exports.default = (0, withSitecore_1.withSitecore)()(ErrorBoundary);
101
+ const ErrorBoundary = (props) => {
102
+ const { page } = (0, SitecoreProvider_1.useSitecore)();
103
+ const boundaryProps = Object.assign(Object.assign({}, props), { page });
104
+ return react_1.default.createElement(ErrorBoundaryClass, Object.assign({}, boundaryProps));
105
+ };
106
+ exports.default = ErrorBoundary;
@@ -37,7 +37,9 @@ const File = (_a) => {
37
37
  const anchorAttrs = {
38
38
  href: file.src,
39
39
  };
40
- return react_1.default.createElement('a', Object.assign(Object.assign({}, anchorAttrs), otherProps), linkText, children);
40
+ return (react_1.default.createElement("a", Object.assign({}, anchorAttrs, otherProps),
41
+ linkText,
42
+ children));
41
43
  };
42
44
  exports.File = File;
43
45
  exports.File.displayName = 'File';
@@ -37,8 +37,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
37
37
  exports.Form = exports.mockFormModule = void 0;
38
38
  const react_1 = __importStar(require("react"));
39
39
  const content_1 = require("@sitecore-content-sdk/content");
40
- const withSitecore_1 = require("../enhancers/withSitecore");
40
+ const core_1 = require("@sitecore-content-sdk/core");
41
+ const SitecoreProvider_1 = require("./SitecoreProvider");
41
42
  const ErrorBoundary_1 = require("./ErrorBoundary");
43
+ const { ERROR_MESSAGES } = core_1.constants;
42
44
  let { executeScriptElements, loadForm, subscribeToFormSubmitEvent } = content_1.form;
43
45
  /**
44
46
  * Mock function to replace the form module functions for `testing` purposes.
@@ -56,11 +58,11 @@ exports.mockFormModule = mockFormModule;
56
58
  * @public
57
59
  */
58
60
  const Form = ({ params, rendering }) => {
59
- var _a;
61
+ var _a, _b, _c, _d, _e;
60
62
  const id = params === null || params === void 0 ? void 0 : params.RenderingIdentifier;
61
63
  const [error, setError] = (0, react_1.useState)(false);
62
64
  const [content, setContent] = (0, react_1.useState)('');
63
- const context = (0, withSitecore_1.useSitecore)();
65
+ const context = (0, SitecoreProvider_1.useSitecore)();
64
66
  const formRef = (0, react_1.useRef)(null);
65
67
  const isEditing = context.page.mode.isEditing;
66
68
  (0, react_1.useEffect)(() => {
@@ -70,14 +72,14 @@ const Form = ({ params, rendering }) => {
70
72
  const edgeId = (_b = (_a = context.api) === null || _a === void 0 ? void 0 : _a.edge) === null || _b === void 0 ? void 0 : _b.clientContextId;
71
73
  if (!edgeId) {
72
74
  /* eslint-disable no-console */
73
- console.warn('Warning: clientContextId is missing – form cannot be loaded properly on the client');
75
+ console.warn(`${ERROR_MESSAGES.MV_006}. Form cannot be loaded properly on the client`);
74
76
  return;
75
77
  }
76
78
  loadForm(edgeId, params.FormId, (_d = (_c = context.api) === null || _c === void 0 ? void 0 : _c.edge) === null || _d === void 0 ? void 0 : _d.edgeUrl)
77
79
  .then(setContent)
78
80
  .catch(() => {
79
81
  if (isEditing) {
80
- console.error(`Failed to load form with id ${params.FormId}. Check debug logs for content-sdk:form for more details.`);
82
+ console.error(`Failed to load form with id ${params.FormId}. Check debug logs for content-sdk:form for more details. ${ERROR_MESSAGES.CONTACT_SUPPORT}`);
81
83
  }
82
84
  setError(true);
83
85
  });
@@ -91,10 +93,17 @@ const Form = ({ params, rendering }) => {
91
93
  }
92
94
  executeScriptElements(formRef.current);
93
95
  }
94
- }, [content]);
96
+ }, [
97
+ content,
98
+ isEditing,
99
+ params.FormId,
100
+ rendering.uid,
101
+ (_b = (_a = context.api) === null || _a === void 0 ? void 0 : _a.edge) === null || _b === void 0 ? void 0 : _b.clientContextId,
102
+ (_d = (_c = context.api) === null || _c === void 0 ? void 0 : _c.edge) === null || _d === void 0 ? void 0 : _d.edgeUrl,
103
+ ]);
95
104
  if (isEditing && error) {
96
105
  return react_1.default.createElement(ErrorBoundary_1.ErrorComponent, { message: "There was a problem loading this section" });
97
106
  }
98
- return (react_1.default.createElement("div", { ref: formRef, dangerouslySetInnerHTML: { __html: content }, className: (_a = params.styles) === null || _a === void 0 ? void 0 : _a.trimEnd(), id: id ? id : undefined }));
107
+ return (react_1.default.createElement("div", { ref: formRef, dangerouslySetInnerHTML: { __html: content }, className: (_e = params.styles) === null || _e === void 0 ? void 0 : _e.trimEnd(), id: id ? id : undefined }));
99
108
  };
100
109
  exports.Form = Form;
@@ -15,7 +15,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.Image = void 0;
18
- /* eslint-disable no-unused-vars */
19
18
  const media_1 = require("@sitecore-content-sdk/content/media");
20
19
  const react_1 = __importDefault(require("react"));
21
20
  const utils_1 = require("../utils");
@@ -40,17 +39,13 @@ const getImageAttrs = (_a, imageParams, mediaUrlPrefix) => {
40
39
  newAttrs.src = resolvedSrc;
41
40
  return newAttrs;
42
41
  };
43
- /**
44
- * The Image component.
45
- * @param {ImageProps} props component props
46
- * @public
47
- */
48
- exports.Image = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEditingComponent_1.withEmptyFieldEditingComponent)((_a) => {
49
- var { editable = true, imageParams, field, mediaUrlPrefix } = _a, otherProps = __rest(_a, ["editable", "imageParams", "field", "mediaUrlPrefix"]);
42
+ const ImageComponent = (_a) => {
43
+ var { imageParams, field, mediaUrlPrefix } = _a, otherProps = __rest(_a, ["imageParams", "field", "mediaUrlPrefix"]);
50
44
  const dynamicMedia = field;
51
45
  if ((0, layout_1.isFieldValueEmpty)(dynamicMedia)) {
52
46
  return null;
53
47
  }
48
+ delete otherProps.editable; // prevent editable from being passed to the DOM
54
49
  // some wise-guy/gal is passing in a 'raw' image object value
55
50
  const img = dynamicMedia.src
56
51
  ? field
@@ -67,5 +62,13 @@ exports.Image = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEdi
67
62
  return react_1.default.createElement("img", Object.assign({}, attrs));
68
63
  }
69
64
  return null; // we can't handle the truth
70
- }, { defaultEmptyFieldEditingComponent: DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentImage }));
65
+ };
66
+ /**
67
+ * The Image component.
68
+ * @param {ImageProps} props component props
69
+ * @public
70
+ */
71
+ exports.Image = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEditingComponent_1.withEmptyFieldEditingComponent)(ImageComponent, {
72
+ defaultEmptyFieldEditingComponent: DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentImage,
73
+ }));
71
74
  exports.Image.displayName = 'Image';
@@ -1,38 +1,5 @@
1
1
  "use strict";
2
2
  'use client';
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
3
  var __rest = (this && this.__rest) || function (s, e) {
37
4
  var t = {};
38
5
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -44,24 +11,21 @@ var __rest = (this && this.__rest) || function (s, e) {
44
11
  }
45
12
  return t;
46
13
  };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
47
17
  Object.defineProperty(exports, "__esModule", { value: true });
48
18
  exports.Link = void 0;
49
- const react_1 = __importStar(require("react"));
19
+ const react_1 = __importDefault(require("react"));
50
20
  const layout_1 = require("@sitecore-content-sdk/content/layout");
51
21
  const withFieldMetadata_1 = require("../enhancers/withFieldMetadata");
52
22
  const withEmptyFieldEditingComponent_1 = require("../enhancers/withEmptyFieldEditingComponent");
53
23
  const DefaultEmptyFieldEditingComponents_1 = require("./DefaultEmptyFieldEditingComponents");
54
- /**
55
- * The Link component.
56
- * @param {LinkProps} props component props
57
- * @public
58
- */
59
- exports.Link = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEditingComponent_1.withEmptyFieldEditingComponent)((0, react_1.forwardRef)(
60
- // eslint-disable-next-line no-unused-vars
61
- (_a, ref) => {
62
- var { field, editable = true, showLinkTextWithChildrenPresent } = _a, otherProps = __rest(_a, ["field", "editable", "showLinkTextWithChildrenPresent"]);
24
+ const LinkComponent = (_a) => {
25
+ var { field, showLinkTextWithChildrenPresent, ref } = _a, otherProps = __rest(_a, ["field", "showLinkTextWithChildrenPresent", "ref"]);
63
26
  const children = otherProps.children;
64
27
  const dynamicField = field;
28
+ delete otherProps.editable; // prevent editable from being passed to the DOM
65
29
  if ((0, layout_1.isFieldValueEmpty)(dynamicField)) {
66
30
  return null;
67
31
  }
@@ -85,7 +49,16 @@ exports.Link = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEdit
85
49
  anchorAttrs.rel = 'noopener noreferrer';
86
50
  }
87
51
  const linkText = showLinkTextWithChildrenPresent || !children ? link.text || link.href : null;
88
- const element = react_1.default.createElement('a', Object.assign(Object.assign(Object.assign({}, anchorAttrs), otherProps), { key: 'link', ref }), linkText, children);
89
- return react_1.default.createElement(react_1.default.Fragment, null, element);
90
- }), { defaultEmptyFieldEditingComponent: DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentText, isForwardRef: true }), true);
52
+ return (react_1.default.createElement("a", Object.assign({}, anchorAttrs, otherProps, { key: "link", ref: ref }),
53
+ linkText,
54
+ children));
55
+ };
56
+ /**
57
+ * The Link component.
58
+ * @param {LinkProps} props component props
59
+ * @public
60
+ */
61
+ exports.Link = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEditingComponent_1.withEmptyFieldEditingComponent)(LinkComponent, {
62
+ defaultEmptyFieldEditingComponent: DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentText,
63
+ }));
91
64
  exports.Link.displayName = 'Link';
@@ -6,74 +6,72 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.AppPlaceholder = void 0;
7
7
  const placeholder_utils_1 = require("./placeholder-utils");
8
8
  const react_1 = __importDefault(require("react"));
9
- const PlaceholderMetadata_1 = require("./PlaceholderMetadata");
10
9
  const ErrorBoundary_1 = __importDefault(require("../ErrorBoundary"));
11
10
  const ClientComponentWrapper_1 = require("./ClientComponentWrapper");
12
11
  const _rsc_env_1 = require("#rsc-env");
13
- /**
14
- * The implemention of placeholder compatible with React Server Components.
15
- * Renders components from the layout data for the given placeholder name, with consideration for page edit mode.
16
- * Pulls components from the provided component map.
17
- * @param {AppPlaceholderProps} props Placeholder props
18
- * @returns {React.ReactNode | React.ReactElement[]} rendered component(s)
19
- * @public
20
- */
21
- const AppPlaceholder = (props) => {
22
- const { rendering: parentRendering, componentMap, page } = props;
23
- const placeholderRenderings = (0, placeholder_utils_1.getPlaceholderRenderings)(parentRendering, props.name, page.mode.isEditing);
24
- const components = placeholderRenderings
25
- .map((rendering, index) => {
26
- const { component: Component, isEmpty, componentType, dynamic, } = (0, placeholder_utils_1.getComponentForRendering)(rendering, props.name, componentMap, props.hiddenRenderingComponent, props.missingComponentComponent);
27
- const isClient = componentType === 'client';
28
- const key = rendering.uid || `component-${index}`;
29
- // Use rsc context to determine the current runtime
30
- const componentRuntime = _rsc_env_1.rsc ? 'server' : 'client';
31
- const renderedProps = (0, placeholder_utils_1.getAppComponentProps)(props, rendering);
32
- const finalRenderedProps = props.modifyComponentProps
33
- ? props.modifyComponentProps(renderedProps)
34
- : renderedProps;
12
+ const PlaceholderMetadata_1 = require("./PlaceholderMetadata");
13
+ const AppPlaceholderComponent = (props) => {
14
+ const renderingData = props.rendering;
15
+ const isEditing = props.page.mode.isEditing;
16
+ const placeholderRenderings = (0, placeholder_utils_1.getPlaceholderRenderings)(renderingData, props.name, isEditing);
17
+ const isEmpty = !placeholderRenderings.length;
18
+ const components = getPlaceholderComponents(props, placeholderRenderings);
19
+ if (isEmpty) {
20
+ let renderedOutput = components;
21
+ if (props.renderEmpty) {
22
+ renderedOutput = props.renderEmpty(components);
23
+ }
24
+ return isEditing ? (0, placeholder_utils_1.renderEmptyPlaceholder)(renderedOutput) : renderedOutput;
25
+ }
26
+ else if (props.render) {
27
+ return props.render(components, placeholderRenderings, props);
28
+ }
29
+ return components;
30
+ };
31
+ const getPlaceholderComponents = (placeholderProps, placeholderRenderings) => {
32
+ const { name, rendering, passThroughComponentProps, missingComponentComponent, hiddenRenderingComponent, errorComponent, componentLoadingMessage, renderEach, modifyComponentProps, componentMap, page, } = placeholderProps;
33
+ const isEditing = page.mode.isEditing;
34
+ const componentRuntime = _rsc_env_1.rsc ? 'server' : 'client';
35
+ const transformedComponents = placeholderRenderings
36
+ .map((componentRendering, index) => {
37
+ const { component: ChildComponent, isEmpty: componentEmpty, componentType, dynamic, } = (0, placeholder_utils_1.getComponentForRendering)(componentRendering, name, componentMap, hiddenRenderingComponent, missingComponentComponent);
38
+ const key = componentRendering.uid || `component-${index}`;
39
+ const renderedProps = modifyComponentProps
40
+ ? modifyComponentProps((0, placeholder_utils_1.getChildComponentProps)(placeholderProps, componentRendering))
41
+ : (0, placeholder_utils_1.getChildComponentProps)(placeholderProps, componentRendering);
35
42
  // Client wrapper is required only when component crosses boundary from server to client.
36
43
  // It happens when component is marker as client and rendered in RSC context.
37
44
  // Also, it is not required when component is hidden or empty, as it will be rendered whthout boundary crossing.
38
- const useClientWrapper = isClient && _rsc_env_1.rsc && !isEmpty;
39
- let rendered = useClientWrapper ? (react_1.default.createElement(ClientComponentWrapper_1.ClientComponentWrapper, { rendering: rendering, componentProps: finalRenderedProps, placeholderName: props.name, key: key })) : (react_1.default.createElement(Component, Object.assign({ key: key }, finalRenderedProps, { rendering: rendering, page: page, componentMap: componentMap })));
40
- if (!isEmpty) {
45
+ const useClientWrapper = componentType === 'client' && _rsc_env_1.rsc && !componentEmpty;
46
+ let rendered = useClientWrapper ? (react_1.default.createElement(ClientComponentWrapper_1.ClientComponentWrapper, { rendering: renderedProps.rendering, componentProps: Object.assign(Object.assign({}, renderedProps), passThroughComponentProps), placeholderName: name, key: key })) : (react_1.default.createElement(ChildComponent, Object.assign({ key: key }, renderedProps, passThroughComponentProps, { page: page, componentMap: componentMap })));
47
+ if (renderEach) {
48
+ rendered = renderEach(rendered, index);
49
+ }
50
+ if (!componentEmpty) {
41
51
  const errorBoundaryKey = rendered.type + '-' + index;
42
- const disableSuspense = props.disableSuspense || false;
43
- rendered = (react_1.default.createElement(ErrorBoundary_1.default, { "data-testid": "error-boundary", key: errorBoundaryKey, errorComponent: props.errorComponent, componentLoadingMessage: props.componentLoadingMessage, isDynamic: dynamic, disableSuspense: disableSuspense, rendering: rendered.props.rendering }, rendered));
52
+ rendered = (react_1.default.createElement(ErrorBoundary_1.default, { "data-testid": "error-boundary", key: errorBoundaryKey, errorComponent: errorComponent, componentLoadingMessage: componentLoadingMessage, isDynamic: dynamic, disableSuspense: placeholderProps.disableSuspense, rendering: rendered.props.rendering }, rendered));
44
53
  }
45
54
  // if in edit mode then emit shallow chromes for hydration in Pages
46
- if (page.mode.isEditing) {
47
- const key = rendering.uid || `component-${index}`;
48
- return (react_1.default.createElement(PlaceholderMetadata_1.PlaceholderMetadata, { key: key, rendering: rendering, componentRuntime: componentRuntime }, rendered));
49
- }
50
- return rendered;
55
+ return isEditing ? (react_1.default.createElement(PlaceholderMetadata_1.PlaceholderMetadata, { key: key, rendering: componentRendering, componentRuntime: componentRuntime }, rendered)) : (rendered);
51
56
  })
52
- .filter((element) => element);
53
- const finalRendering = page.mode.isEditing
54
- ? [
55
- react_1.default.createElement(PlaceholderMetadata_1.PlaceholderMetadata, { key: parentRendering.uid || 'placeholder-metadata-root', placeholderName: props.name, rendering: parentRendering }, components),
56
- ]
57
- : components;
58
- const placeholderEmpty = !placeholderRenderings.length;
59
- if (placeholderEmpty) {
60
- const rendered = props.renderEmpty ? props.renderEmpty(finalRendering) : finalRendering;
61
- return page.mode.isEditing ? (0, placeholder_utils_1.renderEmptyPlaceholder)(rendered) : rendered;
62
- }
63
- if (props.render) {
64
- return props.render(components, placeholderRenderings, props);
65
- }
66
- else if (props.renderEach) {
67
- const renderEach = props.renderEach;
68
- return finalRendering.map((component, index) => {
69
- if (component && component.props && component.props.type === 'text/sitecore') {
70
- return component;
71
- }
72
- return renderEach(component, index);
73
- });
74
- }
75
- else {
76
- return finalRendering;
57
+ .filter((element) => element); // remove nulls
58
+ if (!isEditing) {
59
+ return transformedComponents;
77
60
  }
61
+ return [
62
+ react_1.default.createElement(PlaceholderMetadata_1.PlaceholderMetadata, { key: rendering.uid, placeholderName: name, rendering: rendering }, transformedComponents),
63
+ ];
78
64
  };
65
+ /**
66
+ * The implemention of placeholder compatible with React Server Components.
67
+ * Renders components from the layout data for the given placeholder name, with consideration for page edit mode.
68
+ * Pulls components from the provided component map.
69
+ * @param {AppPlaceholderProps} props Placeholder props
70
+ * @returns {React.ReactNode | React.ReactElement[]} rendered component(s)
71
+ * @public
72
+ */
73
+ const AppPlaceholder = (props) => (
74
+ // Using error boundary for errors that may happen within Placeholder itself
75
+ react_1.default.createElement(ErrorBoundary_1.default, { errorComponent: props.errorComponent },
76
+ react_1.default.createElement(AppPlaceholderComponent, Object.assign({}, props))));
79
77
  exports.AppPlaceholder = AppPlaceholder;
@@ -6,16 +6,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.ClientComponentWrapper = void 0;
8
8
  const SitecoreProvider_1 = require("../SitecoreProvider");
9
- const react_1 = require("react");
10
- const react_2 = __importDefault(require("react"));
11
- const withSitecore_1 = require("../../enhancers/withSitecore");
9
+ const react_1 = __importDefault(require("react"));
12
10
  const placeholder_utils_1 = require("./placeholder-utils");
13
11
  const ClientComponentWrapper = (props) => {
14
- const { page } = (0, withSitecore_1.useSitecore)();
15
- const componentMap = (0, react_1.useContext)(SitecoreProvider_1.ComponentMapReactContext);
16
- const componentPropsWithContext = Object.assign(Object.assign({}, props.componentProps), { rendering: props.rendering, componentMap,
17
- page });
18
- const { component: Component } = (0, placeholder_utils_1.getComponentForRendering)(props.rendering, props.placeholderName, componentMap);
19
- return react_2.default.createElement(Component, Object.assign({}, componentPropsWithContext));
12
+ const { page, componentMap: clientComponentMap } = (0, SitecoreProvider_1.useSitecore)();
13
+ const componentPropsWithContext = Object.assign(Object.assign({}, props.componentProps), { rendering: props.rendering, componentMap: clientComponentMap, page });
14
+ const { component: Component } = (0, placeholder_utils_1.getComponentForRendering)(props.rendering, props.placeholderName, clientComponentMap);
15
+ return react_1.default.createElement(Component, Object.assign({}, componentPropsWithContext));
20
16
  };
21
17
  exports.ClientComponentWrapper = ClientComponentWrapper;