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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -33,103 +33,31 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  return result;
34
34
  };
35
35
  })();
36
- var __importDefault = (this && this.__importDefault) || function (mod) {
37
- return (mod && mod.__esModule) ? mod : { "default": mod };
38
- };
39
36
  Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.Placeholder = exports.PlaceholderComponent = void 0;
41
- const react_1 = __importDefault(require("react"));
42
- const withComponentMap_1 = require("../../enhancers/withComponentMap");
37
+ exports.Placeholder = void 0;
38
+ const react_1 = __importStar(require("react"));
43
39
  const editing_1 = require("@sitecore-content-sdk/content/editing");
44
- const withSitecore_1 = require("../../enhancers/withSitecore");
45
40
  const placeholder_utils_1 = require("./placeholder-utils");
46
- const PlaceholderMetadata_1 = require("./PlaceholderMetadata");
47
- const ErrorBoundary_1 = __importStar(require("../ErrorBoundary"));
48
- class PlaceholderComponent extends react_1.default.Component {
49
- constructor(props) {
50
- super(props);
51
- this.isEmpty = false;
52
- this.state = {};
53
- }
54
- componentDidMount() {
55
- if (this.isEmpty && editing_1.PagesEditor.isActive()) {
56
- editing_1.PagesEditor.resetChromes();
57
- }
58
- }
59
- componentDidCatch(error) {
60
- this.setState({ error });
61
- }
62
- render() {
63
- const childProps = Object.assign({}, this.props);
64
- delete childProps.componentMap;
65
- if (this.state.error) {
66
- if (childProps.errorComponent) {
67
- return react_1.default.createElement(childProps.errorComponent, { error: this.state.error });
68
- }
69
- return (react_1.default.createElement(ErrorBoundary_1.ErrorComponent, { message: `A rendering error occurred: ${this.state.error.message}.` }));
70
- }
71
- const renderingData = childProps.rendering;
72
- const placeholderRenderings = (0, placeholder_utils_1.getPlaceholderRenderings)(renderingData, this.props.name, this.props.page.mode.isEditing);
73
- this.isEmpty = !placeholderRenderings.length;
74
- const components = PlaceholderComponent.getRenderedComponents(this.props, placeholderRenderings);
75
- if (this.isEmpty) {
76
- const rendered = this.props.renderEmpty ? this.props.renderEmpty(components) : components;
77
- return this.props.page.mode.isEditing ? (0, placeholder_utils_1.renderEmptyPlaceholder)(rendered) : rendered;
78
- }
79
- else if (this.props.render) {
80
- return this.props.render(components, placeholderRenderings, childProps);
81
- }
82
- else if (this.props.renderEach) {
83
- const renderEach = this.props.renderEach;
84
- return components.map((component, index) => {
85
- if (component && component.props && component.props.type === 'text/sitecore') {
86
- return component;
87
- }
88
- return renderEach(component, index);
89
- });
90
- }
91
- else {
92
- return components;
93
- }
94
- }
95
- }
96
- exports.PlaceholderComponent = PlaceholderComponent;
97
- /**
98
- * Renders the components for the placeholder based on the provided rendering data.
99
- * @param {PlaceholderProps} props placeholder component props
100
- * @param {ComponentRendering[]} placeholderRenderings renderings within placeholder
101
- * @returns {React.ReactNode | React.ReactElement[]} rendered components
102
- */
103
- PlaceholderComponent.getRenderedComponents = (props, placeholderRenderings) => {
104
- const { name, missingComponentComponent, hiddenRenderingComponent } = props;
105
- const transformedComponents = placeholderRenderings
106
- .map((componentRendering, index) => {
107
- const key = componentRendering.uid || `component-${index}`;
108
- const renderedProps = (0, placeholder_utils_1.getRenderedComponentProps)(props, componentRendering, key);
109
- const component = (0, placeholder_utils_1.getComponentForRendering)(componentRendering, name, props.componentMap, hiddenRenderingComponent, missingComponentComponent);
110
- let rendered = react_1.default.createElement(component.component, props.modifyComponentProps ? props.modifyComponentProps(renderedProps) : renderedProps);
111
- if (!component.isEmpty) {
112
- const errorBoundaryKey = rendered.type + '-' + index;
113
- const disableSuspense = props.disableSuspense || false;
114
- rendered = (react_1.default.createElement(ErrorBoundary_1.default, { "data-testid": "error-boundary", key: errorBoundaryKey, errorComponent: props.errorComponent, componentLoadingMessage: props.componentLoadingMessage, isDynamic: component.dynamic, disableSuspense: disableSuspense, rendering: rendered.props.rendering }, rendered));
115
- }
116
- // if in edit mode then emit shallow chromes for hydration in Pages
117
- if (props.page.mode.isEditing) {
118
- return (react_1.default.createElement(PlaceholderMetadata_1.PlaceholderMetadata, { key: key, rendering: componentRendering }, rendered));
119
- }
120
- return rendered;
121
- })
122
- .filter((element) => element); // remove nulls
123
- if (props.page.mode.isEditing) {
124
- return [
125
- react_1.default.createElement(PlaceholderMetadata_1.PlaceholderMetadata, { key: props.rendering.uid, placeholderName: name, rendering: props.rendering }, transformedComponents),
126
- ];
127
- }
128
- return transformedComponents;
129
- };
130
- const PlaceholderWithComponentMap = (0, withComponentMap_1.withComponentMap)(PlaceholderComponent);
41
+ const SitecoreProvider_1 = require("../SitecoreProvider");
42
+ const AppPlaceholder_1 = require("./AppPlaceholder");
131
43
  /**
132
44
  * The Placeholder component.
45
+ * Renders the components assigned to a placeholder in Sitecore. It also supports custom rendering and empty state.
46
+ * @param {PlaceholderProps} props - The props for the Placeholder component.
47
+ * @returns The rendered Placeholder component.
133
48
  * @public
134
49
  */
