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

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 (108) 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 +3 -7
  4. package/dist/cjs/components/DesignLibrary/DesignLibraryClientEvents.js +13 -5
  5. package/dist/cjs/components/EditingScripts.js +2 -2
  6. package/dist/cjs/components/ErrorBoundary.js +8 -3
  7. package/dist/cjs/components/File.js +3 -1
  8. package/dist/cjs/components/Form.js +12 -5
  9. package/dist/cjs/components/Image.js +12 -9
  10. package/dist/cjs/components/Link.js +19 -46
  11. package/dist/cjs/components/Placeholder/AppPlaceholder.js +57 -58
  12. package/dist/cjs/components/Placeholder/ClientComponentWrapper.js +5 -9
  13. package/dist/cjs/components/Placeholder/Placeholder.js +21 -93
  14. package/dist/cjs/components/Placeholder/index.js +1 -2
  15. package/dist/cjs/components/Placeholder/placeholder-utils.js +7 -35
  16. package/dist/cjs/components/RichText.js +18 -49
  17. package/dist/cjs/components/SitecoreProvider.js +81 -33
  18. package/dist/cjs/components/Text.js +12 -8
  19. package/dist/cjs/enhancers/withAppPlaceholder.js +6 -0
  20. package/dist/cjs/enhancers/withDatasourceCheck.js +4 -3
  21. package/dist/cjs/enhancers/withEditorChromes.js +50 -15
  22. package/dist/cjs/enhancers/withEmptyFieldEditingComponent.js +8 -38
  23. package/dist/cjs/enhancers/withFieldMetadata.js +9 -39
  24. package/dist/cjs/enhancers/withPlaceholder.js +16 -52
  25. package/dist/cjs/enhancers/withSitecore.js +5 -29
  26. package/dist/cjs/index.js +9 -7
  27. package/dist/cjs/search/utils.js +2 -2
  28. package/dist/esm/components/Date.js +13 -11
  29. package/dist/esm/components/DefaultEmptyFieldEditingComponents.js +2 -1
  30. package/dist/esm/components/DesignLibrary/DesignLibrary.js +3 -7
  31. package/dist/esm/components/DesignLibrary/DesignLibraryClientEvents.js +12 -4
  32. package/dist/esm/components/EditingScripts.js +2 -2
  33. package/dist/esm/components/ErrorBoundary.js +8 -3
  34. package/dist/esm/components/File.js +3 -1
  35. package/dist/esm/components/Form.js +11 -4
  36. package/dist/esm/components/Image.js +12 -9
  37. package/dist/esm/components/Link.js +16 -13
  38. package/dist/esm/components/Placeholder/AppPlaceholder.js +58 -59
  39. package/dist/esm/components/Placeholder/ClientComponentWrapper.js +4 -8
  40. package/dist/esm/components/Placeholder/Placeholder.js +20 -89
  41. package/dist/esm/components/Placeholder/index.js +1 -1
  42. package/dist/esm/components/Placeholder/placeholder-utils.js +5 -32
  43. package/dist/esm/components/RichText.js +15 -16
  44. package/dist/esm/components/SitecoreProvider.js +46 -32
  45. package/dist/esm/components/Text.js +12 -8
  46. package/dist/esm/enhancers/withAppPlaceholder.js +6 -0
  47. package/dist/esm/enhancers/withDatasourceCheck.js +3 -2
  48. package/dist/esm/enhancers/withEditorChromes.js +17 -12
  49. package/dist/esm/enhancers/withEmptyFieldEditingComponent.js +5 -5
  50. package/dist/esm/enhancers/withFieldMetadata.js +6 -6
  51. package/dist/esm/enhancers/withPlaceholder.js +15 -52
  52. package/dist/esm/enhancers/withSitecore.js +6 -29
  53. package/dist/esm/index.js +4 -3
  54. package/dist/esm/search/utils.js +1 -1
  55. package/package.json +5 -5
  56. package/types/components/Date.d.ts.map +1 -1
  57. package/types/components/DefaultEmptyFieldEditingComponents.d.ts.map +1 -1
  58. package/types/components/DesignLibrary/DesignLibrary.d.ts +0 -2
  59. package/types/components/DesignLibrary/DesignLibrary.d.ts.map +1 -1
  60. package/types/components/DesignLibrary/DesignLibraryClientEvents.d.ts.map +1 -1
  61. package/types/components/EditingScripts.d.ts +2 -2
  62. package/types/components/EditingScripts.d.ts.map +1 -1
  63. package/types/components/ErrorBoundary.d.ts +2 -2
  64. package/types/components/ErrorBoundary.d.ts.map +1 -1
  65. package/types/components/File.d.ts.map +1 -1
  66. package/types/components/Form.d.ts.map +1 -1
  67. package/types/components/Image.d.ts.map +1 -1
  68. package/types/components/Link.d.ts.map +1 -1
  69. package/types/components/Placeholder/AppPlaceholder.d.ts +1 -1
  70. package/types/components/Placeholder/AppPlaceholder.d.ts.map +1 -1
  71. package/types/components/Placeholder/ClientComponentWrapper.d.ts +2 -2
  72. package/types/components/Placeholder/ClientComponentWrapper.d.ts.map +1 -1
  73. package/types/components/Placeholder/Placeholder.d.ts +4 -19
  74. package/types/components/Placeholder/Placeholder.d.ts.map +1 -1
  75. package/types/components/Placeholder/index.d.ts +1 -1
  76. package/types/components/Placeholder/index.d.ts.map +1 -1
  77. package/types/components/Placeholder/models.d.ts +30 -56
  78. package/types/components/Placeholder/models.d.ts.map +1 -1
  79. package/types/components/Placeholder/placeholder-utils.d.ts +5 -13
  80. package/types/components/Placeholder/placeholder-utils.d.ts.map +1 -1
  81. package/types/components/RichText.d.ts +2 -0
  82. package/types/components/RichText.d.ts.map +1 -1
  83. package/types/components/SitecoreProvider.d.ts +43 -13
  84. package/types/components/SitecoreProvider.d.ts.map +1 -1
  85. package/types/components/Text.d.ts.map +1 -1
  86. package/types/enhancers/withAppPlaceholder.d.ts +6 -0
  87. package/types/enhancers/withAppPlaceholder.d.ts.map +1 -1
  88. package/types/enhancers/withDatasourceCheck.d.ts.map +1 -1
  89. package/types/enhancers/withEditorChromes.d.ts +4 -1
  90. package/types/enhancers/withEditorChromes.d.ts.map +1 -1
  91. package/types/enhancers/withEmptyFieldEditingComponent.d.ts +5 -3
  92. package/types/enhancers/withEmptyFieldEditingComponent.d.ts.map +1 -1
  93. package/types/enhancers/withFieldMetadata.d.ts +4 -2
  94. package/types/enhancers/withFieldMetadata.d.ts.map +1 -1
  95. package/types/enhancers/withPlaceholder.d.ts +14 -32
  96. package/types/enhancers/withPlaceholder.d.ts.map +1 -1
  97. package/types/enhancers/withSitecore.d.ts +8 -50
  98. package/types/enhancers/withSitecore.d.ts.map +1 -1
  99. package/types/index.d.ts +4 -3
  100. package/types/index.d.ts.map +1 -1
  101. package/dist/cjs/enhancers/withComponentMap.js +0 -24
  102. package/dist/cjs/enhancers/withLoadImportMap.js +0 -62
  103. package/dist/esm/enhancers/withComponentMap.js +0 -18
  104. package/dist/esm/enhancers/withLoadImportMap.js +0 -25
  105. package/types/enhancers/withComponentMap.d.ts +0 -13
  106. package/types/enhancers/withComponentMap.d.ts.map +0 -1
  107. package/types/enhancers/withLoadImportMap.d.ts +0 -28
  108. package/types/enhancers/withLoadImportMap.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;
