@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.
Files changed (99) hide show
  1. package/LICENSE.txt +202 -0
  2. package/README.md +10 -0
  3. package/dist/cjs/ComponentBuilder.js +25 -0
  4. package/dist/cjs/components/BYOCComponent.js +132 -0
  5. package/dist/cjs/components/BYOCWrapper.js +21 -0
  6. package/dist/cjs/components/ComponentLibraryLayout.js +80 -0
  7. package/dist/cjs/components/Date.js +57 -0
  8. package/dist/cjs/components/DefaultEmptyFieldEditingComponents.js +22 -0
  9. package/dist/cjs/components/EditingScripts.js +27 -0
  10. package/dist/cjs/components/ErrorBoundary.js +95 -0
  11. package/dist/cjs/components/FEaaSComponent.js +161 -0
  12. package/dist/cjs/components/FEaaSWrapper.js +18 -0
  13. package/dist/cjs/components/FieldMetadata.js +34 -0
  14. package/dist/cjs/components/File.js +51 -0
  15. package/dist/cjs/components/HiddenRendering.js +18 -0
  16. package/dist/cjs/components/Image.js +83 -0
  17. package/dist/cjs/components/Link.js +106 -0
  18. package/dist/cjs/components/MissingComponent.js +34 -0
  19. package/dist/cjs/components/Placeholder.js +72 -0
  20. package/dist/cjs/components/PlaceholderCommon.js +191 -0
  21. package/dist/cjs/components/PlaceholderMetadata.js +63 -0
  22. package/dist/cjs/components/RichText.js +82 -0
  23. package/dist/cjs/components/SitecoreContext.js +67 -0
  24. package/dist/cjs/components/Text.js +78 -0
  25. package/dist/cjs/components/sharedTypes.js +2 -0
  26. package/dist/cjs/enhancers/withComponentFactory.js +26 -0
  27. package/dist/cjs/enhancers/withDatasourceCheck.js +28 -0
  28. package/dist/cjs/enhancers/withEditorChromes.js +24 -0
  29. package/dist/cjs/enhancers/withEmptyFieldEditingComponent.js +65 -0
  30. package/dist/cjs/enhancers/withFieldMetadata.js +69 -0
  31. package/dist/cjs/enhancers/withPlaceholder.js +63 -0
  32. package/dist/cjs/enhancers/withSitecoreContext.js +48 -0
  33. package/dist/cjs/index.js +78 -0
  34. package/dist/cjs/utils.js +38 -0
  35. package/dist/esm/ComponentBuilder.js +21 -0
  36. package/dist/esm/components/BYOCComponent.js +91 -0
  37. package/dist/esm/components/BYOCWrapper.js +14 -0
  38. package/dist/esm/components/ComponentLibraryLayout.js +43 -0
  39. package/dist/esm/components/Date.js +51 -0
  40. package/dist/esm/components/DefaultEmptyFieldEditingComponents.js +14 -0
  41. package/dist/esm/components/EditingScripts.js +20 -0
  42. package/dist/esm/components/ErrorBoundary.js +60 -0
  43. package/dist/esm/components/FEaaSComponent.js +119 -0
  44. package/dist/esm/components/FEaaSWrapper.js +11 -0
  45. package/dist/esm/components/FieldMetadata.js +27 -0
  46. package/dist/esm/components/File.js +44 -0
  47. package/dist/esm/components/HiddenRendering.js +11 -0
  48. package/dist/esm/components/Image.js +77 -0
  49. package/dist/esm/components/Link.js +67 -0
  50. package/dist/esm/components/MissingComponent.js +27 -0
  51. package/dist/esm/components/Placeholder.js +66 -0
  52. package/dist/esm/components/PlaceholderCommon.js +184 -0
  53. package/dist/esm/components/PlaceholderMetadata.js +56 -0
  54. package/dist/esm/components/RichText.js +43 -0
  55. package/dist/esm/components/SitecoreContext.js +60 -0
  56. package/dist/esm/components/Text.js +72 -0
  57. package/dist/esm/components/sharedTypes.js +1 -0
  58. package/dist/esm/enhancers/withComponentFactory.js +20 -0
  59. package/dist/esm/enhancers/withDatasourceCheck.js +20 -0
  60. package/dist/esm/enhancers/withEditorChromes.js +17 -0
  61. package/dist/esm/enhancers/withEmptyFieldEditingComponent.js +29 -0
  62. package/dist/esm/enhancers/withFieldMetadata.js +33 -0
  63. package/dist/esm/enhancers/withPlaceholder.js +57 -0
  64. package/dist/esm/enhancers/withSitecoreContext.js +41 -0
  65. package/dist/esm/index.js +28 -0
  66. package/dist/esm/utils.js +33 -0
  67. package/package.json +78 -0
  68. package/types/ComponentBuilder.d.ts +27 -0
  69. package/types/components/BYOCComponent.d.ts +93 -0
  70. package/types/components/BYOCWrapper.d.ts +6 -0
  71. package/types/components/ComponentLibraryLayout.d.ts +2 -0
  72. package/types/components/Date.d.ts +16 -0
  73. package/types/components/DefaultEmptyFieldEditingComponents.d.ts +3 -0
  74. package/types/components/EditingScripts.d.ts +4 -0
  75. package/types/components/ErrorBoundary.d.ts +17 -0
  76. package/types/components/FEaaSComponent.d.ts +71 -0
  77. package/types/components/FEaaSWrapper.d.ts +3 -0
  78. package/types/components/FieldMetadata.d.ts +22 -0
  79. package/types/components/File.d.ts +18 -0
  80. package/types/components/HiddenRendering.d.ts +2 -0
  81. package/types/components/Image.d.ts +48 -0
  82. package/types/components/Link.d.ts +38 -0
  83. package/types/components/MissingComponent.d.ts +8 -0
  84. package/types/components/Placeholder.d.ts +20 -0
  85. package/types/components/PlaceholderCommon.d.ts +98 -0
  86. package/types/components/PlaceholderMetadata.d.ts +28 -0
  87. package/types/components/RichText.d.ts +29 -0
  88. package/types/components/SitecoreContext.d.ts +42 -0
  89. package/types/components/Text.d.ts +20 -0
  90. package/types/components/sharedTypes.d.ts +28 -0
  91. package/types/enhancers/withComponentFactory.d.ts +12 -0
  92. package/types/enhancers/withDatasourceCheck.d.ts +21 -0
  93. package/types/enhancers/withEditorChromes.d.ts +2 -0
  94. package/types/enhancers/withEmptyFieldEditingComponent.d.ts +27 -0
  95. package/types/enhancers/withFieldMetadata.d.ts +16 -0
  96. package/types/enhancers/withPlaceholder.d.ts +34 -0
  97. package/types/enhancers/withSitecoreContext.d.ts +40 -0
  98. package/types/index.d.ts +30 -0
  99. 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
+ };