135
- exports.Placeholder = (0, withSitecore_1.withSitecore)()(PlaceholderWithComponentMap);
50
+ const Placeholder = (props) => {
51
+ const { page, componentMap } = (0, SitecoreProvider_1.useSitecore)();
52
+ const placeholderRenderings = (0, placeholder_utils_1.getPlaceholderRenderings)(props.rendering, props.name, page.mode.isEditing);
53
+ const isEmpty = !placeholderRenderings.length;
54
+ (0, react_1.useEffect)(() => {
55
+ if (isEmpty && editing_1.PagesEditor.isActive()) {
56
+ editing_1.PagesEditor.resetChromes();
57
+ }
58
+ // eslint-disable-next-line react-hooks/exhaustive-deps
59
+ }, []); // Empty array so it runs only once on mount
60
+ const appProps = Object.assign(Object.assign({}, props), { page, componentMap });
61
+ return react_1.default.createElement(AppPlaceholder_1.AppPlaceholder, Object.assign({}, appProps));
62
+ };
63
+ exports.Placeholder = Placeholder;
@@ -14,10 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.AppPlaceholder = exports.PlaceholderMetadata = exports.PlaceholderComponent = exports.Placeholder = void 0;
17
+ exports.AppPlaceholder = exports.PlaceholderMetadata = exports.Placeholder = void 0;
18
18
  var Placeholder_1 = require("./Placeholder");
19
19
  Object.defineProperty(exports, "Placeholder", { enumerable: true, get: function () { return Placeholder_1.Placeholder; } });
20
- Object.defineProperty(exports, "PlaceholderComponent", { enumerable: true, get: function () { return Placeholder_1.PlaceholderComponent; } });
21
20
  var PlaceholderMetadata_1 = require("./PlaceholderMetadata");
22
21
  Object.defineProperty(exports, "PlaceholderMetadata", { enumerable: true, get: function () { return PlaceholderMetadata_1.PlaceholderMetadata; } });
23
22
  var AppPlaceholder_1 = require("./AppPlaceholder");
@@ -1,21 +1,10 @@
1
1
  "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
4
  };