@@ -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 }))))));
@@ -39,7 +39,7 @@ const react_1 = __importStar(require("react"));
39
39
  const dlHelpers = __importStar(require("@sitecore-content-sdk/content/editing"));
40
40
  const codegen = __importStar(require("@sitecore-content-sdk/content/codegen"));
41
41
  const update_server_component_action_1 = require("../../server-actions/update-server-component-action");
42
- const withSitecore_1 = require("../../enhancers/withSitecore");
42
+ const SitecoreProvider_1 = require("../SitecoreProvider");
43
43
  let { getDesignLibraryComponentPropsEvent, addServerComponentPreviewHandler, getDesignLibraryImportMapEvent, addStyleElement, sendErrorEvent, } = codegen;
44
44
  let { getDesignLibraryStatusEvent, addComponentUpdateHandler, postToDesignLibrary } = dlHelpers;
45
45
  let _updateComponentAction = update_server_component_action_1.updateComponentAction;
@@ -87,7 +87,9 @@ exports.DesignLibraryPreviewEvents = DesignLibraryPreviewEvents;
87
87
  * @returns {JSX.Element} empty JSX element.
88
88
  */
89
89
  const DesignLibraryVariantGenerationEvents = ({ designLibraryStatus, component, importMap, componentInitError, generatedComponentData, }) => {
90
- const { api } = (0, withSitecore_1.useSitecore)();
90
+ var _a;
91
+ const { api } = (0, SitecoreProvider_1.useSitecore)();
92
+ const edgeUrl = (_a = api === null || api === void 0 ? void 0 : api.edge) === null || _a === void 0 ? void 0 : _a.edgeUrl;
91
93
  (0, react_1.useEffect)(() => {
92
94
  var _a;
93
95
  if (!(component === null || component === void 0 ? void 0 : component.uid))
@@ -101,11 +103,10 @@ const DesignLibraryVariantGenerationEvents = ({ designLibraryStatus, component,
101
103
  });
102
104
  });
103
105
  const unsubPreview = addServerComponentPreviewHandler((eventArgs) => {
104
- var _a;
105
106
  _previewComponentAction({
106
107
  uid: component.uid,
107
108
  args: eventArgs,
108
- }, (_a = api === null || api === void 0 ? void 0 : api.edge) === null || _a === void 0 ? void 0 : _a.edgeUrl);
109
+ }, edgeUrl);
109
110
  });
