@sitecore-jss/sitecore-jss-react 23.0.0-canary.8 → 23.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +202 -202
- package/README.md +10 -10
- package/dist/cjs/components/Date.js +3 -5
- package/dist/cjs/components/ErrorBoundary.js +18 -2
- package/dist/cjs/components/Image.js +5 -10
- package/dist/cjs/components/Link.js +5 -8
- package/dist/cjs/components/Placeholder.js +3 -10
- package/dist/cjs/components/PlaceholderCommon.js +8 -44
- package/dist/cjs/components/RichText.js +10 -11
- package/dist/cjs/components/SitecoreContext.js +0 -8
- package/dist/cjs/components/Text.js +3 -6
- package/dist/cjs/enhancers/withDatasourceCheck.js +1 -4
- package/dist/cjs/enhancers/withPlaceholder.js +2 -2
- package/dist/cjs/enhancers/withSitecoreContext.js +1 -2
- package/dist/cjs/index.js +1 -28
- package/dist/cjs/utils.js +1 -16
- package/dist/esm/components/Date.js +2 -5
- package/dist/esm/components/ErrorBoundary.js +18 -2
- package/dist/esm/components/Image.js +4 -10
- package/dist/esm/components/Link.js +5 -8
- package/dist/esm/components/Placeholder.js +3 -10
- package/dist/esm/components/PlaceholderCommon.js +9 -45
- package/dist/esm/components/RichText.js +11 -12
- package/dist/esm/components/SitecoreContext.js +0 -8
- package/dist/esm/components/Text.js +2 -6
- package/dist/esm/enhancers/withDatasourceCheck.js +1 -4
- package/dist/esm/enhancers/withPlaceholder.js +2 -2
- package/dist/esm/enhancers/withSitecoreContext.js +2 -3
- package/dist/esm/index.js +1 -11
- package/dist/esm/utils.js +0 -14
- package/package.json +3 -6
- package/types/ComponentBuilder.d.ts +0 -1
- package/types/components/Date.d.ts +2 -4
- package/types/components/EditFrame.d.ts +0 -1
- package/types/components/ErrorBoundary.d.ts +0 -1
- package/types/components/File.d.ts +0 -1
- package/types/components/HiddenRendering.d.ts +0 -1
- package/types/components/Image.d.ts +2 -4
- package/types/components/Link.d.ts +3 -5
- package/types/components/MissingComponent.d.ts +0 -1
- package/types/components/Placeholder.d.ts +0 -1
- package/types/components/PlaceholderCommon.d.ts +5 -4
- package/types/components/RichText.d.ts +3 -5
- package/types/components/SitecoreContext.d.ts +0 -21
- package/types/components/Text.d.ts +2 -4
- package/types/components/VisitorIdentification.d.ts +0 -1
- package/types/components/sharedTypes.d.ts +1 -8
- package/types/enhancers/withComponentFactory.d.ts +0 -1
- package/types/enhancers/withDatasourceCheck.d.ts +0 -1
- package/types/enhancers/withEditorChromes.d.ts +0 -1
- package/types/enhancers/withPlaceholder.d.ts +0 -1
- package/types/enhancers/withSitecoreContext.d.ts +1 -3
- package/types/index.d.ts +1 -11
- package/types/utils.d.ts +0 -9
- package/dist/cjs/components/BYOCComponent.js +0 -122
- package/dist/cjs/components/BYOCWrapper.js +0 -18
- package/dist/cjs/components/DefaultEmptyFieldEditingComponents.js +0 -22
- package/dist/cjs/components/DesignLibrary.js +0 -72
- package/dist/cjs/components/EditingScripts.js +0 -47
- package/dist/cjs/components/FEaaSComponent.js +0 -151
- package/dist/cjs/components/FEaaSWrapper.js +0 -18
- package/dist/cjs/components/FieldMetadata.js +0 -29
- package/dist/cjs/components/Form.js +0 -80
- package/dist/cjs/components/PlaceholderMetadata.js +0 -63
- package/dist/cjs/enhancers/withEmptyFieldEditingComponent.js +0 -63
- package/dist/cjs/enhancers/withFieldMetadata.js +0 -60
- package/dist/esm/components/BYOCComponent.js +0 -91
- package/dist/esm/components/BYOCWrapper.js +0 -11
- package/dist/esm/components/DefaultEmptyFieldEditingComponents.js +0 -14
- package/dist/esm/components/DesignLibrary.js +0 -45
- package/dist/esm/components/EditingScripts.js +0 -40
- package/dist/esm/components/FEaaSComponent.js +0 -119
- package/dist/esm/components/FEaaSWrapper.js +0 -11
- package/dist/esm/components/FieldMetadata.js +0 -22
- package/dist/esm/components/Form.js +0 -52
- package/dist/esm/components/PlaceholderMetadata.js +0 -56
- package/dist/esm/enhancers/withEmptyFieldEditingComponent.js +0 -36
- package/dist/esm/enhancers/withFieldMetadata.js +0 -33
- package/types/components/BYOCComponent.d.ts +0 -91
- package/types/components/BYOCWrapper.d.ts +0 -4
- package/types/components/DefaultEmptyFieldEditingComponents.d.ts +0 -10
- package/types/components/DesignLibrary.d.ts +0 -3
- package/types/components/EditingScripts.d.ts +0 -8
- package/types/components/FEaaSComponent.d.ts +0 -72
- package/types/components/FEaaSWrapper.d.ts +0 -4
- package/types/components/FieldMetadata.d.ts +0 -18
- package/types/components/Form.d.ts +0 -30
- package/types/components/PlaceholderMetadata.d.ts +0 -29
- package/types/enhancers/withEmptyFieldEditingComponent.d.ts +0 -28
- package/types/enhancers/withFieldMetadata.d.ts +0 -17
|
@@ -10,11 +10,6 @@ const layout_1 = require("@sitecore-jss/sitecore-jss/layout");
|
|
|
10
10
|
const sitecore_jss_1 = require("@sitecore-jss/sitecore-jss");
|
|
11
11
|
const utils_1 = require("../utils");
|
|
12
12
|
const HiddenRendering_1 = require("./HiddenRendering");
|
|
13
|
-
const FEaaSComponent_1 = require("./FEaaSComponent");
|
|
14
|
-
const FEaaSWrapper_1 = require("./FEaaSWrapper");
|
|
15
|
-
const BYOCComponent_1 = require("./BYOCComponent");
|
|
16
|
-
const BYOCWrapper_1 = require("./BYOCWrapper");
|
|
17
|
-
const PlaceholderMetadata_1 = require("./PlaceholderMetadata");
|
|
18
13
|
const ErrorBoundary_1 = __importDefault(require("./ErrorBoundary"));
|
|
19
14
|
class PlaceholderCommon extends react_1.default.Component {
|
|
20
15
|
constructor(props) {
|
|
@@ -25,13 +20,12 @@ class PlaceholderCommon extends react_1.default.Component {
|
|
|
25
20
|
this.updateKeyAttributes = this.updateKeyAttributes.bind(this);
|
|
26
21
|
this.createRawElement = this.createRawElement.bind(this);
|
|
27
22
|
}
|
|
28
|
-
static getPlaceholderDataFromRenderingData(rendering, name
|
|
23
|
+
static getPlaceholderDataFromRenderingData(rendering, name) {
|
|
29
24
|
let result;
|
|
30
|
-
|
|
25
|
+
const phName = name.slice();
|
|
31
26
|
/**
|
|
32
27
|
* Process (SXA) dynamic placeholders
|
|
33
28
|
* Find and replace the matching dynamic placeholder e.g 'nameOfContainer-{*}' with the requested e.g. 'nameOfContainer-1'.
|
|
34
|
-
* For Metadata EditMode, we need to keep the raw placeholder name in place.
|
|
35
29
|
*/
|
|
36
30
|
if (rendering === null || rendering === void 0 ? void 0 : rendering.placeholders) {
|
|
37
31
|
Object.keys(rendering.placeholders).forEach((placeholder) => {
|
|
@@ -39,13 +33,8 @@ class PlaceholderCommon extends react_1.default.Component {
|
|
|
39
33
|
? (0, layout_1.getDynamicPlaceholderPattern)(placeholder)
|
|
40
34
|
: null;
|
|
41
35
|
if (patternPlaceholder && patternPlaceholder.test(phName)) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
rendering.placeholders[phName] = rendering.placeholders[placeholder];
|
|
47
|
-
delete rendering.placeholders[placeholder];
|
|
48
|
-
}
|
|
36
|
+
rendering.placeholders[phName] = rendering.placeholders[placeholder];
|
|
37
|
+
delete rendering.placeholders[placeholder];
|
|
49
38
|
}
|
|
50
39
|
});
|
|
51
40
|
}
|
|
@@ -78,11 +67,10 @@ class PlaceholderCommon extends react_1.default.Component {
|
|
|
78
67
|
});
|
|
79
68
|
}
|
|
80
69
|
getComponentsForRenderingData(placeholderData) {
|
|
81
|
-
var _a;
|
|
82
70
|
const { name, fields: placeholderFields, params: placeholderParams, missingComponentComponent, hiddenRenderingComponent, passThroughComponentProps, modifyComponentProps, } = this.props;
|
|
83
71
|
const transformedComponents = placeholderData
|
|
84
72
|
.map((rendering, index) => {
|
|
85
|
-
var _a
|
|
73
|
+
var _a;
|
|
86
74
|
const key = rendering.uid
|
|
87
75
|
? rendering.uid
|
|
88
76
|
: `component-${index}`;
|
|
@@ -106,21 +94,6 @@ class PlaceholderCommon extends react_1.default.Component {
|
|
|
106
94
|
else {
|
|
107
95
|
component = this.getComponentForRendering(componentRendering);
|
|
108
96
|
}
|
|
109
|
-
// Fallback/defaults for Sitecore Component renderings (in case not defined in component factory)
|
|
110
|
-
if (!component) {
|
|
111
|
-
if (componentRendering.componentName === FEaaSComponent_1.FEAAS_COMPONENT_RENDERING_NAME) {
|
|
112
|
-
component = FEaaSComponent_1.FEaaSComponent;
|
|
113
|
-
}
|
|
114
|
-
else if (componentRendering.componentName === FEaaSWrapper_1.FEAAS_WRAPPER_RENDERING_NAME) {
|
|
115
|
-
component = FEaaSWrapper_1.FEaaSWrapper;
|
|
116
|
-
}
|
|
117
|
-
else if (componentRendering.componentName === BYOCComponent_1.BYOC_COMPONENT_RENDERING_NAME) {
|
|
118
|
-
component = BYOCComponent_1.BYOCComponent;
|
|
119
|
-
}
|
|
120
|
-
else if (componentRendering.componentName === BYOCWrapper_1.BYOC_WRAPPER_RENDERING_NAME) {
|
|
121
|
-
component = BYOCWrapper_1.BYOCWrapper;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
97
|
if (!component) {
|
|
125
98
|
console.error(`Placeholder ${name} contains unknown component ${componentRendering.componentName}. Ensure that a React component exists for it, and that it is registered in your componentFactory.js.`);
|
|
126
99
|
component = missingComponentComponent !== null && missingComponentComponent !== void 0 ? missingComponentComponent : MissingComponent_1.MissingComponent;
|
|
@@ -139,26 +112,15 @@ class PlaceholderCommon extends react_1.default.Component {
|
|
|
139
112
|
if (!isEmpty) {
|
|
140
113
|
// assign type based on passed element - type='text/sitecore' should be ignored when renderEach Placeholder prop function is being used
|
|
141
114
|
const type = rendered.props.type === 'text/sitecore' ? rendered.props.type : '';
|
|
142
|
-
// the registered BYOC components are imported using dynamic(), so we need to account for that when passing the isDynamic prop to ErrorBoundary
|
|
143
|
-
const isByocWrapper = componentRendering.componentName === BYOCWrapper_1.BYOC_WRAPPER_RENDERING_NAME;
|
|
144
115
|
// all dynamic elements will have a separate render prop
|
|
145
116
|
const isDynamicComponent = !!((_a = component.render) === null || _a === void 0 ? void 0 : _a.preload);
|
|
146
117
|
// wrapping with error boundary could cause problems in case where parent component uses withPlaceholder HOC and tries to access its children props
|
|
147
118
|
// that's why we need to expose element's props here
|
|
148
|
-
rendered = (react_1.default.createElement(ErrorBoundary_1.default, Object.assign({ key: rendered.type + '-' + index, errorComponent: this.props.errorComponent, componentLoadingMessage: this.props.componentLoadingMessage, type: type, isDynamic: isDynamicComponent
|
|
149
|
-
}
|
|
150
|
-
// if editMode is equal to 'metadata' then emit shallow chromes for hydration in Pages
|
|
151
|
-
if (((_b = this.props.sitecoreContext) === null || _b === void 0 ? void 0 : _b.editMode) === layout_1.EditMode.Metadata) {
|
|
152
|
-
return (react_1.default.createElement(PlaceholderMetadata_1.PlaceholderMetadata, { key: key, rendering: rendering }, rendered));
|
|
119
|
+
rendered = (react_1.default.createElement(ErrorBoundary_1.default, Object.assign({ key: rendered.type + '-' + index, errorComponent: this.props.errorComponent, componentLoadingMessage: this.props.componentLoadingMessage, type: type, isDynamic: isDynamicComponent, disableSuspense: this.props.disableSuspense }, rendered.props), rendered));
|
|
153
120
|
}
|
|
154
121
|
return rendered;
|
|
155
122
|
})
|
|
156
123
|
.filter((element) => element); // remove nulls
|
|
157
|
-
if (((_a = this.props.sitecoreContext) === null || _a === void 0 ? void 0 : _a.editMode) === layout_1.EditMode.Metadata) {
|
|
158
|
-
return [
|
|
159
|
-
react_1.default.createElement(PlaceholderMetadata_1.PlaceholderMetadata, { key: this.props.rendering.uid, placeholderName: name, rendering: this.props.rendering }, transformedComponents),
|
|
160
|
-
];
|
|
161
|
-
}
|
|
162
124
|
return transformedComponents;
|
|
163
125
|
}
|
|
164
126
|
getComponentForRendering(renderingDefinition) {
|
|
@@ -190,6 +152,8 @@ class PlaceholderCommon extends react_1.default.Component {
|
|
|
190
152
|
if (!Array.isArray(attributes) && attributes && attributes.chrometype === 'placeholder') {
|
|
191
153
|
props.phkey = elem.attributes.key; // props that get rendered as dom attribute names need to be lowercase, otherwise React complains.
|
|
192
154
|
props.ref = this.addRef; // only need ref for placeholder containers, trying to add it to other components (e.g. stateless components) may result in a warning.
|
|
155
|
+
// EE may mutate chrome
|
|
156
|
+
props.suppressHydrationWarning = true;
|
|
193
157
|
}
|
|
194
158
|
return react_1.default.createElement(elem.name, props);
|
|
195
159
|
}
|
|
@@ -36,20 +36,19 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
36
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
37
|
exports.RichText = void 0;
|
|
38
38
|
const react_1 = __importStar(require("react"));
|
|
39
|
-
const withFieldMetadata_1 = require("../enhancers/withFieldMetadata");
|
|
40
|
-
const withEmptyFieldEditingComponent_1 = require("../enhancers/withEmptyFieldEditingComponent");
|
|
41
|
-
const DefaultEmptyFieldEditingComponents_1 = require("./DefaultEmptyFieldEditingComponents");
|
|
42
39
|
const layout_1 = require("@sitecore-jss/sitecore-jss/layout");
|
|
43
|
-
exports.RichText = (0,
|
|
44
|
-
// eslint-disable-next-line react/display-name
|
|
45
|
-
(0, react_1.forwardRef)((_a, ref) => {
|
|
40
|
+
exports.RichText = (0, react_1.forwardRef)((_a, ref) => {
|
|
46
41
|
var { field, tag = 'div', editable = true } = _a, otherProps = __rest(_a, ["field", "tag", "editable"]);
|
|
47
|
-
|
|
42
|
+
const html = field && (field.editable && editable ? field.editable : field.value);
|
|
43
|
+
// Keep the object reference stable across re-renders when the html is unchanged,
|
|
44
|
+
// since React DOM compares dangerouslySetInnerHTML by reference and re-sets
|
|
45
|
+
// innerHTML (recreating all child DOM nodes) whenever it changes.
|
|
46
|
+
const dangerouslySetInnerHTML = (0, react_1.useMemo)(() => (html !== undefined && html !== '' ? { __html: html } : undefined), [html]);
|
|
47
|
+
if (!field || (!field.editable && (0, layout_1.isFieldValueEmpty)(field)) || !dangerouslySetInnerHTML) {
|
|
48
48
|
return null;
|
|
49
49
|
}
|
|
50
|
-
const htmlProps = Object.assign({ dangerouslySetInnerHTML
|
|
51
|
-
|
|
52
|
-
}, ref }, otherProps);
|
|
50
|
+
const htmlProps = Object.assign(Object.assign({ dangerouslySetInnerHTML,
|
|
51
|
+
ref }, (field.editable && editable ? { suppressHydrationWarning: true } : {})), otherProps);
|
|
53
52
|
return react_1.default.createElement(tag || 'div', htmlProps);
|
|
54
|
-
})
|
|
53
|
+
});
|
|
55
54
|
exports.RichText.displayName = 'RichText';
|
|
@@ -4,15 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.SitecoreContext = exports.ComponentFactoryReactContext = exports.SitecoreContextReactContext = void 0;
|
|
7
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
8
7
|
const react_1 = __importDefault(require("react"));
|
|
9
8
|
const react_2 = __importDefault(require("fast-deep-equal/es6/react"));
|
|
10
|
-
const sitecore_jss_1 = require("@sitecore-jss/sitecore-jss");
|
|
11
9
|
exports.SitecoreContextReactContext = react_1.default.createContext({});
|
|
12
10
|
exports.ComponentFactoryReactContext = react_1.default.createContext({});
|
|
13
11
|
class SitecoreContext extends react_1.default.Component {
|
|
14
12
|
constructor(props) {
|
|
15
|
-
var _a, _b, _c, _d;
|
|
16
13
|
super(props);
|
|
17
14
|
/**
|
|
18
15
|
* Update context state. Value can be @type {LayoutServiceData} which will be automatically transformed
|
|
@@ -27,14 +24,9 @@ class SitecoreContext extends react_1.default.Component {
|
|
|
27
24
|
});
|
|
28
25
|
};
|
|
29
26
|
const context = this.constructContext(props.layoutData);
|
|
30
|
-
let api = props.api;
|
|
31
|
-
if (((_b = (_a = props.api) === null || _a === void 0 ? void 0 : _a.edge) === null || _b === void 0 ? void 0 : _b.contextId) && !((_d = (_c = props.api) === null || _c === void 0 ? void 0 : _c.edge) === null || _d === void 0 ? void 0 : _d.edgeUrl)) {
|
|
32
|
-
api = Object.assign(Object.assign({}, props.api), { edge: Object.assign(Object.assign({}, props.api.edge), { edgeUrl: sitecore_jss_1.constants.SITECORE_EDGE_URL_DEFAULT }) });
|
|
33
|
-
}
|
|
34
27
|
this.state = {
|
|
35
28
|
context,
|
|
36
29
|
setContext: this.setContext,
|
|
37
|
-
api,
|
|
38
30
|
};
|
|
39
31
|
}
|
|
40
32
|
constructContext(layoutData) {
|
|
@@ -16,18 +16,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.Text = void 0;
|
|
18
18
|
const react_1 = __importDefault(require("react"));
|
|
19
|
-
const withFieldMetadata_1 = require("../enhancers/withFieldMetadata");
|
|
20
|
-
const withEmptyFieldEditingComponent_1 = require("../enhancers/withEmptyFieldEditingComponent");
|
|
21
|
-
const DefaultEmptyFieldEditingComponents_1 = require("./DefaultEmptyFieldEditingComponents");
|
|
22
19
|
const layout_1 = require("@sitecore-jss/sitecore-jss/layout");
|
|
23
|
-
|
|
20
|
+
const Text = (_a) => {
|
|
24
21
|
var { field, tag, editable = true, encode = true } = _a, otherProps = __rest(_a, ["field", "tag", "editable", "encode"]);
|
|
25
22
|
if (!field || (!field.editable && (0, layout_1.isFieldValueEmpty)(field))) {
|
|
26
23
|
return null;
|
|
27
24
|
}
|
|
28
25
|
// can't use editable value if we want to output unencoded
|
|
29
26
|
if (!encode) {
|
|
30
|
-
// eslint-disable-next-line no-param-reassign
|
|
31
27
|
editable = false;
|
|
32
28
|
}
|
|
33
29
|
const isEditable = field.editable && editable;
|
|
@@ -68,5 +64,6 @@ exports.Text = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEdit
|
|
|
68
64
|
else {
|
|
69
65
|
return react_1.default.createElement(react_1.default.Fragment, null, children);
|
|
70
66
|
}
|
|
71
|
-
}
|
|
67
|
+
};
|
|
68
|
+
exports.Text = Text;
|
|
72
69
|
exports.Text.displayName = 'Text';
|
|
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.withDatasourceCheck = exports.DefaultEditingError = void 0;
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
|
8
|
-
const layout_1 = require("@sitecore-jss/sitecore-jss/layout");
|
|
9
8
|
const withSitecoreContext_1 = require("./withSitecoreContext");
|
|
10
9
|
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
10
|
exports.DefaultEditingError = DefaultEditingError;
|
|
@@ -22,9 +21,7 @@ function withDatasourceCheck(options) {
|
|
|
22
21
|
var _a, _b;
|
|
23
22
|
const { sitecoreContext } = (0, withSitecoreContext_1.useSitecoreContext)();
|
|
24
23
|
const EditingError = (_a = options === null || options === void 0 ? void 0 : options.editingErrorComponent) !== null && _a !== void 0 ? _a : exports.DefaultEditingError;
|
|
25
|
-
|
|
26
|
-
const isDesignLibrary = (sitecoreContext === null || sitecoreContext === void 0 ? void 0 : sitecoreContext.renderingType) === layout_1.RenderingType.Component;
|
|
27
|
-
return isDesignLibrary || ((_b = props.rendering) === null || _b === void 0 ? void 0 : _b.dataSource) ? (react_1.default.createElement(Component, Object.assign({}, props))) : sitecoreContext.pageEditing ? (react_1.default.createElement(EditingError, null)) : null;
|
|
24
|
+
return ((_b = props.rendering) === null || _b === void 0 ? void 0 : _b.dataSource) ? (react_1.default.createElement(Component, Object.assign({}, props))) : sitecoreContext.pageEditing ? (react_1.default.createElement(EditingError, null)) : null;
|
|
28
25
|
};
|
|
29
26
|
};
|
|
30
27
|
}
|
|
@@ -42,13 +42,13 @@ function withPlaceholder(placeholders, options) {
|
|
|
42
42
|
definitelyArrayPlacholders.forEach((placeholder) => {
|
|
43
43
|
let placeholderData;
|
|
44
44
|
if (typeof placeholder !== 'string' && placeholder.placeholder && placeholder.prop) {
|
|
45
|
-
placeholderData = PlaceholderCommon_1.PlaceholderCommon.getPlaceholderDataFromRenderingData(renderingData, placeholder.placeholder
|
|
45
|
+
placeholderData = PlaceholderCommon_1.PlaceholderCommon.getPlaceholderDataFromRenderingData(renderingData, placeholder.placeholder);
|
|
46
46
|
if (placeholderData) {
|
|
47
47
|
childProps[placeholder.prop] = this.getComponentsForRenderingData(placeholderData);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
else {
|
|
51
|
-
placeholderData = PlaceholderCommon_1.PlaceholderCommon.getPlaceholderDataFromRenderingData(renderingData, placeholder
|
|
51
|
+
placeholderData = PlaceholderCommon_1.PlaceholderCommon.getPlaceholderDataFromRenderingData(renderingData, placeholder);
|
|
52
52
|
if (placeholderData) {
|
|
53
53
|
childProps[placeholder] = this.getComponentsForRenderingData(placeholderData);
|
|
54
54
|
}
|
|
@@ -12,7 +12,7 @@ const SitecoreContext_1 = require("../components/SitecoreContext");
|
|
|
12
12
|
function withSitecoreContext(options) {
|
|
13
13
|
return function withSitecoreContextHoc(Component) {
|
|
14
14
|
return function WithSitecoreContext(props) {
|
|
15
|
-
return (react_1.default.createElement(SitecoreContext_1.SitecoreContextReactContext.Consumer, null, (context) => (react_1.default.createElement(Component, Object.assign({}, props, { sitecoreContext: context.context,
|
|
15
|
+
return (react_1.default.createElement(SitecoreContext_1.SitecoreContextReactContext.Consumer, null, (context) => (react_1.default.createElement(Component, Object.assign({}, props, { sitecoreContext: context.context, updateSitecoreContext: options && options.updatable && context.setContext })))));
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
18
|
}
|
|
@@ -42,7 +42,6 @@ function useSitecoreContext(options) {
|
|
|
42
42
|
const reactContext = react_1.default.useContext(SitecoreContext_1.SitecoreContextReactContext);
|
|
43
43
|
const updatable = options === null || options === void 0 ? void 0 : options.updatable;
|
|
44
44
|
return {
|
|
45
|
-
api: reactContext.api,
|
|
46
45
|
sitecoreContext: reactContext.context,
|
|
47
46
|
updateSitecoreContext: updatable ? reactContext.setContext : undefined,
|
|
48
47
|
};
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.DefaultEmptyFieldEditingComponentImage = exports.DefaultEmptyFieldEditingComponentText = exports.EditingScripts = exports.withEmptyFieldEditingComponent = void 0;
|
|
3
|
+
exports.ComponentBuilder = exports.EditFrame = exports.withDatasourceCheck = exports.withPlaceholder = exports.withEditorChromes = exports.useSitecoreContext = exports.withSitecoreContext = exports.SitecoreContextReactContext = exports.SitecoreContext = exports.VisitorIdentification = exports.File = exports.Link = exports.DateField = exports.Text = exports.RichText = exports.getEEMarkup = exports.Image = exports.Placeholder = exports.mediaApi = exports.GraphQLRequestClient = exports.DefaultRetryStrategy = exports.RestDictionaryService = exports.GraphQLDictionaryService = exports.trackingApi = exports.getFieldValue = exports.getChildPlaceholder = exports.RestLayoutService = exports.GraphQLLayoutService = exports.LayoutServicePageState = exports.DefaultEditFrameButtons = exports.DefaultEditFrameButton = exports.resetEditorChromes = exports.isEditorActive = exports.NativeDataFetcher = exports.MemoryCacheClient = exports.ClientError = exports.enableDebug = exports.constants = void 0;
|
|
5
4
|
var sitecore_jss_1 = require("@sitecore-jss/sitecore-jss");
|
|
6
5
|
Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return sitecore_jss_1.constants; } });
|
|
7
6
|
Object.defineProperty(exports, "enableDebug", { enumerable: true, get: function () { return sitecore_jss_1.enableDebug; } });
|
|
@@ -14,14 +13,11 @@ Object.defineProperty(exports, "resetEditorChromes", { enumerable: true, get: fu
|
|
|
14
13
|
Object.defineProperty(exports, "DefaultEditFrameButton", { enumerable: true, get: function () { return editing_1.DefaultEditFrameButton; } });
|
|
15
14
|
Object.defineProperty(exports, "DefaultEditFrameButtons", { enumerable: true, get: function () { return editing_1.DefaultEditFrameButtons; } });
|
|
16
15
|
var layout_1 = require("@sitecore-jss/sitecore-jss/layout");
|
|
17
|
-
Object.defineProperty(exports, "getContentStylesheetLink", { enumerable: true, get: function () { return layout_1.getContentStylesheetLink; } });
|
|
18
|
-
Object.defineProperty(exports, "getDesignLibraryStylesheetLinks", { enumerable: true, get: function () { return layout_1.getDesignLibraryStylesheetLinks; } });
|
|
19
16
|
Object.defineProperty(exports, "LayoutServicePageState", { enumerable: true, get: function () { return layout_1.LayoutServicePageState; } });
|
|
20
17
|
Object.defineProperty(exports, "GraphQLLayoutService", { enumerable: true, get: function () { return layout_1.GraphQLLayoutService; } });
|
|
21
18
|
Object.defineProperty(exports, "RestLayoutService", { enumerable: true, get: function () { return layout_1.RestLayoutService; } });
|
|
22
19
|
Object.defineProperty(exports, "getChildPlaceholder", { enumerable: true, get: function () { return layout_1.getChildPlaceholder; } });
|
|
23
20
|
Object.defineProperty(exports, "getFieldValue", { enumerable: true, get: function () { return layout_1.getFieldValue; } });
|
|
24
|
-
Object.defineProperty(exports, "EditMode", { enumerable: true, get: function () { return layout_1.EditMode; } });
|
|
25
21
|
var tracking_1 = require("@sitecore-jss/sitecore-jss/tracking");
|
|
26
22
|
Object.defineProperty(exports, "trackingApi", { enumerable: true, get: function () { return tracking_1.trackingApi; } });
|
|
27
23
|
var i18n_1 = require("@sitecore-jss/sitecore-jss/i18n");
|
|
@@ -34,8 +30,6 @@ var media_1 = require("@sitecore-jss/sitecore-jss/media");
|
|
|
34
30
|
Object.defineProperty(exports, "mediaApi", { enumerable: true, get: function () { return media_1.mediaApi; } });
|
|
35
31
|
var Placeholder_1 = require("./components/Placeholder");
|
|
36
32
|
Object.defineProperty(exports, "Placeholder", { enumerable: true, get: function () { return Placeholder_1.Placeholder; } });
|
|
37
|
-
var Form_1 = require("./components/Form");
|
|
38
|
-
Object.defineProperty(exports, "Form", { enumerable: true, get: function () { return Form_1.Form; } });
|
|
39
33
|
var Image_1 = require("./components/Image");
|
|
40
34
|
Object.defineProperty(exports, "Image", { enumerable: true, get: function () { return Image_1.Image; } });
|
|
41
35
|
Object.defineProperty(exports, "getEEMarkup", { enumerable: true, get: function () { return Image_1.getEEMarkup; } });
|
|
@@ -45,18 +39,6 @@ var Text_1 = require("./components/Text");
|
|
|
45
39
|
Object.defineProperty(exports, "Text", { enumerable: true, get: function () { return Text_1.Text; } });
|
|
46
40
|
var Date_1 = require("./components/Date");
|
|
47
41
|
Object.defineProperty(exports, "DateField", { enumerable: true, get: function () { return Date_1.DateField; } });
|
|
48
|
-
var FEaaSComponent_1 = require("./components/FEaaSComponent");
|
|
49
|
-
Object.defineProperty(exports, "FEaaSComponent", { enumerable: true, get: function () { return FEaaSComponent_1.FEaaSComponent; } });
|
|
50
|
-
Object.defineProperty(exports, "fetchFEaaSComponentServerProps", { enumerable: true, get: function () { return FEaaSComponent_1.fetchFEaaSComponentServerProps; } });
|
|
51
|
-
var FEaaSWrapper_1 = require("./components/FEaaSWrapper");
|
|
52
|
-
Object.defineProperty(exports, "FEaaSWrapper", { enumerable: true, get: function () { return FEaaSWrapper_1.FEaaSWrapper; } });
|
|
53
|
-
var DesignLibrary_1 = require("./components/DesignLibrary");
|
|
54
|
-
Object.defineProperty(exports, "DesignLibrary", { enumerable: true, get: function () { return DesignLibrary_1.DesignLibrary; } });
|
|
55
|
-
var BYOCComponent_1 = require("./components/BYOCComponent");
|
|
56
|
-
Object.defineProperty(exports, "BYOCComponent", { enumerable: true, get: function () { return BYOCComponent_1.BYOCComponent; } });
|
|
57
|
-
Object.defineProperty(exports, "fetchBYOCComponentServerProps", { enumerable: true, get: function () { return BYOCComponent_1.fetchBYOCComponentServerProps; } });
|
|
58
|
-
var BYOCWrapper_1 = require("./components/BYOCWrapper");
|
|
59
|
-
Object.defineProperty(exports, "BYOCWrapper", { enumerable: true, get: function () { return BYOCWrapper_1.BYOCWrapper; } });
|
|
60
42
|
var Link_1 = require("./components/Link");
|
|
61
43
|
Object.defineProperty(exports, "Link", { enumerable: true, get: function () { return Link_1.Link; } });
|
|
62
44
|
var File_1 = require("./components/File");
|
|
@@ -79,12 +61,3 @@ var EditFrame_1 = require("./components/EditFrame");
|
|
|
79
61
|
Object.defineProperty(exports, "EditFrame", { enumerable: true, get: function () { return EditFrame_1.EditFrame; } });
|
|
80
62
|
var ComponentBuilder_1 = require("./ComponentBuilder");
|
|
81
63
|
Object.defineProperty(exports, "ComponentBuilder", { enumerable: true, get: function () { return ComponentBuilder_1.ComponentBuilder; } });
|
|
82
|
-
var withFieldMetadata_1 = require("./enhancers/withFieldMetadata");
|
|
83
|
-
Object.defineProperty(exports, "withFieldMetadata", { enumerable: true, get: function () { return withFieldMetadata_1.withFieldMetadata; } });
|
|
84
|
-
var withEmptyFieldEditingComponent_1 = require("./enhancers/withEmptyFieldEditingComponent");
|
|
85
|
-
Object.defineProperty(exports, "withEmptyFieldEditingComponent", { enumerable: true, get: function () { return withEmptyFieldEditingComponent_1.withEmptyFieldEditingComponent; } });
|
|
86
|
-
var EditingScripts_1 = require("./components/EditingScripts");
|
|
87
|
-
Object.defineProperty(exports, "EditingScripts", { enumerable: true, get: function () { return EditingScripts_1.EditingScripts; } });
|
|
88
|
-
var DefaultEmptyFieldEditingComponents_1 = require("./components/DefaultEmptyFieldEditingComponents");
|
|
89
|
-
Object.defineProperty(exports, "DefaultEmptyFieldEditingComponentText", { enumerable: true, get: function () { return DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentText; } });
|
|
90
|
-
Object.defineProperty(exports, "DefaultEmptyFieldEditingComponentImage", { enumerable: true, get: function () { return DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentImage; } });
|
package/dist/cjs/utils.js
CHANGED
|
@@ -11,8 +11,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
11
11
|
return t;
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.
|
|
15
|
-
const layout_1 = require("@sitecore-jss/sitecore-jss/layout");
|
|
14
|
+
exports.getAttributesString = exports.addClassName = exports.convertAttributesToReactProps = exports.convertStyleAttribute = exports.convertKebabCasetoCamelCase = void 0;
|
|
16
15
|
const style_attr_1 = require("style-attr");
|
|
17
16
|
// https://stackoverflow.com/a/10426674/9324
|
|
18
17
|
const convertKebabCasetoCamelCase = (str) => str.replace(/^.|-./g, (letter, index) => index === 0 ? letter.toLowerCase() : letter.substr(1).toUpperCase());
|
|
@@ -102,17 +101,3 @@ const getAttributesString = (attributes) => {
|
|
|
102
101
|
return attributesEntries.join(' ');
|
|
103
102
|
};
|
|
104
103
|
exports.getAttributesString = getAttributesString;
|
|
105
|
-
/**
|
|
106
|
-
* Used in FEAAS and BYOC implementations to convert datasource item field values into component props
|
|
107
|
-
* @param {ComponentFields} fields field collection from Sitecore
|
|
108
|
-
* @returns JSON object that can be used as props
|
|
109
|
-
*/
|
|
110
|
-
const getDataFromFields = (fields) => {
|
|
111
|
-
let data = {};
|
|
112
|
-
data = Object.entries(fields).reduce((acc, [key]) => {
|
|
113
|
-
acc[key] = (0, layout_1.getFieldValue)(fields, key);
|
|
114
|
-
return acc;
|
|
115
|
-
}, data);
|
|
116
|
-
return data;
|
|
117
|
-
};
|
|
118
|
-
exports.getDataFromFields = getDataFromFields;
|
|
@@ -10,11 +10,8 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
12
|
import React from 'react';
|
|
13
|
-
import { withFieldMetadata } from '../enhancers/withFieldMetadata';
|
|
14
|
-
import { withEmptyFieldEditingComponent } from '../enhancers/withEmptyFieldEditingComponent';
|
|
15
|
-
import { DefaultEmptyFieldEditingComponentText } from './DefaultEmptyFieldEditingComponents';
|
|
16
13
|
import { isFieldValueEmpty } from '@sitecore-jss/sitecore-jss/layout';
|
|
17
|
-
export const DateField =
|
|
14
|
+
export const DateField = (_a) => {
|
|
18
15
|
var { field, tag, editable = true, render } = _a, otherProps = __rest(_a, ["field", "tag", "editable", "render"]);
|
|
19
16
|
if (!field || (!field.editable && isFieldValueEmpty(field))) {
|
|
20
17
|
return null;
|
|
@@ -38,5 +35,5 @@ export const DateField = withFieldMetadata(withEmptyFieldEditingComponent((_a) =
|
|
|
38
35
|
else {
|
|
39
36
|
return React.createElement(React.Fragment, null, children);
|
|
40
37
|
}
|
|
41
|
-
}
|
|
38
|
+
};
|
|
42
39
|
DateField.displayName = 'Date';
|
|
@@ -27,6 +27,11 @@ class ErrorBoundary extends React.Component {
|
|
|
27
27
|
((_a = this.props.sitecoreContext) === null || _a === void 0 ? void 0 : _a.pageState) === LayoutServicePageState.Edit ||
|
|
28
28
|
((_b = this.props.sitecoreContext) === null || _b === void 0 ? void 0 : _b.pageState) === LayoutServicePageState.Preview);
|
|
29
29
|
}
|
|
30
|
+
isPageEditing() {
|
|
31
|
+
var _a, _b;
|
|
32
|
+
return (!!((_a = this.props.sitecoreContext) === null || _a === void 0 ? void 0 : _a.pageEditing) ||
|
|
33
|
+
((_b = this.props.sitecoreContext) === null || _b === void 0 ? void 0 : _b.pageState) === LayoutServicePageState.Edit);
|
|
34
|
+
}
|
|
30
35
|
render() {
|
|
31
36
|
var _a, _b;
|
|
32
37
|
if (this.state.error) {
|
|
@@ -51,10 +56,21 @@ class ErrorBoundary extends React.Component {
|
|
|
51
56
|
}
|
|
52
57
|
}
|
|
53
58
|
// do not apply suspense when suspense is disabled or when on already dynamic components
|
|
59
|
+
let content;
|
|
54
60
|
if (((_b = this.props.disableSuspense) !== null && _b !== void 0 ? _b : true) || this.props.isDynamic) {
|
|
55
|
-
|
|
61
|
+
content = this.props.children;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
content = (React.createElement(Suspense, { fallback: React.createElement("h4", null, this.props.componentLoadingMessage || this.defaultLoadingMessage) }, this.props.children));
|
|
65
|
+
}
|
|
66
|
+
// Experience Editor tags the outermost DOM node of each rendering (sc-part-of,
|
|
67
|
+
// scEnabledChrome) after SSR. Own that node in the SDK during editing so hydration
|
|
68
|
+
// mismatches can be suppressed without requiring suppressHydrationWarning on every
|
|
69
|
+
// app component. `display: contents` keeps SXA/Bootstrap column layout intact.
|
|
70
|
+
if (this.isPageEditing()) {
|
|
71
|
+
return (React.createElement("div", { suppressHydrationWarning: true, style: { display: 'contents' } }, content));
|
|
56
72
|
}
|
|
57
|
-
return
|
|
73
|
+
return content;
|
|
58
74
|
}
|
|
59
75
|
}
|
|
60
76
|
export default withSitecoreContext()(ErrorBoundary);
|
|
@@ -13,14 +13,12 @@ import { mediaApi } from '@sitecore-jss/sitecore-jss/media';
|
|
|
13
13
|
import React from 'react';
|
|
14
14
|
import { addClassName, convertAttributesToReactProps } from '../utils';
|
|
15
15
|
import { getAttributesString } from '../utils';
|
|
16
|
-
import { withFieldMetadata } from '../enhancers/withFieldMetadata';
|
|
17
|
-
import { withEmptyFieldEditingComponent } from '../enhancers/withEmptyFieldEditingComponent';
|
|
18
|
-
import { DefaultEmptyFieldEditingComponentImage } from './DefaultEmptyFieldEditingComponents';
|
|
19
16
|
import { isFieldValueEmpty } from '@sitecore-jss/sitecore-jss/layout';
|
|
20
17
|
const getEditableWrapper = (editableMarkup, ...otherProps) => (
|
|
21
18
|
// create an inline wrapper and use dangerouslySetInnerHTML.
|
|
22
19
|
// if we try to parse the EE value, the parser will strip invalid or disallowed attributes from html elements - and EE uses several
|
|
23
|
-
|
|
20
|
+
// Experience Editor rewrites this chrome markup client-side after SSR.
|
|
21
|
+
React.createElement("span", Object.assign({ className: "sc-image-wrapper", suppressHydrationWarning: true }, otherProps, { dangerouslySetInnerHTML: { __html: editableMarkup } })));
|
|
24
22
|
const getImageAttrs = (_a, imageParams, mediaUrlPrefix) => {
|
|
25
23
|
var { src, srcSet } = _a, otherAttrs = __rest(_a, ["src", "srcSet"]);
|
|
26
24
|
if (!src) {
|
|
@@ -62,7 +60,7 @@ export const getEEMarkup = (imageField, imageParams, mediaUrlPrefix, otherProps)
|
|
|
62
60
|
const editableMarkup = imageField.editable.replace(foundImg.imgTag, imgHtml);
|
|
63
61
|
return getEditableWrapper(editableMarkup);
|
|
64
62
|
};
|
|
65
|
-
export const Image =
|
|
63
|
+
export const Image = (_a) => {
|
|
66
64
|
var { editable = true, imageParams, field, mediaUrlPrefix } = _a, otherProps = __rest(_a, ["editable", "imageParams", "field", "mediaUrlPrefix"]);
|
|
67
65
|
const dynamicMedia = field;
|
|
68
66
|
if (!field || (!dynamicMedia.editable && isFieldValueEmpty(dynamicMedia))) {
|
|
@@ -79,14 +77,10 @@ export const Image = withFieldMetadata(withEmptyFieldEditingComponent((_a) => {
|
|
|
79
77
|
if (!img) {
|
|
80
78
|
return null;
|
|
81
79
|
}
|
|
82
|
-
// prevent metadata from being passed to the img tag
|
|
83
|
-
if (img.metadata) {
|
|
84
|
-
delete img.metadata;
|
|
85
|
-
}
|
|
86
80
|
const attrs = getImageAttrs(Object.assign(Object.assign({}, img), otherProps), imageParams, mediaUrlPrefix);
|
|
87
81
|
if (attrs) {
|
|
88
82
|
return React.createElement("img", Object.assign({}, attrs));
|
|
89
83
|
}
|
|
90
84
|
return null; // we can't handle the truth
|
|
91
|
-
}
|
|
85
|
+
};
|
|
92
86
|
Image.displayName = 'Image';
|
|
@@ -10,13 +10,8 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
12
|
import React, { forwardRef } from 'react';
|
|
13
|
-
import { withFieldMetadata } from '../enhancers/withFieldMetadata';
|
|
14
|
-
import { withEmptyFieldEditingComponent } from '../enhancers/withEmptyFieldEditingComponent';
|
|
15
|
-
import { DefaultEmptyFieldEditingComponentText } from './DefaultEmptyFieldEditingComponents';
|
|
16
13
|
import { isFieldValueEmpty } from '@sitecore-jss/sitecore-jss/layout';
|
|
17
|
-
export const Link =
|
|
18
|
-
// eslint-disable-next-line react/display-name
|
|
19
|
-
forwardRef((_a, ref) => {
|
|
14
|
+
export const Link = forwardRef((_a, ref) => {
|
|
20
15
|
var { field, editable = true, showLinkTextWithChildrenPresent } = _a, otherProps = __rest(_a, ["field", "editable", "showLinkTextWithChildrenPresent"]);
|
|
21
16
|
const children = otherProps.children;
|
|
22
17
|
const dynamicField = field;
|
|
@@ -31,7 +26,9 @@ forwardRef((_a, ref) => {
|
|
|
31
26
|
// However, we cannot combine arbitrary unparsed HTML (innerHTML) based components with actual vDOM components (the children)
|
|
32
27
|
// because the innerHTML is not parsed - it'd make a discontinuous vDOM. So, we'll go for the next best compromise of rendering the link field and children separately
|
|
33
28
|
// as siblings. Should be "good enough" for most cases - and write your own helper if it isn't. Or bring xEditor out of 2006.
|
|
34
|
-
const htmlProps = Object.assign(Object.assign({ className: 'sc-link-wrapper',
|
|
29
|
+
const htmlProps = Object.assign(Object.assign({ className: 'sc-link-wrapper',
|
|
30
|
+
// Experience Editor rewrites this chrome markup client-side after SSR.
|
|
31
|
+
suppressHydrationWarning: true, dangerouslySetInnerHTML: {
|
|
35
32
|
__html: markup,
|
|
36
33
|
} }, otherProps), { key: 'editable' });
|
|
37
34
|
// Exclude children, since 'dangerouslySetInnerHTML' and 'children' can't be set together
|
|
@@ -66,5 +63,5 @@ forwardRef((_a, ref) => {
|
|
|
66
63
|
const linkText = showLinkTextWithChildrenPresent || !children ? link.text || link.href : null;
|
|
67
64
|
resultTags.push(React.createElement('a', Object.assign(Object.assign(Object.assign({}, anchorAttrs), otherProps), { key: 'link', ref }), linkText, children));
|
|
68
65
|
return React.createElement(React.Fragment, null, resultTags);
|
|
69
|
-
})
|
|
66
|
+
});
|
|
70
67
|
Link.displayName = 'Link';
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { PlaceholderCommon } from './PlaceholderCommon';
|
|
3
3
|
import { withComponentFactory } from '../enhancers/withComponentFactory';
|
|
4
|
-
import { HorizonEditor } from '@sitecore-jss/sitecore-jss/editing';
|
|
5
4
|
import { withSitecoreContext } from '../enhancers/withSitecoreContext';
|
|
6
5
|
/**
|
|
7
6
|
* @param {HtmlElementRendering | ComponentRendering} rendering
|
|
@@ -15,12 +14,6 @@ class PlaceholderComponent extends PlaceholderCommon {
|
|
|
15
14
|
super(props);
|
|
16
15
|
this.isEmpty = false;
|
|
17
16
|
}
|
|
18
|
-
componentDidMount() {
|
|
19
|
-
super.componentDidMount();
|
|
20
|
-
if (this.isEmpty && HorizonEditor.isActive()) {
|
|
21
|
-
HorizonEditor.resetChromes();
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
17
|
/**
|
|
25
18
|
* In case we need to render an empty placeholder, some part of the markup will be inserted by the EE,
|
|
26
19
|
* so we need to separate the empty placeholder's markup and allow React reconciliation to be executed correctly
|
|
@@ -29,10 +22,10 @@ class PlaceholderComponent extends PlaceholderCommon {
|
|
|
29
22
|
* @returns react node
|
|
30
23
|
*/
|
|
31
24
|
renderEmptyPlaceholder(node) {
|
|
32
|
-
|
|
25
|
+
// Experience Editor may mutate empty-placeholder chrome between SSR and hydration.
|
|
26
|
+
return (React.createElement("div", { className: "sc-jss-empty-placeholder", suppressHydrationWarning: true }, node));
|
|
33
27
|
}
|
|
34
28
|
render() {
|
|
35
|
-
var _a;
|
|
36
29
|
const childProps = Object.assign({}, this.props);
|
|
37
30
|
delete childProps.componentFactory;
|
|
38
31
|
if (this.state.error) {
|
|
@@ -45,7 +38,7 @@ class PlaceholderComponent extends PlaceholderCommon {
|
|
|
45
38
|
"."));
|
|
46
39
|
}
|
|
47
40
|
const renderingData = childProps.rendering;
|
|
48
|
-
const placeholderData = PlaceholderCommon.getPlaceholderDataFromRenderingData(renderingData, this.props.name
|
|
41
|
+
const placeholderData = PlaceholderCommon.getPlaceholderDataFromRenderingData(renderingData, this.props.name);
|
|
49
42
|
this.isEmpty = placeholderData.every((rendering) => isRawRendering(rendering));
|
|
50
43
|
const components = this.getComponentsForRenderingData(placeholderData);
|
|
51
44
|
if (this.props.renderEmpty && this.isEmpty) {
|