@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,95 @@
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
+ const react_1 = __importStar(require("react"));
37
+ const layout_1 = require("@sitecore-content-sdk/core/layout");
38
+ const withSitecoreContext_1 = require("../enhancers/withSitecoreContext");
39
+ class ErrorBoundary extends react_1.default.Component {
40
+ constructor(props) {
41
+ super(props);
42
+ this.defaultErrorMessage = 'There was a problem loading this section.';
43
+ this.defaultLoadingMessage = 'Loading component...';
44
+ this.state = { error: null };
45
+ }
46
+ static getDerivedStateFromError(error) {
47
+ return { error: error };
48
+ }
49
+ componentDidCatch(error, errorInfo) {
50
+ var _a, _b;
51
+ if (this.showErrorDetails()) {
52
+ console.error(`An error occurred in component ${(_a = this.props.rendering) === null || _a === void 0 ? void 0 : _a.componentName} (${(_b = this.props.rendering) === null || _b === void 0 ? void 0 : _b.uid}): `);
53
+ }
54
+ console.error({ error, errorInfo });
55
+ }
56
+ isInDevMode() {
57
+ return process.env.NODE_ENV === 'development';
58
+ }
59
+ showErrorDetails() {
60
+ var _a, _b;
61
+ return (this.isInDevMode() ||
62
+ ((_a = this.props.sitecoreContext) === null || _a === void 0 ? void 0 : _a.pageState) === layout_1.LayoutServicePageState.Edit ||
63
+ ((_b = this.props.sitecoreContext) === null || _b === void 0 ? void 0 : _b.pageState) === layout_1.LayoutServicePageState.Preview);
64
+ }
65
+ render() {
66
+ var _a;
67
+ if (this.state.error) {
68
+ if (this.props.errorComponent) {
69
+ return react_1.default.createElement(this.props.errorComponent, { error: this.state.error });
70
+ }
71
+ else {
72
+ if (this.showErrorDetails()) {
73
+ return (react_1.default.createElement("div", null,
74
+ react_1.default.createElement("div", { className: "sc-jss-placeholder-error" },
75
+ "A rendering error occurred in component",
76
+ ' ',
77
+ react_1.default.createElement("em", null, (_a = this.props.rendering) === null || _a === void 0 ? void 0 : _a.componentName),
78
+ react_1.default.createElement("br", null),
79
+ "Error: ",
80
+ react_1.default.createElement("em", null, this.state.error.message || JSON.stringify(this.state.error)))));
81
+ }
82
+ else {
83
+ return (react_1.default.createElement("div", null,
84
+ react_1.default.createElement("div", { className: "sc-jss-placeholder-error" }, this.defaultErrorMessage)));
85
+ }
86
+ }
87
+ }
88
+ // do not apply suspense on already dynamic components
89
+ if (this.props.isDynamic) {
90
+ return this.props.children;
91
+ }
92
+ return (react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement("h4", null, this.props.componentLoadingMessage || this.defaultLoadingMessage) }, this.props.children));
93
+ }
94
+ }
95
+ exports.default = (0, withSitecoreContext_1.withSitecoreContext)()(ErrorBoundary);
@@ -0,0 +1,161 @@
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
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.composeComponentEndpoint = exports.FEaaSComponent = exports.FEAAS_COMPONENT_RENDERING_NAME = void 0;
49
+ exports.fetchFEaaSComponentServerProps = fetchFEaaSComponentServerProps;
50
+ const react_1 = __importDefault(require("react"));
51
+ const FEAAS = __importStar(require("@sitecore-feaas/clientside/react"));
52
+ const layout_1 = require("@sitecore-content-sdk/core/layout");
53
+ const utils_1 = require("../utils");
54
+ exports.FEAAS_COMPONENT_RENDERING_NAME = 'FEaaSComponent';
55
+ /**
56
+ * @param {FEaaSComponentProps} props component props
57
+ */
58
+ const FEaaSComponent = (props) => {
59
+ var _a, _b, _c, _d, _e, _f, _g;
60
+ const computedRevision = ((_a = props.params) === null || _a === void 0 ? void 0 : _a.ComponentRevision) || props.revisionFallback;
61
+ if (!props.template &&
62
+ (!props.params ||
63
+ !props.params.LibraryId ||
64
+ !props.params.ComponentId ||
65
+ !props.params.ComponentVersion ||
66
+ !props.params.ComponentHostName ||
67
+ !computedRevision)) {
68
+ // Missing FEaaS component required props
69
+ return null;
70
+ }
71
+ // combine fetchedData from server with datasource data (if present)
72
+ const data = Object.assign(Object.assign({}, props.fetchedData), { _: (0, utils_1.getDataFromFields)((_b = props.fields) !== null && _b !== void 0 ? _b : {}) });
73
+ // FEaaS control would still be hydrated by client
74
+ // we pass all the props as a workaround to avoid hydration error, until we convert all JSS components to server side
75
+ // this also allows component to fall back to full client-side rendering when template or src is empty
76
+ // FEAAS should not fetch anything, since JSS does the fetching - so we pass empty array into fetch param
77
+ return (react_1.default.createElement(FEAAS.Component, { data: data, template: props.template, cdn: (_c = props.params) === null || _c === void 0 ? void 0 : _c.ComponentHostName, library: (_d = props.params) === null || _d === void 0 ? void 0 : _d.LibraryId, version: (_e = props.params) === null || _e === void 0 ? void 0 : _e.ComponentVersion, component: (_f = props.params) === null || _f === void 0 ? void 0 : _f.ComponentId, instance: (_g = props.params) === null || _g === void 0 ? void 0 : _g.ComponentInstanceId, revision: computedRevision, fetch: [] }));
78
+ };
79
+ exports.FEaaSComponent = FEaaSComponent;
80
+ /**
81
+ * Fetches server component props required for server rendering, based on rendering params.
82
+ * Component endpoint will either be retrieved from params or from endpointOverride
83
+ * @param {FEaaSComponentParams} params component params
84
+ * @param {LayoutServicePageState} [pageState] page state to determine which component variant to use
85
+ * @param {string} [endpointOverride] optional override for component endpoint
86
+ */
87
+ function fetchFEaaSComponentServerProps(params, pageState, endpointOverride) {
88
+ return __awaiter(this, void 0, void 0, function* () {
89
+ const revisionFallback = pageState && pageState !== layout_1.LayoutServicePageState.Normal ? 'staged' : 'published';
90
+ const src = endpointOverride || (0, exports.composeComponentEndpoint)(params, revisionFallback);
91
+ let template = '';
92
+ let fetchedData = {};
93
+ const fetchDataOptions = params.ComponentDataOverride
94
+ ? JSON.parse(params.ComponentDataOverride)
95
+ : {};
96
+ try {
97
+ template = yield fetchComponentTemplate(src, params, revisionFallback);
98
+ fetchedData = yield fetchData(fetchDataOptions);
99
+ }
100
+ catch (e) {
101
+ console.error(e);
102
+ }
103
+ return {
104
+ fetchedData,
105
+ revisionFallback,
106
+ template,
107
+ };
108
+ });
109
+ }
110
+ /**
111
+ * @param {string} src component endpoint
112
+ * @param {FEaaSComponentParams} params rendering parameters for FEAAS component
113
+ * @param {RevisionType} revisionFallback fallback revision to fetch if revision is absent in params
114
+ */
115
+ function fetchComponentTemplate(src, params, revisionFallback) {
116
+ return __awaiter(this, void 0, void 0, function* () {
117
+ try {
118
+ const { template } = yield FEAAS.fetchComponent(src);
119
+ return template;
120
+ }
121
+ catch (error) {
122
+ console.error(`Fetch FEAAS component from ${src} failed. Ensure the component revision "${params.ComponentRevision ||
123
+ revisionFallback}" is present`);
124
+ throw error;
125
+ }
126
+ });
127
+ }
128
+ /**
129
+ * Fetches component data based on the provided data options.
130
+ * This function asynchronously fetches data using the FEAAS.DataSettings.fetch method.
131
+ * @param {FEAAS.DataOptions} dataOptions - Options to customize data fetching.
132
+ * @returns {Promise<FEAAS.DataScopes>} A promise that resolves with the fetched data,
133
+ * or rejects with an error if data fetching encounters an issue.
134
+ * @throws {Error} If an error occurs during data fetching, it is propagated as an error.
135
+ */
136
+ function fetchData(dataOptions) {
137
+ return __awaiter(this, void 0, void 0, function* () {
138
+ try {
139
+ const fetchedData = yield FEAAS.DataSettings.fetch(dataOptions || {});
140
+ return fetchedData;
141
+ }
142
+ catch (error) {
143
+ console.error('Fetch FEAAS component data settings failed');
144
+ throw error;
145
+ }
146
+ });
147
+ }
148
+ /**
149
+ * Build component endpoint URL from component's params
150
+ * @param {FEaaSComponentParams} params rendering parameters for FEAAS component
151
+ * @param {RevisionType} revisionFallback fallback revision to fetch if revision is absent in params
152
+ * @returns component endpoint URL
153
+ */
154
+ const composeComponentEndpoint = (params, revisionFallback) => {
155
+ const revision = params.ComponentRevision || revisionFallback;
156
+ const hostname = params.ComponentHostName.startsWith('https://')
157
+ ? params.ComponentHostName
158
+ : `https://${params.ComponentHostName}`;
159
+ return `${hostname}/components/${params.LibraryId}/${params.ComponentId}/${params.ComponentVersion}/${revision}`;
160
+ };
161
+ exports.composeComponentEndpoint = composeComponentEndpoint;
@@ -0,0 +1,18 @@
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.FEaaSWrapper = exports.FEAAS_WRAPPER_RENDERING_NAME = void 0;
7
+ const FEaaSComponent_1 = require("./FEaaSComponent");
8
+ const react_1 = __importDefault(require("react"));
9
+ exports.FEAAS_WRAPPER_RENDERING_NAME = 'FEaaSWrapper';
10
+ const FEaaSWrapper = (props) => {
11
+ var _a, _b;
12
+ const styles = `component feaas ${(_a = props.params) === null || _a === void 0 ? void 0 : _a.styles}`.trimEnd();
13
+ const id = (_b = props.params) === null || _b === void 0 ? void 0 : _b.RenderingIdentifier;
14
+ return (react_1.default.createElement("div", { className: styles, id: id ? id : undefined },
15
+ react_1.default.createElement("div", { className: "component-content" },
16
+ react_1.default.createElement(FEaaSComponent_1.FEaaSComponent, Object.assign({}, props)))));
17
+ };
18
+ exports.FEaaSWrapper = FEaaSWrapper;
@@ -0,0 +1,34 @@
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.FieldMetadata = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const prop_types_1 = __importDefault(require("prop-types"));
9
+ const editing_1 = require("@sitecore-content-sdk/core/editing");
10
+ /**
11
+ * The component which renders field metadata markup
12
+ * @param {FieldMetadataProps} props the props of the component
13
+ * @returns metadata markup wrapped around children
14
+ */
15
+ const FieldMetadata = (props) => {
16
+ const data = JSON.stringify(props.metadata);
17
+ const attributes = {
18
+ type: 'text/sitecore',
19
+ chrometype: 'field',
20
+ className: 'scpm',
21
+ };
22
+ const codeOpenAttributes = Object.assign(Object.assign({}, attributes), { kind: editing_1.MetadataKind.Open });
23
+ const codeCloseAttributes = Object.assign(Object.assign({}, attributes), { kind: editing_1.MetadataKind.Close });
24
+ return (react_1.default.createElement(react_1.default.Fragment, null,
25
+ react_1.default.createElement("code", Object.assign({}, codeOpenAttributes), data),
26
+ props.children,
27
+ react_1.default.createElement("code", Object.assign({}, codeCloseAttributes))));
28
+ };
29
+ exports.FieldMetadata = FieldMetadata;
30
+ exports.FieldMetadata.displayName = 'FieldMetadata';
31
+ exports.FieldMetadata.propTypes = {
32
+ metadata: prop_types_1.default.object.isRequired,
33
+ children: prop_types_1.default.node.isRequired,
34
+ };
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.File = void 0;
18
+ const layout_1 = require("@sitecore-content-sdk/core/layout");
19
+ const prop_types_1 = __importDefault(require("prop-types"));
20
+ const react_1 = __importDefault(require("react"));
21
+ const File = (_a) => {
22
+ var { field, children } = _a, otherProps = __rest(_a, ["field", "children"]);
23
+ const dynamicField = field;
24
+ if ((0, layout_1.isFieldValueEmpty)(dynamicField)) {
25
+ return null;
26
+ }
27
+ // handle link directly on field for forgetful devs
28
+ const file = (dynamicField.src
29
+ ? field
30
+ : dynamicField.value);
31
+ if (!file) {
32
+ return null;
33
+ }
34
+ const linkText = !children ? file.title || file.displayName : null;
35
+ const anchorAttrs = {
36
+ href: file.src,
37
+ };
38
+ return react_1.default.createElement('a', Object.assign(Object.assign({}, anchorAttrs), otherProps), linkText, children);
39
+ };
40
+ exports.File = File;
41
+ exports.File.propTypes = {
42
+ field: prop_types_1.default.oneOfType([
43
+ prop_types_1.default.shape({
44
+ src: prop_types_1.default.string,
45
+ }),
46
+ prop_types_1.default.shape({
47
+ value: prop_types_1.default.object,
48
+ }),
49
+ ]).isRequired,
50
+ };
51
+ exports.File.displayName = 'File';
@@ -0,0 +1,18 @@
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.HiddenRendering = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const styles = {
9
+ backgroundImage: 'linear-gradient(45deg, #ffffff 25%, #dcdcdc 25%, #dcdcdc 50%, #ffffff 50%, #ffffff 75%, #dcdcdc 75%, #dcdcdc 100%)',
10
+ backgroundSize: '3px 3px',
11
+ display: 'flex',
12
+ justifyContent: 'center',
13
+ alignItems: 'center',
14
+ padding: '30px',
15
+ color: '#aaa',
16
+ };
17
+ const HiddenRendering = () => react_1.default.createElement("div", { style: styles }, "The component is hidden");
18
+ exports.HiddenRendering = HiddenRendering;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.Image = void 0;
18
+ const media_1 = require("@sitecore-content-sdk/core/media");
19
+ const prop_types_1 = __importDefault(require("prop-types"));
20
+ const react_1 = __importDefault(require("react"));
21
+ const utils_1 = require("../utils");
22
+ const withFieldMetadata_1 = require("../enhancers/withFieldMetadata");
23
+ const withEmptyFieldEditingComponent_1 = require("../enhancers/withEmptyFieldEditingComponent");
24
+ const DefaultEmptyFieldEditingComponents_1 = require("./DefaultEmptyFieldEditingComponents");
25
+ const layout_1 = require("@sitecore-content-sdk/core/layout");
26
+ const getImageAttrs = (_a, imageParams, mediaUrlPrefix) => {
27
+ var { src, srcSet } = _a, otherAttrs = __rest(_a, ["src", "srcSet"]);
28
+ if (!src) {
29
+ return null;
30
+ }
31
+ (0, utils_1.addClassName)(otherAttrs);
32
+ const newAttrs = Object.assign({}, otherAttrs);
33
+ // update image URL for jss handler and image rendering params
34
+ const resolvedSrc = media_1.mediaApi.updateImageUrl(src, imageParams, mediaUrlPrefix);
35
+ if (srcSet) {
36
+ // replace with HTML-formatted srcset, including updated image URLs
37
+ newAttrs.srcSet = media_1.mediaApi.getSrcSet(resolvedSrc, srcSet, imageParams, mediaUrlPrefix);
38
+ }
39
+ // always output original src as fallback for older browsers
40
+ newAttrs.src = resolvedSrc;
41
+ return newAttrs;
42
+ };
43
+ exports.Image = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEditingComponent_1.withEmptyFieldEditingComponent)((_a) => {
44
+ var { editable = true, imageParams, field, mediaUrlPrefix } = _a, otherProps = __rest(_a, ["editable", "imageParams", "field", "mediaUrlPrefix"]);
45
+ const dynamicMedia = field;
46
+ if ((0, layout_1.isFieldValueEmpty)(dynamicMedia)) {
47
+ return null;
48
+ }
49
+ // some wise-guy/gal is passing in a 'raw' image object value
50
+ const img = dynamicMedia.src
51
+ ? field
52
+ : dynamicMedia.value;
53
+ if (!img) {
54
+ return null;
55
+ }
56
+ // prevent metadata from being passed to the img tag
57
+ if (img.metadata) {
58
+ delete img.metadata;
59
+ }
60
+ const attrs = getImageAttrs(Object.assign(Object.assign({}, img), otherProps), imageParams, mediaUrlPrefix);
61
+ if (attrs) {
62
+ return react_1.default.createElement("img", Object.assign({}, attrs));
63
+ }
64
+ return null; // we can't handle the truth
65
+ }, { defaultEmptyFieldEditingComponent: DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentImage }));
66
+ exports.Image.propTypes = {
67
+ field: prop_types_1.default.oneOfType([
68
+ prop_types_1.default.shape({
69
+ src: prop_types_1.default.string,
70
+ }),
71
+ prop_types_1.default.shape({
72
+ value: prop_types_1.default.object,
73
+ }),
74
+ ]),
75
+ editable: prop_types_1.default.bool,
76
+ mediaUrlPrefix: prop_types_1.default.instanceOf(RegExp),
77
+ imageParams: prop_types_1.default.objectOf(prop_types_1.default.oneOfType([prop_types_1.default.number.isRequired, prop_types_1.default.string.isRequired]).isRequired),
78
+ emptyFieldEditingComponent: prop_types_1.default.oneOfType([
79
+ prop_types_1.default.object,
80
+ prop_types_1.default.func,
81
+ ]),
82
+ };
83
+ exports.Image.displayName = 'Image';
@@ -0,0 +1,106 @@
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
+ var __rest = (this && this.__rest) || function (s, e) {
36
+ var t = {};
37
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
38
+ t[p] = s[p];
39
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
40
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
41
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
42
+ t[p[i]] = s[p[i]];
43
+ }
44
+ return t;
45
+ };
46
+ var __importDefault = (this && this.__importDefault) || function (mod) {
47
+ return (mod && mod.__esModule) ? mod : { "default": mod };
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.LinkPropTypes = exports.Link = void 0;
51
+ const react_1 = __importStar(require("react"));
52
+ const prop_types_1 = __importDefault(require("prop-types"));
53
+ const layout_1 = require("@sitecore-content-sdk/core/layout");
54
+ const withFieldMetadata_1 = require("../enhancers/withFieldMetadata");
55
+ const withEmptyFieldEditingComponent_1 = require("../enhancers/withEmptyFieldEditingComponent");
56
+ const DefaultEmptyFieldEditingComponents_1 = require("./DefaultEmptyFieldEditingComponents");
57
+ exports.Link = (0, withFieldMetadata_1.withFieldMetadata)((0, withEmptyFieldEditingComponent_1.withEmptyFieldEditingComponent)(
58
+ // eslint-disable-next-line react/display-name
59
+ (0, react_1.forwardRef)((_a, ref) => {
60
+ var { field, editable = true, showLinkTextWithChildrenPresent } = _a, otherProps = __rest(_a, ["field", "editable", "showLinkTextWithChildrenPresent"]);
61
+ const children = otherProps.children;
62
+ const dynamicField = field;
63
+ if ((0, layout_1.isFieldValueEmpty)(dynamicField)) {
64
+ return null;
65
+ }
66
+ // handle link directly on field for forgetful devs
67
+ const link = dynamicField.href
68
+ ? field
69
+ : dynamicField.value;
70
+ if (!link) {
71
+ return null;
72
+ }
73
+ const anchor = link.linktype !== 'anchor' && link.anchor ? `#${link.anchor}` : '';
74
+ const querystring = link.querystring ? `?${link.querystring}` : '';
75
+ const anchorAttrs = {
76
+ href: `${link.href}${querystring}${anchor}`,
77
+ className: link.class,
78
+ title: link.title,
79
+ target: link.target,
80
+ };
81
+ if (anchorAttrs.target === '_blank' && !anchorAttrs.rel) {
82
+ // information disclosure attack prevention keeps target blank site from getting ref to window.opener
83
+ anchorAttrs.rel = 'noopener noreferrer';
84
+ }
85
+ const linkText = showLinkTextWithChildrenPresent || !children ? link.text || link.href : null;
86
+ const element = react_1.default.createElement('a', Object.assign(Object.assign(Object.assign({}, anchorAttrs), otherProps), { key: 'link', ref }), linkText, children);
87
+ return react_1.default.createElement(react_1.default.Fragment, null, element);
88
+ }), { defaultEmptyFieldEditingComponent: DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentText, isForwardRef: true }), true);
89
+ exports.LinkPropTypes = {
90
+ field: prop_types_1.default.oneOfType([
91
+ prop_types_1.default.shape({
92
+ href: prop_types_1.default.oneOfType([prop_types_1.default.string.isRequired, prop_types_1.default.oneOf([null]).isRequired]),
93
+ }),
94
+ prop_types_1.default.shape({
95
+ value: prop_types_1.default.object,
96
+ }),
97
+ ]).isRequired,
98
+ editable: prop_types_1.default.bool,
99
+ showLinkTextWithChildrenPresent: prop_types_1.default.bool,
100
+ emptyFieldEditingComponent: prop_types_1.default.oneOfType([
101
+ prop_types_1.default.object,
102
+ prop_types_1.default.func,
103
+ ]),
104
+ };
105
+ exports.Link.propTypes = exports.LinkPropTypes;
106
+ exports.Link.displayName = 'Link';
@@ -0,0 +1,34 @@
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.MissingComponent = void 0;
7
+ const prop_types_1 = __importDefault(require("prop-types"));
8
+ const react_1 = __importDefault(require("react"));
9
+ const MissingComponent = (props) => {
10
+ const componentName = props.rendering && props.rendering.componentName
11
+ ? props.rendering.componentName
12
+ : 'Unnamed Component';
13
+ // error override would mean component is not unimplemented
14
+ !props.errorOverride &&
15
+ console.log(`Component props for unimplemented '${componentName}' component`, props);
16
+ const errorMessage = props.errorOverride ||
17
+ 'JSS component is missing React implementation. See the developer console for more information.';
18
+ return (react_1.default.createElement("div", { style: {
19
+ background: 'darkorange',
20
+ outline: '5px solid orange',
21
+ padding: '10px',
22
+ color: 'white',
23
+ maxWidth: '500px',
24
+ } },
25
+ react_1.default.createElement("h2", null, componentName),
26
+ react_1.default.createElement("p", null, errorMessage)));
27
+ };
28
+ exports.MissingComponent = MissingComponent;
29
+ exports.MissingComponent.propTypes = {
30
+ rendering: prop_types_1.default.shape({
31
+ componentName: prop_types_1.default.string,
32
+ }),
33
+ };
34
+ exports.MissingComponent.displayName = 'MissingComponent';