110
111
  if (componentInitError) {
111
112
  // an error occurred during initialization of the component on the server side
@@ -125,7 +126,14 @@ const DesignLibraryVariantGenerationEvents = ({ designLibraryStatus, component,
125
126
  unsubUpdate && unsubUpdate();
126
127
  unsubPreview && unsubPreview();
127
128
  };
128
- }, [component, designLibraryStatus, importMap, componentInitError, generatedComponentData]);
129
+ }, [
130
+ component,
131
+ designLibraryStatus,
132
+ importMap,
133
+ componentInitError,
134
+ generatedComponentData,
135
+ edgeUrl,
136
+ ]);
129
137
  return react_1.default.createElement(react_1.default.Fragment, null);
130
138
  };
131
139
  exports.DesignLibraryVariantGenerationEvents = DesignLibraryVariantGenerationEvents;
@@ -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,7 +36,7 @@ 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.
@@ -45,7 +45,7 @@ const ErrorComponent = (props) => {
45
45
  return (react_1.default.createElement("div", { className: "sc-content-sdk-placeholder-error" }, props.message ? props.message : props.children));
46
46
  };
47
47
  exports.ErrorComponent = ErrorComponent;
48
- class ErrorBoundary extends react_1.default.Component {
48
+ class ErrorBoundaryClass extends react_1.default.Component {
49
49
  constructor(props) {
50
50
  super(props);
51
51
  this.defaultErrorMessage = 'There was a problem loading this section.';
@@ -98,4 +98,9 @@ class ErrorBoundary extends react_1.default.Component {
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,7 +37,7 @@ 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 SitecoreProvider_1 = require("./SitecoreProvider");
41
41
  const ErrorBoundary_1 = require("./ErrorBoundary");
42
42
  let { executeScriptElements, loadForm, subscribeToFormSubmitEvent } = content_1.form;
43
43
  /**
@@ -56,11 +56,11 @@ exports.mockFormModule = mockFormModule;
56
56
  * @public
57
57
  */
58
58
  const Form = ({ params, rendering }) => {
59
- var _a;
59
+ var _a, _b, _c, _d, _e;
60
60
  const id = params === null || params === void 0 ? void 0 : params.RenderingIdentifier;
61
61
  const [error, setError] = (0, react_1.useState)(false);
62
62
  const [content, setContent] = (0, react_1.useState)('');
63
- const context = (0, withSitecore_1.useSitecore)();
63
+ const context = (0, SitecoreProvider_1.useSitecore)();
64
64
  const formRef = (0, react_1.useRef)(null);
65
65
  const isEditing = context.page.mode.isEditing;
66
66
  (0, react_1.useEffect)(() => {
@@ -91,10 +91,17 @@ const Form = ({ params, rendering }) => {
91
91
  }
92
92
  executeScriptElements(formRef.current);
93
93
  }
94
- }, [content]);
94
+ }, [
95
+ content,
96
+ isEditing,
97
+ params.FormId,
98
+ rendering.uid,
99
+ (_b = (_a = context.api) === null || _a === void 0 ? void 0 : _a.edge) === null || _b === void 0 ? void 0 : _b.clientContextId,
100
+ (_d = (_c = context.api) === null || _c === void 0 ? void 0 : _c.edge) === null || _d === void 0 ? void 0 : _d.edgeUrl,
101
+ ]);
95
102
  if (isEditing && error) {
96
103
  return react_1.default.createElement(ErrorBoundary_1.ErrorComponent, { message: "There was a problem loading this section" });
97
104
  }
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 }));
105
+ 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
106
  };
