@sitecore-jss/sitecore-jss-react 22.0.0-canary.2 → 22.0.0-canary.20

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.
@@ -22,72 +22,89 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
25
37
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.FEaaSComponent = exports.FEAAS_MODULE_SRC = exports.FEAAS_COMPONENT_RENDERING_NAME = void 0;
27
- /* eslint-disable react/prop-types */
28
- const react_1 = __importStar(require("react"));
38
+ exports.composeComponentEndpoint = exports.fetchFEaaSComponentServerProps = exports.FEaaSComponent = exports.FEAAS_COMPONENT_RENDERING_NAME = void 0;
39
+ const react_1 = __importDefault(require("react"));
40
+ const FEAAS = __importStar(require("@sitecore-feaas/clientside/react"));
29
41
  const layout_1 = require("@sitecore-jss/sitecore-jss/layout");
30
42
  exports.FEAAS_COMPONENT_RENDERING_NAME = 'FEaaSComponent';
31
- exports.FEAAS_MODULE_SRC = 'https://feaasstatic.blob.core.windows.net/packages/clientside/latest/browser/index.esm.js';
32
- const getDataFromFields = (fields) => {
33
- let data = {};
34
- data = Object.entries(fields).reduce((acc, [key]) => {
35
- acc[key] = (0, layout_1.getFieldValue)(fields, key);
36
- return acc;
37
- }, data);
38
- return data;
39
- };
40
- const FEaaSComponent = ({ params, fields }) => {
41
- if (!params ||
42
- !params.LibraryId ||
43
- !params.ComponentId ||
44
- !params.ComponentVersion ||
45
- !params.ComponentRevision ||
46
- !params.ComponentHostName) {
43
+ /**
44
+ * @param {FEaaSComponentProps} props component props
45
+ */
46
+ const FEaaSComponent = (props) => {
47
+ var _a, _b, _c, _d, _e, _f;
48
+ if ((!props.lastModified || !props.template) &&
49
+ (!props.params ||
50
+ !props.params.LibraryId ||
51
+ !props.params.ComponentId ||
52
+ !props.params.ComponentVersion ||
53
+ !props.params.ComponentRevision ||
54
+ !props.params.ComponentHostName)) {
47
55
  // Missing FEaaS component required props
48
56
  return null;
49
57
  }
50
- // Load script asynchronously on the page once, only if FEAAS component is used
51
- (0, react_1.useEffect)(() => {
52
- var _a;
53
- (_a = window.FEAASLoading) !== null && _a !== void 0 ? _a : (window.FEAASLoading = new Promise((resolve) => {
54
- const script = document.createElement('script');
55
- script.src = exports.FEAAS_MODULE_SRC;
56
- script.type = 'module';
57
- script.onload = resolve;
58
- document.head.appendChild(script);
59
- }));
60
- }, []);
61
- let data = '';
62
- if (params === null || params === void 0 ? void 0 : params.ComponentDataOverride) {
58
+ let data = null;
59
+ if ((_a = props.params) === null || _a === void 0 ? void 0 : _a.ComponentDataOverride) {
63
60
  // Use override data if provided
64
- data = params.ComponentDataOverride;
61
+ data = props.params.ComponentDataOverride;
65
62
  }
66
- else if (fields) {
63
+ else if (props.fields) {
67
64
  // Otherwise use datasource data (provided in fields)
68
65
  // FEaaS expects wrapping "_" as catch-all datasource template id
69
- data = JSON.stringify({ _: getDataFromFields(fields) });
70
- }
71
- const reqProps = {
72
- library: params.LibraryId,
73
- cdn: params.ComponentHostName,
74
- component: params.ComponentId,
75
- version: params.ComponentVersion,
76
- revision: params.ComponentRevision,
77
- data,
78
- };
79
- const optProps = {};
80
- if (params.ComponentInstanceId) {
81
- optProps.instance = params.ComponentInstanceId;
66
+ data = JSON.stringify({ _: getDataFromFields(props.fields) });
82
67
  }
83
- if (params.ComponentHTMLOverride) {
84
- optProps.dangerouslySetInnerHTML = { __html: params.ComponentHTMLOverride };
85
- }
86
- return (react_1.default.createElement(react_1.default.Fragment, null,
87
- react_1.default.createElement("link", { rel: "preload", as: "style", href: `${reqProps.cdn}/styles/${reqProps.library}/published.css` }),
88
- react_1.default.createElement("link", { rel: "preload", as: "fetch", href: `${reqProps.cdn}/components/${reqProps.library}/${reqProps.component}/${reqProps.version}/${reqProps.revision}.html` }),
89
- react_1.default.createElement("link", { rel: "preload", as: "script", href: exports.FEAAS_MODULE_SRC }),
90
- react_1.default.createElement("feaas-stylesheet", { library: reqProps.library, cdn: reqProps.cdn }),
91
- react_1.default.createElement("feaas-component", Object.assign({}, reqProps, optProps))));
68
+ // FEaaS control would still be hydrated by client
69
+ // we pass all the props as a workaround to avoid hydration error, until we convert all JSS components to server side
70
+ // this also allows component to fall back to full client-side rendering when template or src is empty
71
+ return (react_1.default.createElement(FEAAS.Component, { data: data, template: props.template || '', "last-modified": props.lastModified, cdn: (_b = props.params) === null || _b === void 0 ? void 0 : _b.ComponentHostName, library: (_c = props.params) === null || _c === void 0 ? void 0 : _c.LibraryId, version: (_d = props.params) === null || _d === void 0 ? void 0 : _d.ComponentVersion, component: (_e = props.params) === null || _e === void 0 ? void 0 : _e.ComponentId, revision: (_f = props.params) === null || _f === void 0 ? void 0 : _f.ComponentRevision }));
92
72
  };
93
73
  exports.FEaaSComponent = FEaaSComponent;
74
+ /**
75
+ * Fetches server component props required for server rendering, based on rendering params.
76
+ * Component endpoint will either be retrieved from params or from endpointOverride
77
+ * @param {FEaaSComponentParams} params component params
78
+ * @param {string} [endpointOverride] optional override for component endpoint
79
+ */
80
+ function fetchFEaaSComponentServerProps(params, endpointOverride) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ const src = endpointOverride || (0, exports.composeComponentEndpoint)(params);
83
+ const { template, lastModified } = yield FEAAS.fetchComponent(src);
84
+ return {
85
+ template,
86
+ lastModified,
87
+ };
88
+ });
89
+ }
90
+ exports.fetchFEaaSComponentServerProps = fetchFEaaSComponentServerProps;
91
+ const getDataFromFields = (fields) => {
92
+ let data = {};
93
+ data = Object.entries(fields).reduce((acc, [key]) => {
94
+ acc[key] = (0, layout_1.getFieldValue)(fields, key);
95
+ return acc;
96
+ }, data);
97
+ return data;
98
+ };
99
+ /**
100
+ * Build component endpoint URL from component's params
101
+ * @param {FEaaSComponentParams} params rendering parameters for FEAAS component
102
+ * @returns component endpoint URL
103
+ */
104
+ const composeComponentEndpoint = (params) => {
105
+ const hostname = params.ComponentHostName.startsWith('https://')
106
+ ? params.ComponentHostName
107
+ : `https://${params.ComponentHostName}`;
108
+ return `${hostname}/components/${params.LibraryId}/${params.ComponentId}/${params.ComponentVersion}/${params.ComponentRevision}`;
109
+ };
110
+ exports.composeComponentEndpoint = composeComponentEndpoint;
@@ -97,6 +97,9 @@ class PlaceholderCommon extends react_1.default.Component {
97
97
  if (componentRendering.componentName === HiddenRendering_1.HIDDEN_RENDERING_NAME) {
98
98
  component = hiddenRenderingComponent !== null && hiddenRenderingComponent !== void 0 ? hiddenRenderingComponent : HiddenRendering_1.HiddenRendering;
99
99
  }
100
+ else if (!componentRendering.componentName) {
101
+ component = () => react_1.default.createElement(react_1.default.Fragment, null);
102
+ }
100
103
  else {
101
104
  component = this.getComponentForRendering(componentRendering);
102
105
  }
package/dist/cjs/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EditFrame = exports.withDatasourceCheck = exports.withPlaceholder = exports.withEditorChromes = exports.useSitecoreContext = exports.withSitecoreContext = exports.SitecoreContextReactContext = exports.SitecoreContext = exports.VisitorIdentification = exports.File = exports.LinkPropTypes = exports.Link = exports.FEaaSComponent = exports.DateField = exports.Text = exports.RichTextPropTypes = exports.RichText = exports.getEEMarkup = exports.Image = exports.Placeholder = exports.mediaApi = exports.RestDictionaryService = exports.GraphQLDictionaryService = exports.trackingApi = exports.getFieldValue = exports.getChildPlaceholder = exports.RestLayoutService = exports.GraphQLLayoutService = exports.LayoutServicePageState = exports.DefaultEditFrameButtons = exports.DefaultEditFrameButton = exports.resetEditorChromes = exports.isEditorActive = exports.enableDebug = exports.constants = void 0;
3
+ exports.EditFrame = exports.withDatasourceCheck = exports.withPlaceholder = exports.withEditorChromes = exports.useSitecoreContext = exports.withSitecoreContext = exports.SitecoreContextReactContext = exports.SitecoreContext = exports.VisitorIdentification = exports.File = exports.LinkPropTypes = exports.Link = exports.fetchFEaaSComponentServerProps = exports.FEaaSComponent = exports.DateField = exports.Text = exports.RichTextPropTypes = exports.RichText = exports.getEEMarkup = exports.Image = exports.Placeholder = exports.getFEAASLibraryStylesheetLinks = exports.mediaApi = exports.RestDictionaryService = exports.GraphQLDictionaryService = exports.trackingApi = exports.getFieldValue = exports.getChildPlaceholder = exports.RestLayoutService = exports.GraphQLLayoutService = exports.LayoutServicePageState = exports.DefaultEditFrameButtons = exports.DefaultEditFrameButton = exports.resetEditorChromes = exports.isEditorActive = exports.enableDebug = exports.constants = void 0;
4
4
  var sitecore_jss_1 = require("@sitecore-jss/sitecore-jss");
5
5
  Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return sitecore_jss_1.constants; } });