16
5
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.getComponentForRendering = exports.getRenderedComponentProps = exports.renderEmptyPlaceholder = exports.getSXAParams = exports.getPlaceholderRenderings = void 0;
18
- exports.getAppComponentProps = getAppComponentProps;
6
+ exports.getComponentForRendering = exports.renderEmptyPlaceholder = exports.getSXAParams = exports.getPlaceholderRenderings = void 0;
7
+ exports.getChildComponentProps = getChildComponentProps;
19
8
  const react_1 = __importDefault(require("react"));
20
9
  const MissingComponent_1 = require("../MissingComponent");
21
10
  const sharedTypes_1 = require("../sharedTypes");
@@ -24,7 +13,7 @@ const content_1 = require("@sitecore-content-sdk/content");
24
13
  const HiddenRendering_1 = require("../HiddenRendering");
25
14
  const FEaaS_1 = require("../FEaaS");
26
15
  /**
27
- * Get the renderings for the specified placeholder from the rendering data.
16
+ * Get the renderings for the specified placeholder from the rendering layout data.
28
17
  * @param {ComponentRendering | RouteData } rendering rendering data
29
18
  * @param {string} name placeholder name
30
19
  * @param {boolean} isEditing whether components should be rendered in editing mode
@@ -92,29 +81,12 @@ const renderEmptyPlaceholder = (node) => {
92
81
  };
93
82
  exports.renderEmptyPlaceholder = renderEmptyPlaceholder;
94
83
  /**
95
- * Get component props to be passed to the rendered component.
96
- * @param {PlaceholderProps} placeholderProps current placeholder props
97
- * @param {ComponentRendering} componentRendering rendering to be rendered
98
- * @param {string} renderingKey unique key to pass over to rendering props
99
- * @returns {RenderedProps} props to be passed to the rendered component
100
- */
101
- const getRenderedComponentProps = (placeholderProps, componentRendering, renderingKey) => {
102
- // eslint-disable-next-line no-unused-vars
103
- const { fields, params: placeholderParams } = placeholderProps, passThroughProps = __rest(placeholderProps, ["fields", "params"]);
104
- delete passThroughProps.missingComponentComponent;
105
- delete passThroughProps.hiddenRenderingComponent;
106
- delete passThroughProps.name;
107
- const mergedContentProps = getAppComponentProps(placeholderProps, componentRendering);
108
- return Object.assign(Object.assign(Object.assign({ key: renderingKey }, passThroughProps), mergedContentProps), { rendering: componentRendering });
109
- };
110
- exports.getRenderedComponentProps = getRenderedComponentProps;
111
- /**
112
- * Merge placeholder and component field and params content props.
113
- * @param {BasePlaceholderProps} placeholderProps placeholder props
84
+ * Merge specific placeholder props with component field and params content props.
85
+ * @param {PlaceholderProps} placeholderProps placeholder props
114
86
  * @param {ComponentRendering} componentRendering component rendering
115
87
  * @returns {ComponentProps} merged props
116
88
  */