100
107
  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,73 @@ 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
+ const disableSuspense = placeholderProps.disableSuspense || false;
53
+ rendered = (react_1.default.createElement(ErrorBoundary_1.default, { "data-testid": "error-boundary", key: errorBoundaryKey, errorComponent: errorComponent, componentLoadingMessage: componentLoadingMessage, isDynamic: dynamic, disableSuspense: disableSuspense, rendering: rendered.props.rendering }, rendered));
44
54
  }
45
55
  // 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;
56
+ return isEditing ? (react_1.default.createElement(PlaceholderMetadata_1.PlaceholderMetadata, { key: key, rendering: componentRendering, componentRuntime: componentRuntime }, rendered)) : (rendered);
51
57
  })
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;
58
+ .filter((element) => element); // remove nulls
59
+ if (!isEditing) {
60
+ return transformedComponents;
77
61
  }
62
+ return [
63
+ react_1.default.createElement(PlaceholderMetadata_1.PlaceholderMetadata, { key: rendering.uid, placeholderName: name, rendering: rendering }, transformedComponents),
64
+ ];
78
65
  };
66
+ /**
67
+ * The implemention of placeholder compatible with React Server Components.
68
+ * Renders components from the layout data for the given placeholder name, with consideration for page edit mode.
69
+ * Pulls components from the provided component map.
70
+ * @param {AppPlaceholderProps} props Placeholder props
71
+ * @returns {React.ReactNode | React.ReactElement[]} rendered component(s)
72
+ * @public
73
+ */
74
+ const AppPlaceholder = (props) => (
75
+ // Using error boundary for errors that may happen within Placeholder itself
76
+ react_1.default.createElement(ErrorBoundary_1.default, { errorComponent: props.errorComponent },
77
+ react_1.default.createElement(AppPlaceholderComponent, Object.assign({}, props))));
79
78
  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;