6
6
  Object.defineProperty(exports, "enableDebug", { enumerable: true, get: function () { return sitecore_jss_1.enableDebug; } });
@@ -22,6 +22,8 @@ Object.defineProperty(exports, "GraphQLDictionaryService", { enumerable: true, g
22
22
  Object.defineProperty(exports, "RestDictionaryService", { enumerable: true, get: function () { return i18n_1.RestDictionaryService; } });
23
23
  var media_1 = require("@sitecore-jss/sitecore-jss/media");
24
24
  Object.defineProperty(exports, "mediaApi", { enumerable: true, get: function () { return media_1.mediaApi; } });
25
+ var feaas_1 = require("@sitecore-jss/sitecore-jss/feaas");
26
+ Object.defineProperty(exports, "getFEAASLibraryStylesheetLinks", { enumerable: true, get: function () { return feaas_1.getFEAASLibraryStylesheetLinks; } });
25
27
  var Placeholder_1 = require("./components/Placeholder");
26
28
  Object.defineProperty(exports, "Placeholder", { enumerable: true, get: function () { return Placeholder_1.Placeholder; } });
27
29
  var Image_1 = require("./components/Image");
@@ -36,6 +38,7 @@ var Date_1 = require("./components/Date");
36
38
  Object.defineProperty(exports, "DateField", { enumerable: true, get: function () { return Date_1.DateField; } });
37
39
  var FEaaSComponent_1 = require("./components/FEaaSComponent");
38
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; } });
39
42
  var Link_1 = require("./components/Link");