117
- function getAppComponentProps(placeholderProps, componentRendering) {
89
+ function getChildComponentProps(placeholderProps, componentRendering) {
118
90
  const fields = Object.assign(Object.assign({}, (placeholderProps.fields || {})), (componentRendering.fields || {}));
119
91
  const params = Object.assign(Object.assign({}, (placeholderProps.params || {})), (componentRendering.params || {}));
120
92
  return {
@@ -182,7 +154,7 @@ const getComponentForRendering = (renderingDefinition, placeholderName, componen
182
154
  };
183
155
  }
184
156
  else if (renderingDefinition.componentName === FEaaS_1.BYOC_WRAPPER_RENDERING_NAME) {
185
- // wrapping with error boundary could cause problems in case where parent component uses withPlaceholder HOC and tries to access its children props
157
+ // wrapping with error boundary could cause problems in case where parent component uses withPlaceholder HOCs and tries to access its children props
186
158
  // that's why we need to mark BYOC wrapper dynamic
187
159
  return {
188
160
  component: FEaaS_1.BYOCWrapper,
@@ -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,32 +11,34 @@ 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.RichText = 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 RichText component.
56
- * @param {RichTextProps} props component props
57
- * @public
58
- */
59
- exports.RichText = (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
63
- // eslint-disable-next-line no-unused-vars
64
- { field, tag = 'div', editable = true } = _a, otherProps = __rest(_a,
65
- // eslint-disable-next-line no-unused-vars
66
- ["field", "tag", "editable"]);
24
+ const RichTextComponent = (_a) => {
25
+ var { field, tag = 'div', ref } = _a, otherProps = __rest(_a, ["field", "tag", "ref"]);
67
26
  if ((0, layout_1.isFieldValueEmpty)(field)) {
68
27
  return null;
69
28
  }
29
+ delete otherProps.editable; // prevent editable from being passed to the DOM
70
30
  const htmlProps = Object.assign({ dangerouslySetInnerHTML: {
71
31
  __html: field.value,
72
32
  }, ref, suppressHydrationWarning: field.metadata ? true : undefined }, otherProps);
73
- return react_1.default.createElement(tag || 'div', htmlProps);
74
- }), { defaultEmptyFieldEditingComponent: DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentText, isForwardRef: true }), true);
33
+ const Tag = (tag || 'div');
34
+ return react_1.default.createElement(Tag, Object.assign({}, htmlProps));
35
+ };
36
+ /**
37
+ * The RichText component.
38
+ * @param {RichTextProps} props component props
39
+ * @public
40
+ */
41
+ exports.RichText = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEditingComponent_1.withEmptyFieldEditingComponent)(RichTextComponent, {
42
+ defaultEmptyFieldEditingComponent: DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentText,
43
+ }));
75
44
  exports.RichText.displayName = 'RichText';
@@ -1,11 +1,45 @@
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
+ })();
3
36
  var __importDefault = (this && this.__importDefault) || function (mod) {
4
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
38
  };
6
39
  Object.defineProperty(exports, "__esModule", { value: true });
7
40
  exports.SitecoreProvider = exports.ImportMapReactContext = exports.ComponentMapReactContext = exports.SitecoreProviderReactContext = void 0;
8
- const react_1 = __importDefault(require("react"));
41
+ exports.useSitecore = useSitecore;
42
+ const react_1 = __importStar(require("react"));
9
43
  const react_2 = __importDefault(require("fast-deep-equal/es6/react"));
10
44
  /**
11
45
  * The context for the SitecoreProvider component.
@@ -16,39 +50,53 @@ exports.ComponentMapReactContext = react_1.default.createContext(new Map());
16
50
  exports.ImportMapReactContext = react_1.default.createContext(undefined);
17
51
  /**
18
52
  * The SitecoreProvider component.
53
+ * @param {SitecoreProviderProps} props - The props for the SitecoreProvider component.
54
+ * @param {SitecoreProviderProps['api']} props.api - The API configuration.
55
+ * @param {SitecoreProviderProps['page']} props.page - The page data.
56
+ * @param {SitecoreProviderProps['componentMap']} props.componentMap - The component map.
57
+ * @param {SitecoreProviderProps['loadImportMap']} props.loadImportMap - The function to load the import map.
58
+ * @param {React.ReactNode} props.children - The children to render.
59
+ * @returns {React.ReactNode} The SitecoreProvider component.
19
60
  * @public
20
61
  */
