@sitecore-content-sdk/react 0.1.0-beta.1
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 -0
- package/README.md +10 -0
- package/dist/cjs/ComponentBuilder.js +25 -0
- package/dist/cjs/components/BYOCComponent.js +132 -0
- package/dist/cjs/components/BYOCWrapper.js +21 -0
- package/dist/cjs/components/ComponentLibraryLayout.js +80 -0
- package/dist/cjs/components/Date.js +57 -0
- package/dist/cjs/components/DefaultEmptyFieldEditingComponents.js +22 -0
- package/dist/cjs/components/EditingScripts.js +27 -0
- package/dist/cjs/components/ErrorBoundary.js +95 -0
- package/dist/cjs/components/FEaaSComponent.js +161 -0
- package/dist/cjs/components/FEaaSWrapper.js +18 -0
- package/dist/cjs/components/FieldMetadata.js +34 -0
- package/dist/cjs/components/File.js +51 -0
- package/dist/cjs/components/HiddenRendering.js +18 -0
- package/dist/cjs/components/Image.js +83 -0
- package/dist/cjs/components/Link.js +106 -0
- package/dist/cjs/components/MissingComponent.js +34 -0
- package/dist/cjs/components/Placeholder.js +72 -0
- package/dist/cjs/components/PlaceholderCommon.js +191 -0
- package/dist/cjs/components/PlaceholderMetadata.js +63 -0
- package/dist/cjs/components/RichText.js +82 -0
- package/dist/cjs/components/SitecoreContext.js +67 -0
- package/dist/cjs/components/Text.js +78 -0
- package/dist/cjs/components/sharedTypes.js +2 -0
- package/dist/cjs/enhancers/withComponentFactory.js +26 -0
- package/dist/cjs/enhancers/withDatasourceCheck.js +28 -0
- package/dist/cjs/enhancers/withEditorChromes.js +24 -0
- package/dist/cjs/enhancers/withEmptyFieldEditingComponent.js +65 -0
- package/dist/cjs/enhancers/withFieldMetadata.js +69 -0
- package/dist/cjs/enhancers/withPlaceholder.js +63 -0
- package/dist/cjs/enhancers/withSitecoreContext.js +48 -0
- package/dist/cjs/index.js +78 -0
- package/dist/cjs/utils.js +38 -0
- package/dist/esm/ComponentBuilder.js +21 -0
- package/dist/esm/components/BYOCComponent.js +91 -0
- package/dist/esm/components/BYOCWrapper.js +14 -0
- package/dist/esm/components/ComponentLibraryLayout.js +43 -0
- package/dist/esm/components/Date.js +51 -0
- package/dist/esm/components/DefaultEmptyFieldEditingComponents.js +14 -0
- package/dist/esm/components/EditingScripts.js +20 -0
- package/dist/esm/components/ErrorBoundary.js +60 -0
- package/dist/esm/components/FEaaSComponent.js +119 -0
- package/dist/esm/components/FEaaSWrapper.js +11 -0
- package/dist/esm/components/FieldMetadata.js +27 -0
- package/dist/esm/components/File.js +44 -0
- package/dist/esm/components/HiddenRendering.js +11 -0
- package/dist/esm/components/Image.js +77 -0
- package/dist/esm/components/Link.js +67 -0
- package/dist/esm/components/MissingComponent.js +27 -0
- package/dist/esm/components/Placeholder.js +66 -0
- package/dist/esm/components/PlaceholderCommon.js +184 -0
- package/dist/esm/components/PlaceholderMetadata.js +56 -0
- package/dist/esm/components/RichText.js +43 -0
- package/dist/esm/components/SitecoreContext.js +60 -0
- package/dist/esm/components/Text.js +72 -0
- package/dist/esm/components/sharedTypes.js +1 -0
- package/dist/esm/enhancers/withComponentFactory.js +20 -0
- package/dist/esm/enhancers/withDatasourceCheck.js +20 -0
- package/dist/esm/enhancers/withEditorChromes.js +17 -0
- package/dist/esm/enhancers/withEmptyFieldEditingComponent.js +29 -0
- package/dist/esm/enhancers/withFieldMetadata.js +33 -0
- package/dist/esm/enhancers/withPlaceholder.js +57 -0
- package/dist/esm/enhancers/withSitecoreContext.js +41 -0
- package/dist/esm/index.js +28 -0
- package/dist/esm/utils.js +33 -0
- package/package.json +78 -0
- package/types/ComponentBuilder.d.ts +27 -0
- package/types/components/BYOCComponent.d.ts +93 -0
- package/types/components/BYOCWrapper.d.ts +6 -0
- package/types/components/ComponentLibraryLayout.d.ts +2 -0
- package/types/components/Date.d.ts +16 -0
- package/types/components/DefaultEmptyFieldEditingComponents.d.ts +3 -0
- package/types/components/EditingScripts.d.ts +4 -0
- package/types/components/ErrorBoundary.d.ts +17 -0
- package/types/components/FEaaSComponent.d.ts +71 -0
- package/types/components/FEaaSWrapper.d.ts +3 -0
- package/types/components/FieldMetadata.d.ts +22 -0
- package/types/components/File.d.ts +18 -0
- package/types/components/HiddenRendering.d.ts +2 -0
- package/types/components/Image.d.ts +48 -0
- package/types/components/Link.d.ts +38 -0
- package/types/components/MissingComponent.d.ts +8 -0
- package/types/components/Placeholder.d.ts +20 -0
- package/types/components/PlaceholderCommon.d.ts +98 -0
- package/types/components/PlaceholderMetadata.d.ts +28 -0
- package/types/components/RichText.d.ts +29 -0
- package/types/components/SitecoreContext.d.ts +42 -0
- package/types/components/Text.d.ts +20 -0
- package/types/components/sharedTypes.d.ts +28 -0
- package/types/enhancers/withComponentFactory.d.ts +12 -0
- package/types/enhancers/withDatasourceCheck.d.ts +21 -0
- package/types/enhancers/withEditorChromes.d.ts +2 -0
- package/types/enhancers/withEmptyFieldEditingComponent.d.ts +27 -0
- package/types/enhancers/withFieldMetadata.d.ts +16 -0
- package/types/enhancers/withPlaceholder.d.ts +34 -0
- package/types/enhancers/withSitecoreContext.d.ts +40 -0
- package/types/index.d.ts +30 -0
- package/types/utils.d.ts +17 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.withEmptyFieldEditingComponent = withEmptyFieldEditingComponent;
|
|
37
|
+
const react_1 = __importStar(require("react"));
|
|
38
|
+
const layout_1 = require("@sitecore-content-sdk/core/layout");
|
|
39
|
+
/**
|
|
40
|
+
* Returns the passed field component or default component in case field value is empty and edit mode is 'metadata'
|
|
41
|
+
* @param {ComponentType<FieldComponentProps>} FieldComponent the field component
|
|
42
|
+
* @param {WithEmptyFieldEditingComponentProps} options the options of the HOC;
|
|
43
|
+
*/
|
|
44
|
+
function withEmptyFieldEditingComponent(FieldComponent, options) {
|
|
45
|
+
const getEmptyFieldEditingComponent = (props) => {
|
|
46
|
+
var _a;
|
|
47
|
+
const { editable = true } = props;
|
|
48
|
+
if (((_a = props.field) === null || _a === void 0 ? void 0 : _a.metadata) && editable && (0, layout_1.isFieldValueEmpty)(props.field)) {
|
|
49
|
+
return props.emptyFieldEditingComponent || options.defaultEmptyFieldEditingComponent;
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
};
|
|
53
|
+
if (options.isForwardRef) {
|
|
54
|
+
// eslint-disable-next-line react/display-name
|
|
55
|
+
return (0, react_1.forwardRef)((props, ref) => {
|
|
56
|
+
const EmptyFieldEditingComponent = getEmptyFieldEditingComponent(props);
|
|
57
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, (EmptyFieldEditingComponent && react_1.default.createElement(EmptyFieldEditingComponent, null)) || (react_1.default.createElement(FieldComponent, Object.assign({}, props, { ref: ref })))));
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
// eslint-disable-next-line react/display-name
|
|
61
|
+
return (props) => {
|
|
62
|
+
const EmptyFieldEditingComponent = getEmptyFieldEditingComponent(props);
|
|
63
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, (EmptyFieldEditingComponent && react_1.default.createElement(EmptyFieldEditingComponent, null)) || (react_1.default.createElement(FieldComponent, Object.assign({}, props)))));
|
|
64
|
+
};
|
|
65
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.withFieldMetadata = withFieldMetadata;
|
|
37
|
+
const react_1 = __importStar(require("react"));
|
|
38
|
+
const FieldMetadata_1 = require("../components/FieldMetadata");
|
|
39
|
+
/**
|
|
40
|
+
* Wraps the field component with metadata markup intended to be used for chromes hydration in Pages
|
|
41
|
+
* @param {ComponentType<FieldComponentProps>} FieldComponent the field component
|
|
42
|
+
* @param {boolean} isForwardRef set to 'true' if forward reference is needed
|
|
43
|
+
*/
|
|
44
|
+
function withFieldMetadata(FieldComponent, isForwardRef = false) {
|
|
45
|
+
if (isForwardRef) {
|
|
46
|
+
// eslint-disable-next-line react/display-name
|
|
47
|
+
return (0, react_1.forwardRef)((props, ref) => {
|
|
48
|
+
var _a;
|
|
49
|
+
const { editable = true } = props;
|
|
50
|
+
const metadata = (_a = props.field) === null || _a === void 0 ? void 0 : _a.metadata;
|
|
51
|
+
if (!metadata || !editable) {
|
|
52
|
+
return react_1.default.createElement(FieldComponent, Object.assign({}, props, { ref: ref }));
|
|
53
|
+
}
|
|
54
|
+
return (react_1.default.createElement(FieldMetadata_1.FieldMetadata, { metadata: metadata },
|
|
55
|
+
react_1.default.createElement(FieldComponent, Object.assign({}, props, { ref: ref }))));
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
// eslint-disable-next-line react/display-name
|
|
59
|
+
return (props) => {
|
|
60
|
+
var _a;
|
|
61
|
+
const { editable = true } = props;
|
|
62
|
+
const metadata = (_a = props.field) === null || _a === void 0 ? void 0 : _a.metadata;
|
|
63
|
+
if (!metadata || !editable) {
|
|
64
|
+
return react_1.default.createElement(FieldComponent, Object.assign({}, props));
|
|
65
|
+
}
|
|
66
|
+
return (react_1.default.createElement(FieldMetadata_1.FieldMetadata, { metadata: metadata },
|
|
67
|
+
react_1.default.createElement(FieldComponent, Object.assign({}, props))));
|
|
68
|
+
};
|
|
69
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.withPlaceholder = withPlaceholder;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const PlaceholderCommon_1 = require("../components/PlaceholderCommon");
|
|
9
|
+
const withComponentFactory_1 = require("./withComponentFactory");
|
|
10
|
+
const withSitecoreContext_1 = require("./withSitecoreContext");
|
|
11
|
+
/**
|
|
12
|
+
* @param {WithPlaceholderSpec} placeholders
|
|
13
|
+
* @param {WithPlaceholderOptions} [options]
|
|
14
|
+
*/
|
|
15
|
+
function withPlaceholder(placeholders, options) {
|
|
16
|
+
return (WrappedComponent) => {
|
|
17
|
+
class WithPlaceholder extends PlaceholderCommon_1.PlaceholderCommon {
|
|
18
|
+
constructor(props) {
|
|
19
|
+
super(props);
|
|
20
|
+
}
|
|
21
|
+
render() {
|
|
22
|
+
let childProps = Object.assign({}, this.props);
|
|
23
|
+
delete childProps.componentFactory;
|
|
24
|
+
if (options && options.propsTransformer) {
|
|
25
|
+
childProps = options.propsTransformer(childProps);
|
|
26
|
+
}
|
|
27
|
+
if (this.state.error) {
|
|
28
|
+
if (childProps.errorComponent) {
|
|
29
|
+
return react_1.default.createElement(childProps.errorComponent, { error: this.state.error });
|
|
30
|
+
}
|
|
31
|
+
return (react_1.default.createElement("div", { className: "sc-jss-placeholder-error" },
|
|
32
|
+
"A rendering error occurred: ",
|
|
33
|
+
this.state.error.message,
|
|
34
|
+
"."));
|
|
35
|
+
}
|
|
36
|
+
const renderingData = options && options.resolvePlaceholderDataFromProps
|
|
37
|
+
? options.resolvePlaceholderDataFromProps(childProps)
|
|
38
|
+
: childProps.rendering;
|
|
39
|
+
const definitelyArrayPlacholders = !Array.isArray(placeholders)
|
|
40
|
+
? [placeholders]
|
|
41
|
+
: placeholders;
|
|
42
|
+
definitelyArrayPlacholders.forEach((placeholder) => {
|
|
43
|
+
let placeholderData;
|
|
44
|
+
if (typeof placeholder !== 'string' && placeholder.placeholder && placeholder.prop) {
|
|
45
|
+
placeholderData = PlaceholderCommon_1.PlaceholderCommon.getPlaceholderDataFromRenderingData(renderingData, placeholder.placeholder, childProps.sitecoreContext.pageEditing);
|
|
46
|
+
if (placeholderData) {
|
|
47
|
+
childProps[placeholder.prop] = this.getComponentsForRenderingData(placeholderData);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
placeholderData = PlaceholderCommon_1.PlaceholderCommon.getPlaceholderDataFromRenderingData(renderingData, placeholder, childProps.sitecoreContext.pageEditing);
|
|
52
|
+
if (placeholderData) {
|
|
53
|
+
childProps[placeholder] = this.getComponentsForRenderingData(placeholderData);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
return react_1.default.createElement(WrappedComponent, Object.assign({}, childProps));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
WithPlaceholder.propTypes = PlaceholderCommon_1.PlaceholderCommon.propTypes;
|
|
61
|
+
return (0, withSitecoreContext_1.withSitecoreContext)()((0, withComponentFactory_1.withComponentFactory)(WithPlaceholder));
|
|
62
|
+
};
|
|
63
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.withSitecoreContext = withSitecoreContext;
|
|
7
|
+
exports.useSitecoreContext = useSitecoreContext;
|
|
8
|
+
const react_1 = __importDefault(require("react"));
|
|
9
|
+
const SitecoreContext_1 = require("../components/SitecoreContext");
|
|
10
|
+
/**
|
|
11
|
+
* @param {WithSitecoreContextOptions} [options]
|
|
12
|
+
*/
|
|
13
|
+
function withSitecoreContext(options) {
|
|
14
|
+
return function withSitecoreContextHoc(Component) {
|
|
15
|
+
return function WithSitecoreContext(props) {
|
|
16
|
+
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 })))));
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* This hook grants acсess to the current Sitecore page context
|
|
22
|
+
* by default JSS includes the following properties in this context:
|
|
23
|
+
* - pageEditing - Provided by Layout Service, a boolean indicating whether the route is being accessed via the Sitecore Editor.
|
|
24
|
+
* - pageState - Like pageEditing, but a string: normal, preview or edit.
|
|
25
|
+
* - site - Provided by Layout Service, an object containing the name of the current Sitecore site context.
|
|
26
|
+
* @see https://jss.sitecore.com/docs/techniques/extending-layout-service/layoutservice-extending-context
|
|
27
|
+
* @param {WithSitecoreContextOptions} [options] hook options
|
|
28
|
+
* @example
|
|
29
|
+
* const EditMode = () => {
|
|
30
|
+
* const { sitecoreContext } = useSitecoreContext();
|
|
31
|
+
* return <span>Edit Mode is {sitecoreContext.pageEditing ? 'active' : 'inactive'}</span>
|
|
32
|
+
* }
|
|
33
|
+
* @example
|
|
34
|
+
* const EditMode = () => {
|
|
35
|
+
* const { sitecoreContext, updateSitecoreContext } = useSitecoreContext({ updatable: true });
|
|
36
|
+
* const onClick = () => updateSitecoreContext({ pageEditing: true });
|
|
37
|
+
* return <span onClick={onClick}>Edit Mode is {sitecoreContext.pageEditing ? 'active' : 'inactive'}</span>
|
|
38
|
+
* }
|
|
39
|
+
* @returns {object} { sitecoreContext, updateSitecoreContext }
|
|
40
|
+
*/
|
|
41
|
+
function useSitecoreContext(options) {
|
|
42
|
+
const reactContext = react_1.default.useContext(SitecoreContext_1.SitecoreContextReactContext);
|
|
43
|
+
const updatable = options === null || options === void 0 ? void 0 : options.updatable;
|
|
44
|
+
return {
|
|
45
|
+
sitecoreContext: reactContext.context,
|
|
46
|
+
updateSitecoreContext: updatable ? reactContext.setContext : undefined,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DefaultEmptyFieldEditingComponentImage = exports.DefaultEmptyFieldEditingComponentText = exports.EditingScripts = exports.withEmptyFieldEditingComponent = exports.withFieldMetadata = exports.ComponentBuilder = exports.withDatasourceCheck = exports.withPlaceholder = exports.withEditorChromes = exports.useSitecoreContext = exports.withSitecoreContext = exports.SitecoreContextReactContext = exports.SitecoreContext = exports.File = exports.LinkPropTypes = exports.Link = exports.BYOCWrapper = exports.fetchBYOCComponentServerProps = exports.BYOCComponent = exports.ComponentLibraryLayout = exports.FEaaSWrapper = exports.fetchFEaaSComponentServerProps = exports.FEaaSComponent = exports.DateField = exports.Text = exports.RichTextPropTypes = exports.RichText = exports.Image = exports.Placeholder = exports.mediaApi = exports.GraphQLRequestClient = exports.DefaultRetryStrategy = exports.GraphQLDictionaryService = exports.EditMode = exports.getFieldValue = exports.getChildPlaceholder = exports.GraphQLLayoutService = exports.LayoutServicePageState = exports.getComponentLibraryStylesheetLinks = exports.getContentStylesheetLink = exports.resetEditorChromes = exports.isEditorActive = exports.NativeDataFetcher = exports.MemoryCacheClient = exports.ClientError = exports.enableDebug = exports.constants = void 0;
|
|
4
|
+
var core_1 = require("@sitecore-content-sdk/core");
|
|
5
|
+
Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return core_1.constants; } });
|
|
6
|
+
Object.defineProperty(exports, "enableDebug", { enumerable: true, get: function () { return core_1.enableDebug; } });
|
|
7
|
+
Object.defineProperty(exports, "ClientError", { enumerable: true, get: function () { return core_1.ClientError; } });
|
|
8
|
+
Object.defineProperty(exports, "MemoryCacheClient", { enumerable: true, get: function () { return core_1.MemoryCacheClient; } });
|
|
9
|
+
Object.defineProperty(exports, "NativeDataFetcher", { enumerable: true, get: function () { return core_1.NativeDataFetcher; } });
|
|
10
|
+
var editing_1 = require("@sitecore-content-sdk/core/editing");
|
|
11
|
+
Object.defineProperty(exports, "isEditorActive", { enumerable: true, get: function () { return editing_1.isEditorActive; } });
|
|
12
|
+
Object.defineProperty(exports, "resetEditorChromes", { enumerable: true, get: function () { return editing_1.resetEditorChromes; } });
|
|
13
|
+
var layout_1 = require("@sitecore-content-sdk/core/layout");
|
|
14
|
+
Object.defineProperty(exports, "getContentStylesheetLink", { enumerable: true, get: function () { return layout_1.getContentStylesheetLink; } });
|
|
15
|
+
Object.defineProperty(exports, "getComponentLibraryStylesheetLinks", { enumerable: true, get: function () { return layout_1.getComponentLibraryStylesheetLinks; } });
|
|
16
|
+
Object.defineProperty(exports, "LayoutServicePageState", { enumerable: true, get: function () { return layout_1.LayoutServicePageState; } });
|
|
17
|
+
Object.defineProperty(exports, "GraphQLLayoutService", { enumerable: true, get: function () { return layout_1.GraphQLLayoutService; } });
|
|
18
|
+
Object.defineProperty(exports, "getChildPlaceholder", { enumerable: true, get: function () { return layout_1.getChildPlaceholder; } });
|
|
19
|
+
Object.defineProperty(exports, "getFieldValue", { enumerable: true, get: function () { return layout_1.getFieldValue; } });
|
|
20
|
+
Object.defineProperty(exports, "EditMode", { enumerable: true, get: function () { return layout_1.EditMode; } });
|
|
21
|
+
var i18n_1 = require("@sitecore-content-sdk/core/i18n");
|
|
22
|
+
Object.defineProperty(exports, "GraphQLDictionaryService", { enumerable: true, get: function () { return i18n_1.GraphQLDictionaryService; } });
|
|
23
|
+
var graphql_1 = require("@sitecore-content-sdk/core/graphql");
|
|
24
|
+
Object.defineProperty(exports, "DefaultRetryStrategy", { enumerable: true, get: function () { return graphql_1.DefaultRetryStrategy; } });
|
|
25
|
+
Object.defineProperty(exports, "GraphQLRequestClient", { enumerable: true, get: function () { return graphql_1.GraphQLRequestClient; } });
|
|
26
|
+
var media_1 = require("@sitecore-content-sdk/core/media");
|
|
27
|
+
Object.defineProperty(exports, "mediaApi", { enumerable: true, get: function () { return media_1.mediaApi; } });
|
|
28
|
+
var Placeholder_1 = require("./components/Placeholder");
|
|
29
|
+
Object.defineProperty(exports, "Placeholder", { enumerable: true, get: function () { return Placeholder_1.Placeholder; } });
|
|
30
|
+
var Image_1 = require("./components/Image");
|
|
31
|
+
Object.defineProperty(exports, "Image", { enumerable: true, get: function () { return Image_1.Image; } });
|
|
32
|
+
var RichText_1 = require("./components/RichText");
|
|
33
|
+
Object.defineProperty(exports, "RichText", { enumerable: true, get: function () { return RichText_1.RichText; } });
|
|
34
|
+
Object.defineProperty(exports, "RichTextPropTypes", { enumerable: true, get: function () { return RichText_1.RichTextPropTypes; } });
|
|
35
|
+
var Text_1 = require("./components/Text");
|
|
36
|
+
Object.defineProperty(exports, "Text", { enumerable: true, get: function () { return Text_1.Text; } });
|
|
37
|
+
var Date_1 = require("./components/Date");
|
|
38
|
+
Object.defineProperty(exports, "DateField", { enumerable: true, get: function () { return Date_1.DateField; } });
|
|
39
|
+
var FEaaSComponent_1 = require("./components/FEaaSComponent");
|
|
40
|
+
Object.defineProperty(exports, "FEaaSComponent", { enumerable: true, get: function () { return FEaaSComponent_1.FEaaSComponent; } });
|
|
41
|
+
Object.defineProperty(exports, "fetchFEaaSComponentServerProps", { enumerable: true, get: function () { return FEaaSComponent_1.fetchFEaaSComponentServerProps; } });
|
|
42
|
+
var FEaaSWrapper_1 = require("./components/FEaaSWrapper");
|
|
43
|
+
Object.defineProperty(exports, "FEaaSWrapper", { enumerable: true, get: function () { return FEaaSWrapper_1.FEaaSWrapper; } });
|
|
44
|
+
var ComponentLibraryLayout_1 = require("./components/ComponentLibraryLayout");
|
|
45
|
+
Object.defineProperty(exports, "ComponentLibraryLayout", { enumerable: true, get: function () { return ComponentLibraryLayout_1.ComponentLibraryLayout; } });
|
|
46
|
+
var BYOCComponent_1 = require("./components/BYOCComponent");
|
|
47
|
+
Object.defineProperty(exports, "BYOCComponent", { enumerable: true, get: function () { return BYOCComponent_1.BYOCComponent; } });
|
|
48
|
+
Object.defineProperty(exports, "fetchBYOCComponentServerProps", { enumerable: true, get: function () { return BYOCComponent_1.fetchBYOCComponentServerProps; } });
|
|
49
|
+
var BYOCWrapper_1 = require("./components/BYOCWrapper");
|
|
50
|
+
Object.defineProperty(exports, "BYOCWrapper", { enumerable: true, get: function () { return BYOCWrapper_1.BYOCWrapper; } });
|
|
51
|
+
var Link_1 = require("./components/Link");
|
|
52
|
+
Object.defineProperty(exports, "Link", { enumerable: true, get: function () { return Link_1.Link; } });
|
|
53
|
+
Object.defineProperty(exports, "LinkPropTypes", { enumerable: true, get: function () { return Link_1.LinkPropTypes; } });
|
|
54
|
+
var File_1 = require("./components/File");
|
|
55
|
+
Object.defineProperty(exports, "File", { enumerable: true, get: function () { return File_1.File; } });
|
|
56
|
+
var SitecoreContext_1 = require("./components/SitecoreContext");
|
|
57
|
+
Object.defineProperty(exports, "SitecoreContext", { enumerable: true, get: function () { return SitecoreContext_1.SitecoreContext; } });
|
|
58
|
+
Object.defineProperty(exports, "SitecoreContextReactContext", { enumerable: true, get: function () { return SitecoreContext_1.SitecoreContextReactContext; } });
|
|
59
|
+
var withSitecoreContext_1 = require("./enhancers/withSitecoreContext");
|
|
60
|
+
Object.defineProperty(exports, "withSitecoreContext", { enumerable: true, get: function () { return withSitecoreContext_1.withSitecoreContext; } });
|
|
61
|
+
Object.defineProperty(exports, "useSitecoreContext", { enumerable: true, get: function () { return withSitecoreContext_1.useSitecoreContext; } });
|
|
62
|
+
var withEditorChromes_1 = require("./enhancers/withEditorChromes");
|
|
63
|
+
Object.defineProperty(exports, "withEditorChromes", { enumerable: true, get: function () { return withEditorChromes_1.withEditorChromes; } });
|
|
64
|
+
var withPlaceholder_1 = require("./enhancers/withPlaceholder");
|
|
65
|
+
Object.defineProperty(exports, "withPlaceholder", { enumerable: true, get: function () { return withPlaceholder_1.withPlaceholder; } });
|
|
66
|
+
var withDatasourceCheck_1 = require("./enhancers/withDatasourceCheck");
|
|
67
|
+
Object.defineProperty(exports, "withDatasourceCheck", { enumerable: true, get: function () { return withDatasourceCheck_1.withDatasourceCheck; } });
|
|
68
|
+
var ComponentBuilder_1 = require("./ComponentBuilder");
|
|
69
|
+
Object.defineProperty(exports, "ComponentBuilder", { enumerable: true, get: function () { return ComponentBuilder_1.ComponentBuilder; } });
|
|
70
|
+
var withFieldMetadata_1 = require("./enhancers/withFieldMetadata");
|
|
71
|
+
Object.defineProperty(exports, "withFieldMetadata", { enumerable: true, get: function () { return withFieldMetadata_1.withFieldMetadata; } });
|
|
72
|
+
var withEmptyFieldEditingComponent_1 = require("./enhancers/withEmptyFieldEditingComponent");
|
|
73
|
+
Object.defineProperty(exports, "withEmptyFieldEditingComponent", { enumerable: true, get: function () { return withEmptyFieldEditingComponent_1.withEmptyFieldEditingComponent; } });
|
|
74
|
+
var EditingScripts_1 = require("./components/EditingScripts");
|
|
75
|
+
Object.defineProperty(exports, "EditingScripts", { enumerable: true, get: function () { return EditingScripts_1.EditingScripts; } });
|
|
76
|
+
var DefaultEmptyFieldEditingComponents_1 = require("./components/DefaultEmptyFieldEditingComponents");
|
|
77
|
+
Object.defineProperty(exports, "DefaultEmptyFieldEditingComponentText", { enumerable: true, get: function () { return DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentText; } });
|
|
78
|
+
Object.defineProperty(exports, "DefaultEmptyFieldEditingComponentImage", { enumerable: true, get: function () { return DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentImage; } });
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDataFromFields = exports.addClassName = void 0;
|
|
4
|
+
const layout_1 = require("@sitecore-content-sdk/core/layout");
|
|
5
|
+
/**
|
|
6
|
+
* "class" property will be transformed into or appended to "className" instead.
|
|
7
|
+
* @param {string} otherAttrs all other props included on the image component
|
|
8
|
+
* @returns {void}
|
|
9
|
+
*/
|
|
10
|
+
const addClassName = (otherAttrs) => {
|
|
11
|
+
if (otherAttrs.class) {
|
|
12
|
+
// if any classes are defined properly already
|
|
13
|
+
if (otherAttrs.className) {
|
|
14
|
+
let className = otherAttrs.className;
|
|
15
|
+
className += ` ${otherAttrs.class}`;
|
|
16
|
+
otherAttrs.className = className;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
otherAttrs.className = otherAttrs.class;
|
|
20
|
+
}
|
|
21
|
+
delete otherAttrs.class;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
exports.addClassName = addClassName;
|
|
25
|
+
/**
|
|
26
|
+
* Used in FEAAS and BYOC implementations to convert datasource item field values into component props
|
|
27
|
+
* @param {ComponentFields} fields field collection from Sitecore
|
|
28
|
+
* @returns JSON object that can be used as props
|
|
29
|
+
*/
|
|
30
|
+
const getDataFromFields = (fields) => {
|
|
31
|
+
let data = {};
|
|
32
|
+
data = Object.entries(fields).reduce((acc, [key]) => {
|
|
33
|
+
acc[key] = (0, layout_1.getFieldValue)(fields, key);
|
|
34
|
+
return acc;
|
|
35
|
+
}, data);
|
|
36
|
+
return data;
|
|
37
|
+
};
|
|
38
|
+
exports.getDataFromFields = getDataFromFields;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React implementation of component builder class for building components based on the configuration.
|
|
3
|
+
*/
|
|
4
|
+
export class ComponentBuilder {
|
|
5
|
+
constructor(config) {
|
|
6
|
+
this.config = config;
|
|
7
|
+
this.components = new Map([...config.components]);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Creates a new instance of component factory
|
|
11
|
+
* @returns {ComponentFactory} Component factory implementation
|
|
12
|
+
*/
|
|
13
|
+
getComponentFactory() {
|
|
14
|
+
return (componentName) => {
|
|
15
|
+
const component = this.components.get(componentName);
|
|
16
|
+
if (!component)
|
|
17
|
+
return null;
|
|
18
|
+
return component;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import { getDataFromFields } from '../utils';
|
|
12
|
+
import { MissingComponent } from './MissingComponent';
|
|
13
|
+
import * as FEAAS from '@sitecore-feaas/clientside/react';
|
|
14
|
+
export const BYOC_COMPONENT_RENDERING_NAME = 'BYOCComponent';
|
|
15
|
+
const DefaultErrorComponent = (props) => {
|
|
16
|
+
var _a;
|
|
17
|
+
return (React.createElement("div", null,
|
|
18
|
+
"A rendering error occurred: ", (_a = props.error) === null || _a === void 0 ? void 0 :
|
|
19
|
+
_a.message,
|
|
20
|
+
"."));
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* BYOCComponent facilitate the rendering of external components. It manages potential errors,
|
|
24
|
+
* missing components, and customization of error messages or alternative rendering components.
|
|
25
|
+
* @param {ByocComponentProps} props component props
|
|
26
|
+
* @returns dynamicly rendered component or Missing Component error frame
|
|
27
|
+
*/
|
|
28
|
+
export class BYOCComponent extends React.Component {
|
|
29
|
+
constructor(props) {
|
|
30
|
+
super(props);
|
|
31
|
+
this.state = {};
|
|
32
|
+
}
|
|
33
|
+
static getDerivedStateFromError(error) {
|
|
34
|
+
// Update state so the next render will show the fallback UI.
|
|
35
|
+
return { error: error };
|
|
36
|
+
}
|
|
37
|
+
componentDidCatch(error) {
|
|
38
|
+
this.setState({ error });
|
|
39
|
+
}
|
|
40
|
+
render() {
|
|
41
|
+
var _a, _b, _c;
|
|
42
|
+
const props = this.props;
|
|
43
|
+
if (this.state.error) {
|
|
44
|
+
return this.props.errorComponent ? (React.createElement(this.props.errorComponent, { error: this.state.error })) : (React.createElement(DefaultErrorComponent, { error: this.state.error }));
|
|
45
|
+
}
|
|
46
|
+
const { ComponentName: componentName } = props.params || {};
|
|
47
|
+
if (!componentName) {
|
|
48
|
+
const noNameProps = {
|
|
49
|
+
errorOverride: 'BYOC: The ComponentName for this rendering is missing',
|
|
50
|
+
};
|
|
51
|
+
return props.missingComponentComponent ? (React.createElement(this.props.missingComponentComponent, Object.assign({}, noNameProps))) : (React.createElement(MissingComponent, Object.assign({}, noNameProps)));
|
|
52
|
+
}
|
|
53
|
+
const unRegisteredComponentProps = {
|
|
54
|
+
rendering: {
|
|
55
|
+
componentName: componentName,
|
|
56
|
+
},
|
|
57
|
+
errorOverride: 'BYOC: This component was not registered.',
|
|
58
|
+
};
|
|
59
|
+
const fallbackComponent = this.props.missingComponentComponent ? (React.createElement(this.props.missingComponentComponent, Object.assign({}, unRegisteredComponentProps))) : (React.createElement(MissingComponent, Object.assign({}, unRegisteredComponentProps)));
|
|
60
|
+
const ErrorComponent = this.props.errorComponent;
|
|
61
|
+
let componentProps = {};
|
|
62
|
+
if ((_a = props.params) === null || _a === void 0 ? void 0 : _a.ComponentProps) {
|
|
63
|
+
try {
|
|
64
|
+
componentProps = (_b = JSON.parse(props.params.ComponentProps)) !== null && _b !== void 0 ? _b : {};
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
console.error(`Parsing props for ${componentName} component from rendering params failed. Error: ${e}`);
|
|
68
|
+
return ErrorComponent ? (React.createElement(ErrorComponent, { error: e })) : (React.createElement(DefaultErrorComponent, { error: e }));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// apply props from item datasource
|
|
72
|
+
const dataSourcesData = Object.assign(Object.assign({}, props.fetchedData), { _: getDataFromFields((_c = props.fields) !== null && _c !== void 0 ? _c : {}) });
|
|
73
|
+
// we render fallback on client to avoid problems with client-only components
|
|
74
|
+
return (React.createElement(FEAAS.ExternalComponent, Object.assign({}, props.rendering, { componentName: componentName, clientFallback: fallbackComponent, datasources: dataSourcesData }, componentProps)));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Fetches server component props required for server rendering, based on rendering params.
|
|
79
|
+
* @param {BYOCComponentParams} params component params
|
|
80
|
+
*/
|
|
81
|
+
export function fetchBYOCComponentServerProps(params) {
|
|
82
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
+
const fetchDataOptions = params.ComponentDataOverride
|
|
84
|
+
? JSON.parse(params.ComponentDataOverride)
|
|
85
|
+
: {};
|
|
86
|
+
const fetchedData = yield FEAAS.DataSettings.fetch(fetchDataOptions || {});
|
|
87
|
+
return {
|
|
88
|
+
fetchedData,
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BYOCComponent } from './BYOCComponent';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
export const BYOC_WRAPPER_RENDERING_NAME = 'BYOCWrapper';
|
|
4
|
+
/**
|
|
5
|
+
* TODO: remove when framework agnostic forms implemented
|
|
6
|
+
*/
|
|
7
|
+
export const BYOCWrapper = (props) => {
|
|
8
|
+
var _a, _b, _c;
|
|
9
|
+
const styles = (_b = (_a = props.params) === null || _a === void 0 ? void 0 : _a.styles) === null || _b === void 0 ? void 0 : _b.trimEnd();
|
|
10
|
+
const id = (_c = props.params) === null || _c === void 0 ? void 0 : _c.RenderingIdentifier;
|
|
11
|
+
return (React.createElement("div", { className: styles ? styles : undefined, id: id ? id : undefined },
|
|
12
|
+
React.createElement("div", { className: "component-content" },
|
|
13
|
+
React.createElement(BYOCComponent, Object.assign({}, props)))));
|
|
14
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React, { useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import { Placeholder } from './Placeholder';
|
|
3
|
+
import { EDITING_COMPONENT_ID, EDITING_COMPONENT_PLACEHOLDER, } from '@sitecore-content-sdk/core/layout';
|
|
4
|
+
import { ComponentLibraryStatus, getComponentLibraryStatusEvent, addComponentUpdateHandler, } from '@sitecore-content-sdk/core/editing';
|
|
5
|
+
import { EditingScripts } from './EditingScripts';
|
|
6
|
+
export const ComponentLibraryLayout = (layoutData) => {
|
|
7
|
+
const { route } = layoutData.sitecore;
|
|
8
|
+
const [renderKey, setRenderKey] = useState(0);
|
|
9
|
+
const [rootUpdate, setRootUpdate] = useState(null);
|
|
10
|
+
const rootComponent = route === null || route === void 0 ? void 0 : route.placeholders[EDITING_COMPONENT_PLACEHOLDER][0];
|
|
11
|
+
// useEffect may execute multiple times on single render (i.e. in dev) - but we only want to fire ready event once
|
|
12
|
+
let componentReady = false;
|
|
13
|
+
// have an up-to-date layout state between re-renders (SSR re-render excluded)
|
|
14
|
+
const persistedRoot = useMemo(() => (Object.assign(Object.assign({}, (rootComponent || {})), rootUpdate)), [
|
|
15
|
+
rootComponent,
|
|
16
|
+
rootUpdate,
|
|
17
|
+
]);
|
|
18
|
+
route.placeholders[EDITING_COMPONENT_PLACEHOLDER][0] = persistedRoot;
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
// useEffect will fire when components are ready - and we inform the whole wide world of it too
|
|
21
|
+
if (!componentReady) {
|
|
22
|
+
componentReady = true;
|
|
23
|
+
window.top.postMessage(getComponentLibraryStatusEvent(ComponentLibraryStatus.READY, rootComponent.uid), '*');
|
|
24
|
+
}
|
|
25
|
+
const unsubscribe = addComponentUpdateHandler(persistedRoot, (updatedRoot) => {
|
|
26
|
+
setRootUpdate(Object.assign({}, updatedRoot));
|
|
27
|
+
setRenderKey((key) => key + 1);
|
|
28
|
+
});
|
|
29
|
+
// useEffect will cleanup event handler on re-render
|
|
30
|
+
return unsubscribe;
|
|
31
|
+
}, []);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
// Send a rendered event only as effect of a component update command
|
|
34
|
+
if (renderKey === 0) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
window.top.postMessage(getComponentLibraryStatusEvent(ComponentLibraryStatus.RENDERED, rootComponent.uid), '*');
|
|
38
|
+
}, [renderKey, rootComponent.uid]);
|
|
39
|
+
return (React.createElement(React.Fragment, null,
|
|
40
|
+
React.createElement(EditingScripts, null),
|
|
41
|
+
React.createElement("main", null,
|
|
42
|
+
React.createElement("div", { id: EDITING_COMPONENT_ID }, route && (React.createElement(Placeholder, { name: EDITING_COMPONENT_PLACEHOLDER, rendering: route, key: renderKey }))))));
|
|
43
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import React from 'react';
|
|
13
|
+
import PropTypes from 'prop-types';
|
|
14
|
+
import { withFieldMetadata } from '../enhancers/withFieldMetadata';
|
|
15
|
+
import { withEmptyFieldEditingComponent } from '../enhancers/withEmptyFieldEditingComponent';
|
|
16
|
+
import { DefaultEmptyFieldEditingComponentText } from './DefaultEmptyFieldEditingComponents';
|
|
17
|
+
import { isFieldValueEmpty } from '@sitecore-content-sdk/core/layout';
|
|
18
|
+
export const DateField = withFieldMetadata(withEmptyFieldEditingComponent((_a) => {
|
|
19
|
+
var { field, tag, editable = true, render } = _a, otherProps = __rest(_a, ["field", "tag", "editable", "render"]);
|
|
20
|
+
if (isFieldValueEmpty(field)) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
let children;
|
|
24
|
+
const htmlProps = Object.assign({}, otherProps);
|
|
25
|
+
if (render) {
|
|
26
|
+
children = render(field.value ? new Date(field.value) : null);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
children = field.value;
|
|
30
|
+
}
|
|
31
|
+
if (tag) {
|
|
32
|
+
return React.createElement(tag || 'span', htmlProps, children);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return React.createElement(React.Fragment, null, children);
|
|
36
|
+
}
|
|
37
|
+
}, { defaultEmptyFieldEditingComponent: DefaultEmptyFieldEditingComponentText }));
|
|
38
|
+
DateField.propTypes = {
|
|
39
|
+
field: PropTypes.shape({
|
|
40
|
+
value: PropTypes.string,
|
|
41
|
+
metadata: PropTypes.objectOf(PropTypes.any),
|
|
42
|
+
}).isRequired,
|
|
43
|
+
tag: PropTypes.string,
|
|
44
|
+
editable: PropTypes.bool,
|
|
45
|
+
render: PropTypes.func,
|
|
46
|
+
emptyFieldEditingComponent: PropTypes.oneOfType([
|
|
47
|
+
PropTypes.object,
|
|
48
|
+
PropTypes.func,
|
|
49
|
+
]),
|
|
50
|
+
};
|
|
51
|
+
DateField.displayName = 'Date';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export const DefaultEmptyFieldEditingComponentText = () => {
|
|
3
|
+
return React.createElement("span", null, "[No text in field]");
|
|
4
|
+
};
|
|
5
|
+
export const DefaultEmptyFieldEditingComponentImage = () => {
|
|
6
|
+
const inlineStyles = {
|
|
7
|
+
minWidth: '48px',
|
|
8
|
+
minHeight: '48px',
|
|
9
|
+
maxWidth: '400px',
|
|
10
|
+
maxHeight: '400px',
|
|
11
|
+
cursor: 'pointer',
|
|
12
|
+
};
|
|
13
|
+
return (React.createElement("img", { alt: "", src: 'data:image/svg+xml,%3Csvg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 240 240" style="enable-background:new 0 0 240 240;" xml:space="preserve"%3E%3Cstyle type="text/css"%3E .st0%7Bfill:none;%7D .st1%7Bfill:%23969696;%7D .st2%7Bfill:%23FFFFFF;%7D .st3%7Bfill:%23FFFFFF;stroke:%23FFFFFF;stroke-width:0.75;stroke-miterlimit:10;%7D%0A%3C/style%3E%3Cg%3E%3Crect class="st0" width="240" height="240"/%3E%3Cg%3E%3Cg%3E%3Crect x="20" y="20" class="st1" width="200" height="200"/%3E%3C/g%3E%3Cg%3E%3Ccircle class="st2" cx="174" cy="67" r="14"/%3E%3Cpath class="st2" d="M174,54c7.17,0,13,5.83,13,13s-5.83,13-13,13s-13-5.83-13-13S166.83,54,174,54 M174,52 c-8.28,0-15,6.72-15,15s6.72,15,15,15s15-6.72,15-15S182.28,52,174,52L174,52z"/%3E%3C/g%3E%3Cpolyline class="st3" points="29.5,179.25 81.32,122.25 95.41,137.75 137.23,91.75 209.5,179.75 "/%3E%3C/g%3E%3C/g%3E%3C/svg%3E', className: "scEmptyImage", style: inlineStyles }));
|
|
14
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { LayoutServicePageState } from '@sitecore-content-sdk/core/layout';
|
|
3
|
+
import { useSitecoreContext } from '../enhancers/withSitecoreContext';
|
|
4
|
+
import { getJssPagesClientData } from '@sitecore-content-sdk/core/editing';
|
|
5
|
+
/**
|
|
6
|
+
* Renders client scripts and data for editing/preview mode in Pages.
|
|
7
|
+
*/
|
|
8
|
+
export const EditingScripts = () => {
|
|
9
|
+
const { sitecoreContext: { pageState, clientData, clientScripts }, } = useSitecoreContext();
|
|
10
|
+
// Don't render anything if not in editing/preview mode
|
|
11
|
+
if (pageState === LayoutServicePageState.Normal ||
|
|
12
|
+
pageState === LayoutServicePageState.Preview ||
|
|
13
|
+
!pageState) {
|
|
14
|
+
return React.createElement(React.Fragment, null);
|
|
15
|
+
}
|
|
16
|
+
const jssClientData = Object.assign(Object.assign({}, clientData), getJssPagesClientData());
|
|
17
|
+
return (React.createElement(React.Fragment, null, clientScripts === null || clientScripts === void 0 ? void 0 :
|
|
18
|
+
clientScripts.map((src, index) => (React.createElement("script", { src: src, key: index }))),
|
|
19
|
+
Object.keys(jssClientData).map((id) => (React.createElement("script", { key: id, id: id, type: "application/json", dangerouslySetInnerHTML: { __html: JSON.stringify(jssClientData[id]) } })))));
|
|
20
|
+
};
|