40
43
  Object.defineProperty(exports, "Link", { enumerable: true, get: function () { return Link_1.Link; } });
41
44
  Object.defineProperty(exports, "LinkPropTypes", { enumerable: true, get: function () { return Link_1.LinkPropTypes; } });
@@ -1,66 +1,78 @@
1
- /* eslint-disable react/prop-types */
2
- import React, { useEffect } from 'react';
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 * as FEAAS from '@sitecore-feaas/clientside/react';
3
12
  import { getFieldValue } from '@sitecore-jss/sitecore-jss/layout';
4
13
  export const FEAAS_COMPONENT_RENDERING_NAME = 'FEaaSComponent';
5
- export const FEAAS_MODULE_SRC = 'https://feaasstatic.blob.core.windows.net/packages/clientside/latest/browser/index.esm.js';
6
- const getDataFromFields = (fields) => {
7
- let data = {};
8
- data = Object.entries(fields).reduce((acc, [key]) => {
9
- acc[key] = getFieldValue(fields, key);
10
- return acc;
11
- }, data);
12
- return data;
13
- };
14
- export const FEaaSComponent = ({ params, fields }) => {
15
- if (!params ||
16
- !params.LibraryId ||
17
- !params.ComponentId ||
18
- !params.ComponentVersion ||
19
- !params.ComponentRevision ||
20
- !params.ComponentHostName) {
14
+ /**
15
+ * @param {FEaaSComponentProps} props component props
16
+ */
17
+ export const FEaaSComponent = (props) => {
18
+ var _a, _b, _c, _d, _e, _f;
19
+ if ((!props.lastModified || !props.template) &&
20
+ (!props.params ||
21
+ !props.params.LibraryId ||
22
+ !props.params.ComponentId ||
23
+ !props.params.ComponentVersion ||
24
+ !props.params.ComponentRevision ||
25
+ !props.params.ComponentHostName)) {
21
26
  // Missing FEaaS component required props
22
27
  return null;
23
28
  }
24
- // Load script asynchronously on the page once, only if FEAAS component is used
25
- useEffect(() => {
26
- var _a;
27
- (_a = window.FEAASLoading) !== null && _a !== void 0 ? _a : (window.FEAASLoading = new Promise((resolve) => {
28
- const script = document.createElement('script');
29
- script.src = FEAAS_MODULE_SRC;
30
- script.type = 'module';
31
- script.onload = resolve;
32
- document.head.appendChild(script);
33
- }));
34
- }, []);
35
- let data = '';
36
- if (params === null || params === void 0 ? void 0 : params.ComponentDataOverride) {
29
+ let data = null;
30
+ if ((_a = props.params) === null || _a === void 0 ? void 0 : _a.ComponentDataOverride) {
37
31
  // Use override data if provided
38
- data = params.ComponentDataOverride;
32
+ data = props.params.ComponentDataOverride;
39
33
  }
40
- else if (fields) {
34
+ else if (props.fields) {
41
35
  // Otherwise use datasource data (provided in fields)
42
36
  // FEaaS expects wrapping "_" as catch-all datasource template id
43
- data = JSON.stringify({ _: getDataFromFields(fields) });
44
- }
45
- const reqProps = {
46
- library: params.LibraryId,
47
- cdn: params.ComponentHostName,
48
- component: params.ComponentId,
49
- version: params.ComponentVersion,
50
- revision: params.ComponentRevision,
51
- data,
52
- };
53
- const optProps = {};
54
- if (params.ComponentInstanceId) {
55
- optProps.instance = params.ComponentInstanceId;
37
+ data = JSON.stringify({ _: getDataFromFields(props.fields) });
56
38
  }
57
- if (params.ComponentHTMLOverride) {
58
- optProps.dangerouslySetInnerHTML = { __html: params.ComponentHTMLOverride };
59
- }
60
- return (React.createElement(React.Fragment, null,
61
- React.createElement("link", { rel: "preload", as: "style", href: `${reqProps.cdn}/styles/${reqProps.library}/published.css` }),
62
- React.createElement("link", { rel: "preload", as: "fetch", href: `${reqProps.cdn}/components/${reqProps.library}/${reqProps.component}/${reqProps.version}/${reqProps.revision}.html` }),
63
- React.createElement("link", { rel: "preload", as: "script", href: FEAAS_MODULE_SRC }),
64
- React.createElement("feaas-stylesheet", { library: reqProps.library, cdn: reqProps.cdn }),
65
- React.createElement("feaas-component", Object.assign({}, reqProps, optProps))));
39
+ // FEaaS control would still be hydrated by client
40
+ // we pass all the props as a workaround to avoid hydration error, until we convert all JSS components to server side
41
+ // this also allows component to fall back to full client-side rendering when template or src is empty
42
+ return (React.createElement(FEAAS.Component, { data: data, template: props.template || '', "last-modified": props.lastModified, cdn: (_b = props.params) === null || _b === void 0 ? void 0 : _b.ComponentHostName, library: (_c = props.params) === null || _c === void 0 ? void 0 : _c.LibraryId, version: (_d = props.params) === null || _d === void 0 ? void 0 : _d.ComponentVersion, component: (_e = props.params) === null || _e === void 0 ? void 0 : _e.ComponentId, revision: (_f = props.params) === null || _f === void 0 ? void 0 : _f.ComponentRevision }));
43
+ };
44
+ /**
45
+ * Fetches server component props required for server rendering, based on rendering params.
46
+ * Component endpoint will either be retrieved from params or from endpointOverride
47
+ * @param {FEaaSComponentParams} params component params
48
+ * @param {string} [endpointOverride] optional override for component endpoint
49
+ */
50
+ export function fetchFEaaSComponentServerProps(params, endpointOverride) {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ const src = endpointOverride || composeComponentEndpoint(params);
53
+ const { template, lastModified } = yield FEAAS.fetchComponent(src);
54
+ return {
55
+ template,
56
+ lastModified,
57
+ };
58
+ });
59
+ }
60
+ const getDataFromFields = (fields) => {
61
+ let data = {};
62
+ data = Object.entries(fields).reduce((acc, [key]) => {
63
+ acc[key] = getFieldValue(fields, key);
64
+ return acc;
65
+ }, data);
66
+ return data;
67
+ };
68
+ /**
69
+ * Build component endpoint URL from component's params
70
+ * @param {FEaaSComponentParams} params rendering parameters for FEAAS component
71
+ * @returns component endpoint URL
72
+ */
73
+ export const composeComponentEndpoint = (params) => {
74
+ const hostname = params.ComponentHostName.startsWith('https://')
75
+ ? params.ComponentHostName
76
+ : `https://${params.ComponentHostName}`;
77
+ return `${hostname}/components/${params.LibraryId}/${params.ComponentId}/${params.ComponentVersion}/${params.ComponentRevision}`;
66
78
  };
@@ -91,6 +91,9 @@ export class PlaceholderCommon extends React.Component {
91
91
  if (componentRendering.componentName === HIDDEN_RENDERING_NAME) {
92
92
  component = hiddenRenderingComponent !== null && hiddenRenderingComponent !== void 0 ? hiddenRenderingComponent : HiddenRendering;
93
93
  }
94
+ else if (!componentRendering.componentName) {
95
+ component = () => React.createElement(React.Fragment, null);
96
+ }
94
97
  else {
95
98
  component = this.getComponentForRendering(componentRendering);
96
99
  }
package/dist/esm/index.js CHANGED
@@ -4,12 +4,13 @@ export { LayoutServicePageState, GraphQLLayoutService, RestLayoutService, getChi
4
4
  export { trackingApi, } from '@sitecore-jss/sitecore-jss/tracking';
5
5
  export { GraphQLDictionaryService, RestDictionaryService, } from '@sitecore-jss/sitecore-jss/i18n';
6
6
  export { mediaApi } from '@sitecore-jss/sitecore-jss/media';
7
+ export { getFEAASLibraryStylesheetLinks } from '@sitecore-jss/sitecore-jss/feaas';
7
8
  export { Placeholder } from './components/Placeholder';
8
9
  export { Image, getEEMarkup, } from './components/Image';
9
10
  export { RichText, RichTextPropTypes } from './components/RichText';
10
11
  export { Text } from './components/Text';
11
12
  export { DateField } from './components/Date';
12
- export { FEaaSComponent } from './components/FEaaSComponent';
13
+ export { FEaaSComponent, fetchFEaaSComponentServerProps, } from './components/FEaaSComponent';
13
14
  export { Link, LinkPropTypes } from './components/Link';
14
15
  export { File } from './components/File';
15
16
  export { VisitorIdentification } from './components/VisitorIdentification';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sitecore-jss/sitecore-jss-react",
3
- "version": "22.0.0-canary.2",
3
+ "version": "22.0.0-canary.20",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "sideEffects": false,
@@ -27,7 +27,6 @@
27
27
  "url": "https://github.com/sitecore/jss/issues"
28
28
  },
29
29
  "devDependencies": {
30
- "@sitecore-feaas/clientside": "^0.1.24",
31
30
  "@types/chai": "^4.3.4",
32
31
  "@types/chai-string": "^1.4.2",
33
32
  "@types/deep-equal": "^1.0.1",
@@ -48,7 +47,7 @@
48
47
  "eslint": "^8.28.0",
49
48
  "eslint-plugin-react": "^7.31.11",
50
49
  "jsdom": "^20.0.3",
51
- "mocha": "^10.1.0",
50
+ "mocha": "^10.2.0",
52
51
  "nyc": "^15.1.0",
53
52
  "react": "^18.2.0",
54
53
  "react-dom": "^18.2.0",
@@ -62,7 +61,8 @@
62
61
  "react-dom": "^18.2.0"
63
62
  },
64
63
  "dependencies": {
65
- "@sitecore-jss/sitecore-jss": "^22.0.0-canary.2",
64
+ "@sitecore-feaas/clientside": "^0.1.48",
65
+ "@sitecore-jss/sitecore-jss": "^22.0.0-canary.20",
66
66
  "deep-equal": "^2.1.0",
67
67
  "html-react-parser": "^3.0.4",
68
68
  "prop-types": "^15.8.1",
@@ -70,7 +70,7 @@
70
70
  },
71
71
  "description": "",
72
72
  "types": "types/index.d.ts",
73
- "gitHead": "d2176af0f8647dcfc887d5cbf515d56791860e24",
73
+ "gitHead": "5fac4fc4727e1fa1a5a0de24b8fc561150e62ff4",
74
74
  "files": [
75
75
  "dist",
76
76
  "types"
@@ -1,18 +1,63 @@
1
- import { ComponentParams, ComponentFields } from '@sitecore-jss/sitecore-jss/layout';
1
+ import { ComponentFields } from '@sitecore-jss/sitecore-jss/layout';
2
2
  export declare const FEAAS_COMPONENT_RENDERING_NAME = "FEaaSComponent";
3
- export declare const FEAAS_MODULE_SRC = "https://feaasstatic.blob.core.windows.net/packages/clientside/latest/browser/index.esm.js";
4
- export type FEaaSComponentParams = ComponentParams & {
3
+ /**
4
+ * Params from a Sitecore FEaaS rendering
5
+ */
6
+ export type FEaaSComponentParams = {
5
7
  LibraryId?: string;
6
8
  ComponentId?: string;
7
9
  ComponentVersion?: string;
8
- ComponentRevision?: string;
10
+ ComponentRevision?: number | 'staged' | 'published' | 'saved';
9
11
  ComponentHostName?: string;
10
12
  ComponentInstanceId?: string;
11
13
  ComponentDataOverride?: string;
12
14
  ComponentHTMLOverride?: string;
15
+ styles?: string;
16
+ RenderingIdentifier?: string;
13
17
  };
14
- export type FEaaSComponentProps = {
18
+ /**
19
+ * FEaaS props for server rendering.
20
+ */
21
+ type FEaaSComponentServerProps = {
22
+ /**
23
+ * HTML template for presentation rendered inside the component
24
+ */
25
+ template?: string;
26
+ /**
27
+ * the date component data was last modified
28
+ */
29
+ lastModified?: string;
30
+ };
31
+ /**
32
+ * FEaaS props for client side component. Should be used as fallback when server props are not provided.
33
+ * Would also be passed on server to avoid hydration issues
34
+ */
35
+ type FEaaSComponentClientProps = {
36
+ /**
37
+ * parameters from Sitecore's FEAAS component
38
+ */
15
39
  params?: FEaaSComponentParams;
40
+ /**
41
+ * field data from component's datasource
42
+ */
16
43
  fields?: ComponentFields;
17
44
  };
18
- export declare const FEaaSComponent: ({ params, fields }: FEaaSComponentProps) => JSX.Element;
45
+ export type FEaaSComponentProps = FEaaSComponentServerProps & FEaaSComponentClientProps;
46
+ /**
47
+ * @param {FEaaSComponentProps} props component props
48
+ */
49
+ export declare const FEaaSComponent: (props: FEaaSComponentProps) => JSX.Element;
50
+ /**
51
+ * Fetches server component props required for server rendering, based on rendering params.
52
+ * Component endpoint will either be retrieved from params or from endpointOverride
53
+ * @param {FEaaSComponentParams} params component params
54
+ * @param {string} [endpointOverride] optional override for component endpoint
55
+ */
56
+ export declare function fetchFEaaSComponentServerProps(params: FEaaSComponentParams, endpointOverride?: string): Promise<FEaaSComponentProps>;
57
+ /**
58
+ * Build component endpoint URL from component's params
59
+ * @param {FEaaSComponentParams} params rendering parameters for FEAAS component
60
+ * @returns component endpoint URL
61
+ */
62
+ export declare const composeComponentEndpoint: (params: FEaaSComponentParams) => string;
63
+ export {};
@@ -32,7 +32,7 @@ export type LinkProps = React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLA
32
32
  */
33
33
  showLinkTextWithChildrenPresent?: boolean;
34
34
  };
35
- export declare const Link: React.ForwardRefExoticComponent<Pick<LinkProps, "key" | "editable" | "field" | "showLinkTextWithChildrenPresent" | keyof React.AnchorHTMLAttributes<HTMLAnchorElement>> & React.RefAttributes<HTMLAnchorElement>>;
35
+ export declare const Link: React.ForwardRefExoticComponent<Pick<LinkProps, "key" | "field" | "editable" | "showLinkTextWithChildrenPresent" | keyof React.AnchorHTMLAttributes<HTMLAnchorElement>> & React.RefAttributes<HTMLAnchorElement>>;
36
36
  export declare const LinkPropTypes: {
37
37
  field: PropTypes.Validator<NonNullable<NonNullable<PropTypes.InferProps<{
38
38
  href: PropTypes.Requireable<any>;
package/types/index.d.ts CHANGED
@@ -4,13 +4,14 @@ export { LayoutService, LayoutServiceData, LayoutServicePageState, LayoutService
4
4
  export { trackingApi, TrackingRequestOptions, CampaignInstance, GoalInstance, OutcomeInstance, EventInstance, PageViewInstance, } from '@sitecore-jss/sitecore-jss/tracking';
5
5
  export { DictionaryPhrases, DictionaryService, GraphQLDictionaryService, RestDictionaryService, } from '@sitecore-jss/sitecore-jss/i18n';
6
6
  export { mediaApi } from '@sitecore-jss/sitecore-jss/media';
7
+ export { getFEAASLibraryStylesheetLinks } from '@sitecore-jss/sitecore-jss/feaas';
7
8
  export { ComponentFactory } from './components/sharedTypes';
8
9
  export { Placeholder, PlaceholderComponentProps } from './components/Placeholder';
9
10
  export { Image, ImageProps, ImageField, getEEMarkup, ImageFieldValue, ImageSizeParameters, } from './components/Image';
10
11
  export { RichText, RichTextProps, RichTextPropTypes, RichTextField } from './components/RichText';
11
12
  export { Text, TextField } from './components/Text';
12
13
  export { DateField, DateFieldProps } from './components/Date';
13
- export { FEaaSComponent, FEaaSComponentProps } from './components/FEaaSComponent';
14
+ export { FEaaSComponent, FEaaSComponentProps, FEaaSComponentParams, fetchFEaaSComponentServerProps, } from './components/FEaaSComponent';
14
15
  export { Link, LinkField, LinkFieldValue, LinkProps, LinkPropTypes } from './components/Link';
15
16
  export { File, FileField } from './components/File';
16
17
  export { VisitorIdentification } from './components/VisitorIdentification';