21
- class SitecoreProvider extends react_1.default.Component {
22
- constructor(props) {
23
- super(props);
24
- /**
25
- * Update page state.
26
- * @param {Page} value New page value
27
- */
28
- this.setPage = (value) => {
29
- this.setState({
30
- page: value,
31
- });
32
- };
33
- this.state = {
34
- page: props.page,
35
- setPage: this.setPage,
36
- api: props.api,
37
- };
38
- }
39
- componentDidUpdate(prevProps) {
40
- // In case if somebody will manage SitecoreProvider state by passing fresh `page` prop
41
- // instead of using `updateContext`
42
- if (!(0, react_2.default)(prevProps.page, this.props.page)) {
43
- this.setPage(this.props.page);
44
- return;
62
+ const SitecoreProvider = (props) => {
63
+ const { api, page: propsPage, componentMap, loadImportMap, children } = props;
64
+ const [page, setPageInternal] = (0, react_1.useState)(propsPage);
65
+ // Memoize setPage callback
66
+ const setPage = (0, react_1.useCallback)((value) => {
67
+ setPageInternal(value);
68
+ }, []);
69
+ // Handle page prop changes using useEffect instead of componentDidUpdate
70
+ (0, react_1.useEffect)(() => {
71
+ if (!(0, react_2.default)(propsPage, page)) {
72
+ setPage(propsPage);
45
73
  }
46
- }
47
- render() {
48
- return (react_1.default.createElement(exports.ImportMapReactContext.Provider, { value: this.props.loadImportMap },
49
- react_1.default.createElement(exports.ComponentMapReactContext.Provider, { value: this.props.componentMap },
50
- react_1.default.createElement(exports.SitecoreProviderReactContext.Provider, { value: this.state }, this.props.children))));
51
- }
52
- }
74
+ }, [propsPage, page, setPage]);
75
+ // Memoize the context value to prevent unnecessary re-renders
76
+ const contextValue = (0, react_1.useMemo)(() => ({
77
+ page,
78
+ setPage,
79
+ api,
80
+ componentMap,
81
+ loadImportMap,
82
+ }), [page, setPage, api, componentMap, loadImportMap]);
83
+ return (react_1.default.createElement(exports.SitecoreProviderReactContext.Provider, { value: contextValue }, children));
84
+ };
53
85
  exports.SitecoreProvider = SitecoreProvider;
54
- SitecoreProvider.displayName = 'SitecoreProvider';
86
+ exports.SitecoreProvider.displayName = 'SitecoreProvider';
87
+ /**
88
+ * This hook grants acсess to the current Sitecore page and api.
89
+ * @param {UseSitecoreOptions} [options] hook options
90
+ * @example
91
+ * const EditMode = () => {
92
+ * const { page } = useSitecore();
93
+ * return <span>Edit Mode is {page.mode.isEditing ? 'active' : 'inactive'}</span>
94
+ * }
95
+ * @returns {SitecoreProviderState} The current Sitecore context, including the page and api.
96
+ * @public
97
+ */
98
+ function useSitecore(options) {
99
+ const scContext = (0, react_1.useContext)(exports.SitecoreProviderReactContext);
100
+ const updatable = options === null || options === void 0 ? void 0 : options.updatable;
101
+ return Object.assign(Object.assign({}, scContext), { setPage: updatable ? scContext.setPage : undefined });
102
+ }
@@ -21,11 +21,7 @@ const layout_1 = require("@sitecore-content-sdk/content/layout");
21
21
  const withFieldMetadata_1 = require("../enhancers/withFieldMetadata");
22
22
  const withEmptyFieldEditingComponent_1 = require("../enhancers/withEmptyFieldEditingComponent");
23
23
  const DefaultEmptyFieldEditingComponents_1 = require("./DefaultEmptyFieldEditingComponents");
24
- /**
25
- * The Text component.
26
- * @public
27
- */
28
- exports.Text = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEditingComponent_1.withEmptyFieldEditingComponent)((_a) => {
24
+ const TextComponent = (_a) => {
29
25
  var { field, tag, editable = true, encode = true } = _a, otherProps = __rest(_a, ["field", "tag", "editable", "encode"]);
30
26
  if ((0, layout_1.isFieldValueEmpty)(field)) {
31
27
  return null;
@@ -59,14 +55,22 @@ exports.Text = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEdit
59
55
  else {
60
56
  children = output;
61
57
  }
58
+ const Tag = (tag || 'span');
62
59
  if (field.metadata) {
63
- return react_1.default.createElement(tag || 'span', Object.assign(Object.assign({}, htmlProps), { suppressHydrationWarning: true }), children);
60
+ return (react_1.default.createElement(Tag, Object.assign({}, htmlProps, { suppressHydrationWarning: true }), children));
64
61
  }
65
62
  else if (tag || !encode) {
66
- return react_1.default.createElement(tag || 'span', htmlProps, children);
63
+ return react_1.default.createElement(Tag, Object.assign({}, htmlProps), children);
67
64
  }
68
65
  else {
69
66
  return react_1.default.createElement(react_1.default.Fragment, null, children);
70
67
  }
71
- }, { defaultEmptyFieldEditingComponent: DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentText }));
68
+ };
69
+ /**
70
+ * The Text component.
71
+ * @public
72
+ */
73
+ exports.Text = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEditingComponent_1.withEmptyFieldEditingComponent)(TextComponent, {
74
+ defaultEmptyFieldEditingComponent: DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentText,
75
+ }));
72
76
  exports.Text.displayName = 'Text';
@@ -6,6 +6,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.withAppPlaceholder = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const AppPlaceholder_1 = require("../components/Placeholder/AppPlaceholder");
9
+ /**
10
+ * Provides a slot-like functionality by wrapping a component and rendering placeholders defined in the layout data.
11
+ * @param {ComponentType<T>} Component - The component to be wrapped around placeholders.
12
+ * @returns {React.ReactNode} A new component that renders the original component with placeholders.
13
+ * @public
14
+ */
9
15
  const withAppPlaceholder = (Component) => {
10
16
  return (props) => {
11
17
  const placeholders = props.rendering.placeholders || {};
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
5
  };
@@ -6,7 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
7
  exports.DefaultEditingError = void 0;
7
8
  exports.withDatasourceCheck = withDatasourceCheck;
8
9
  const react_1 = __importDefault(require("react"));
9
- const withSitecore_1 = require("./withSitecore");
10
+ const SitecoreProvider_1 = require("./../components/SitecoreProvider");
10
11
  const DefaultEditingError = () => (react_1.default.createElement("div", { className: "sc-jss-editing-error", role: "alert" }, "Datasource is required. Please choose a content item for this component."));
11
12
  exports.DefaultEditingError = DefaultEditingError;
12
13
  /**
@@ -19,9 +20,9 @@ exports.DefaultEditingError = DefaultEditingError;
19
20
  */
20
21
  function withDatasourceCheck(options) {
21
22
  return function withDatasourceCheckHoc(Component) {
22
- return function WithDatasourceCheck(props) {
23
+ return (props) => {
23
24
  var _a, _b;
24
- const { page } = (0, withSitecore_1.useSitecore)();
25
+ const { page } = (0, SitecoreProvider_1.useSitecore)();
25
26
  const EditingError = (_a = options === null || options === void 0 ? void 0 : options.editingErrorComponent) !== null && _a !== void 0 ? _a : exports.DefaultEditingError;
26
27
  // If the component is rendered in DesignLibrary, we don't need to check for datasource
27
28
  const isDesignLibrary = page.mode.isDesignLibrary;
@@ -1,10 +1,41 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
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
+ })();
5
36
  Object.defineProperty(exports, "__esModule", { value: true });
6
37
  exports.withEditorChromes = void 0;
7
- const react_1 = __importDefault(require("react"));
38
+ const react_1 = __importStar(require("react"));
8
39
  const __1 = require("..");
9
40
  /**
10
41
  * HOC to inject editor chromes reset on component update.
@@ -12,18 +43,22 @@ const __1 = require("..");
12
43
  * @public
13
44
  */
14
45
  const withEditorChromes = (WrappedComponent) => {
15
- class Enhancer extends react_1.default.Component {
16
- constructor() {
17
- super(...arguments);
18
- this.displayName = WrappedComponent.displayName || WrappedComponent.name || 'Component';
19
- }
20
- componentDidUpdate() {
46
+ const Enhancer = (props) => {
47
+ const isFirstRender = (0, react_1.useRef)(true);
48
+ (0, react_1.useEffect)(() => {
49
+ if (isFirstRender.current) {
50
+ isFirstRender.current = false;
51
+ return;
52
+ }
53
+ // only reset chromes on subsequent re-renders
21
54
  (0, __1.resetEditorChromes)();
22
- }
23
- render() {
24
- return react_1.default.createElement(WrappedComponent, Object.assign({}, this.props));
25
- }
26
- }
55
+ });
56
+ return react_1.default.createElement(WrappedComponent, Object.assign({}, props));
57
+ };
58
+ Enhancer.displayName =
59
+ WrappedComponent.displayName ||
60
+ WrappedComponent.name ||
61
+ 'Component';
27
62
  return Enhancer;
28
63
  };
29
64
  exports.withEditorChromes = withEditorChromes;