@sitecore-jss/sitecore-jss-nextjs 22.1.0-canary.41 → 22.1.0-canary.42

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.
@@ -45,13 +45,17 @@ const sitecore_jss_react_1 = require("@sitecore-jss/sitecore-jss-react");
45
45
  exports.Link = (0, react_1.forwardRef)((props, ref) => {
46
46
  const { field, editable = true, children, internalLinkMatcher = /^\//g, showLinkTextWithChildrenPresent } = props, htmlLinkProps = __rest(props, ["field", "editable", "children", "internalLinkMatcher", "showLinkTextWithChildrenPresent"]);
47
47
  if (!field ||
48
- (!field.editable && !field.value && !field.href)) {
48
+ (!field.editable &&
49
+ !field.value &&
50
+ !field.href &&
51
+ !field.metadata)) {
49
52
  return null;
50
53
  }
51
54
  const value = (field.href
52
55
  ? field
53
56
  : field.value);
54
- const { href, querystring, anchor } = value;
57
+ // fallback to {} if value is undefined; could happen if field is LinkFieldValue, href is empty in metadata mode
58
+ const { href, querystring, anchor } = value || {};
55
59
  const isEditing = editable && (field.editable || field.metadata);
56
60
  if (href && !isEditing) {
57
61
  const text = showLinkTextWithChildrenPresent || !children ? value.text || value.href : null;
@@ -20,7 +20,10 @@ const prop_types_1 = __importDefault(require("prop-types"));
20
20
  const react_1 = __importDefault(require("react"));
21
21
  const sitecore_jss_react_1 = require("@sitecore-jss/sitecore-jss-react");
22
22
  const image_1 = __importDefault(require("next/image"));
23
- exports.NextImage = (0, sitecore_jss_react_1.withFieldMetadata)((_a) => {
23
+ const sitecore_jss_react_2 = require("@sitecore-jss/sitecore-jss-react");
24
+ const sitecore_jss_react_3 = require("@sitecore-jss/sitecore-jss-react");
25
+ const layout_1 = require("@sitecore-jss/sitecore-jss/layout");
26
+ exports.NextImage = (0, sitecore_jss_react_1.withFieldMetadata)((0, sitecore_jss_react_2.withEmptyFieldEditingComponent)((_a) => {
24
27
  var { editable = true, imageParams, field, mediaUrlPrefix, fill, priority } = _a, otherProps = __rest(_a, ["editable", "imageParams", "field", "mediaUrlPrefix", "fill", "priority"]);
25
28
  // next handles src and we use a custom loader,
26
29
  // throw error if these are present
@@ -28,8 +31,7 @@ exports.NextImage = (0, sitecore_jss_react_1.withFieldMetadata)((_a) => {
28
31
  throw new Error('Detected src prop. If you wish to use src, use next/image directly.');
29
32
  }
30
33
  const dynamicMedia = field;
31
- if (!field ||
32
- (!dynamicMedia.editable && !dynamicMedia.value && !dynamicMedia.src)) {
34
+ if (!field || (!dynamicMedia.editable && (0, layout_1.isFieldValueEmpty)(dynamicMedia))) {
33
35
  return null;
34
36
  }
35
37
  const imageField = dynamicMedia;
@@ -59,7 +61,7 @@ exports.NextImage = (0, sitecore_jss_react_1.withFieldMetadata)((_a) => {
59
61
  return react_1.default.createElement(image_1.default, Object.assign({ alt: "" }, imageProps));
60
62
  }
61
63
  return null; // we can't handle the truth
62
- });
64
+ }, { defaultEmptyFieldEditingComponent: sitecore_jss_react_3.DefaultEmptyFieldEditingComponentImage }));
63
65
  exports.NextImage.propTypes = {
64
66
  field: prop_types_1.default.oneOfType([
65
67
  prop_types_1.default.shape({
@@ -73,5 +75,9 @@ exports.NextImage.propTypes = {
73
75
  editable: prop_types_1.default.bool,
74
76
  mediaUrlPrefix: prop_types_1.default.instanceOf(RegExp),
75
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
+ ]),
76
82
  };
77
83
  exports.NextImage.displayName = 'NextImage';
@@ -46,7 +46,7 @@ const prefetched = {};
46
46
  const RichText = (props) => {
47
47
  const { internalLinksSelector = 'a[href^="/"]', prefetchLinks = true, editable = true } = props, rest = __rest(props, ["internalLinksSelector", "prefetchLinks", "editable"]);
48
48
  const hasText = props.field && props.field.value;
49
- const isEditing = editable && props.field && props.field.editable;
49
+ const isEditing = editable && props.field && (props.field.editable || props.field.metadata);
50
50
  const router = (0, router_1.useRouter)();
51
51
  const richTextRef = (0, react_1.useRef)(null);
52
52
  (0, react_1.useEffect)(() => {
@@ -78,7 +78,7 @@ const RichText = (props) => {
78
78
  link.addEventListener('click', routeHandler, false);
79
79
  });
80
80
  };
81
- return react_1.default.createElement(sitecore_jss_react_1.RichText, Object.assign({ ref: richTextRef }, rest));
81
+ return react_1.default.createElement(sitecore_jss_react_1.RichText, Object.assign({ ref: richTextRef, editable: editable }, rest));
82
82
  };
83
83
  exports.RichText = RichText;
84
84
  exports.RichText.propTypes = Object.assign({ internalLinksSelector: prop_types_1.default.string }, sitecore_jss_react_1.RichTextPropTypes);
package/dist/cjs/index.js CHANGED
@@ -24,7 +24,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.fetchFEaaSComponentServerProps = exports.FEaaSComponent = exports.EditFrame = exports.DateField = exports.Text = exports.Image = exports.Context = exports.ComponentBuilder = exports.BYOCWrapper = exports.FEaaSWrapper = exports.NextImage = exports.Placeholder = exports.RichText = exports.Link = exports.useComponentProps = exports.ComponentPropsContext = exports.ComponentPropsReactContext = exports.normalizeSiteRewrite = exports.getSiteRewriteData = exports.getSiteRewrite = exports.GraphQLSiteInfoService = exports.SiteResolver = exports.GraphQLRobotsService = exports.GraphQLErrorPagesService = exports.GraphQLSitemapXmlService = exports.MultisiteGraphQLSitemapService = exports.GraphQLSitemapService = exports.DisconnectedSitemapService = exports.ComponentPropsService = exports.CdpHelper = exports.normalizePersonalizedRewrite = exports.getPersonalizedRewriteData = exports.getPersonalizedRewrite = exports.personalizeLayout = exports.RestDictionaryService = exports.GraphQLDictionaryService = exports.trackingApi = exports.mediaApi = exports.EditMode = exports.getContentStylesheetLink = exports.getFieldValue = exports.getChildPlaceholder = exports.RestLayoutService = exports.GraphQLLayoutService = exports.LayoutServicePageState = exports.debug = exports.enableDebug = exports.NativeDataFetcher = exports.AxiosDataFetcher = exports.constants = void 0;
27
- exports.EditingScripts = exports.withFieldMetadata = exports.withDatasourceCheck = exports.withPlaceholder = exports.withEditorChromes = exports.useSitecoreContext = exports.withSitecoreContext = exports.SitecoreContextReactContext = exports.SitecoreContext = exports.VisitorIdentification = exports.File = exports.getComponentLibraryStylesheetLinks = exports.BYOCComponent = void 0;
27
+ exports.EditingScripts = exports.withEmptyFieldEditingComponent = exports.withFieldMetadata = exports.withDatasourceCheck = exports.withPlaceholder = exports.withEditorChromes = exports.useSitecoreContext = exports.withSitecoreContext = exports.SitecoreContextReactContext = exports.SitecoreContext = exports.VisitorIdentification = exports.DefaultEmptyFieldEditingComponentText = exports.DefaultEmptyFieldEditingComponentImage = exports.File = exports.getComponentLibraryStylesheetLinks = exports.BYOCComponent = void 0;
28
28
  var sitecore_jss_1 = require("@sitecore-jss/sitecore-jss");
29
29
  Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return sitecore_jss_1.constants; } });
30
30
  Object.defineProperty(exports, "AxiosDataFetcher", { enumerable: true, get: function () { return sitecore_jss_1.AxiosDataFetcher; } });
@@ -99,6 +99,8 @@ Object.defineProperty(exports, "fetchFEaaSComponentServerProps", { enumerable: t
99
99
  Object.defineProperty(exports, "BYOCComponent", { enumerable: true, get: function () { return sitecore_jss_react_1.BYOCComponent; } });
100
100
  Object.defineProperty(exports, "getComponentLibraryStylesheetLinks", { enumerable: true, get: function () { return sitecore_jss_react_1.getComponentLibraryStylesheetLinks; } });
101
101
  Object.defineProperty(exports, "File", { enumerable: true, get: function () { return sitecore_jss_react_1.File; } });
102
+ Object.defineProperty(exports, "DefaultEmptyFieldEditingComponentImage", { enumerable: true, get: function () { return sitecore_jss_react_1.DefaultEmptyFieldEditingComponentImage; } });
103
+ Object.defineProperty(exports, "DefaultEmptyFieldEditingComponentText", { enumerable: true, get: function () { return sitecore_jss_react_1.DefaultEmptyFieldEditingComponentText; } });
102
104
  Object.defineProperty(exports, "VisitorIdentification", { enumerable: true, get: function () { return sitecore_jss_react_1.VisitorIdentification; } });
103
105
  Object.defineProperty(exports, "SitecoreContext", { enumerable: true, get: function () { return sitecore_jss_react_1.SitecoreContext; } });
104
106
  Object.defineProperty(exports, "SitecoreContextReactContext", { enumerable: true, get: function () { return sitecore_jss_react_1.SitecoreContextReactContext; } });
@@ -108,4 +110,5 @@ Object.defineProperty(exports, "withEditorChromes", { enumerable: true, get: fun
108
110
  Object.defineProperty(exports, "withPlaceholder", { enumerable: true, get: function () { return sitecore_jss_react_1.withPlaceholder; } });
109
111
  Object.defineProperty(exports, "withDatasourceCheck", { enumerable: true, get: function () { return sitecore_jss_react_1.withDatasourceCheck; } });
110
112
  Object.defineProperty(exports, "withFieldMetadata", { enumerable: true, get: function () { return sitecore_jss_react_1.withFieldMetadata; } });
113
+ Object.defineProperty(exports, "withEmptyFieldEditingComponent", { enumerable: true, get: function () { return sitecore_jss_react_1.withEmptyFieldEditingComponent; } });
111
114
  Object.defineProperty(exports, "EditingScripts", { enumerable: true, get: function () { return sitecore_jss_react_1.EditingScripts; } });
@@ -16,13 +16,17 @@ import { Link as ReactLink, LinkPropTypes, } from '@sitecore-jss/sitecore-jss-re
16
16
  export const Link = forwardRef((props, ref) => {
17
17
  const { field, editable = true, children, internalLinkMatcher = /^\//g, showLinkTextWithChildrenPresent } = props, htmlLinkProps = __rest(props, ["field", "editable", "children", "internalLinkMatcher", "showLinkTextWithChildrenPresent"]);
18
18
  if (!field ||
19
- (!field.editable && !field.value && !field.href)) {
19
+ (!field.editable &&
20
+ !field.value &&
21
+ !field.href &&
22
+ !field.metadata)) {
20
23
  return null;
21
24
  }
22
25
  const value = (field.href
23
26
  ? field
24
27
  : field.value);
25
- const { href, querystring, anchor } = value;
28
+ // fallback to {} if value is undefined; could happen if field is LinkFieldValue, href is empty in metadata mode
29
+ const { href, querystring, anchor } = value || {};
26
30
  const isEditing = editable && (field.editable || field.metadata);
27
31
  if (href && !isEditing) {
28
32
  const text = showLinkTextWithChildrenPresent || !children ? value.text || value.href : null;
@@ -14,7 +14,10 @@ import PropTypes from 'prop-types';
14
14
  import React from 'react';
15
15
  import { getEEMarkup, withFieldMetadata, } from '@sitecore-jss/sitecore-jss-react';
16
16
  import Image from 'next/image';
17
- export const NextImage = withFieldMetadata((_a) => {
17
+ import { withEmptyFieldEditingComponent } from '@sitecore-jss/sitecore-jss-react';
18
+ import { DefaultEmptyFieldEditingComponentImage } from '@sitecore-jss/sitecore-jss-react';
19
+ import { isFieldValueEmpty } from '@sitecore-jss/sitecore-jss/layout';
20
+ export const NextImage = withFieldMetadata(withEmptyFieldEditingComponent((_a) => {
18
21
  var { editable = true, imageParams, field, mediaUrlPrefix, fill, priority } = _a, otherProps = __rest(_a, ["editable", "imageParams", "field", "mediaUrlPrefix", "fill", "priority"]);
19
22
  // next handles src and we use a custom loader,
20
23
  // throw error if these are present
@@ -22,8 +25,7 @@ export const NextImage = withFieldMetadata((_a) => {
22
25
  throw new Error('Detected src prop. If you wish to use src, use next/image directly.');
23
26
  }
24
27
  const dynamicMedia = field;
25
- if (!field ||
26
- (!dynamicMedia.editable && !dynamicMedia.value && !dynamicMedia.src)) {
28
+ if (!field || (!dynamicMedia.editable && isFieldValueEmpty(dynamicMedia))) {
27
29
  return null;
28
30
  }
29
31
  const imageField = dynamicMedia;
@@ -53,7 +55,7 @@ export const NextImage = withFieldMetadata((_a) => {
53
55
  return React.createElement(Image, Object.assign({ alt: "" }, imageProps));
54
56
  }
55
57
  return null; // we can't handle the truth
56
- });
58
+ }, { defaultEmptyFieldEditingComponent: DefaultEmptyFieldEditingComponentImage }));
57
59
  NextImage.propTypes = {
58
60
  field: PropTypes.oneOfType([
59
61
  PropTypes.shape({
@@ -67,5 +69,9 @@ NextImage.propTypes = {
67
69
  editable: PropTypes.bool,
68
70
  mediaUrlPrefix: PropTypes.instanceOf(RegExp),
69
71
  imageParams: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.number.isRequired, PropTypes.string.isRequired]).isRequired),
72
+ emptyFieldEditingComponent: PropTypes.oneOfType([
73
+ PropTypes.object,
74
+ PropTypes.func,
75
+ ]),
70
76
  };
71
77
  NextImage.displayName = 'NextImage';
@@ -17,7 +17,7 @@ const prefetched = {};
17
17
  export const RichText = (props) => {
18
18
  const { internalLinksSelector = 'a[href^="/"]', prefetchLinks = true, editable = true } = props, rest = __rest(props, ["internalLinksSelector", "prefetchLinks", "editable"]);
19
19
  const hasText = props.field && props.field.value;
20
- const isEditing = editable && props.field && props.field.editable;
20
+ const isEditing = editable && props.field && (props.field.editable || props.field.metadata);
21
21
  const router = useRouter();
22
22
  const richTextRef = useRef(null);
23
23
  useEffect(() => {
@@ -49,7 +49,7 @@ export const RichText = (props) => {
49
49
  link.addEventListener('click', routeHandler, false);
50
50
  });
51
51
  };
52
- return React.createElement(ReactRichText, Object.assign({ ref: richTextRef }, rest));
52
+ return React.createElement(ReactRichText, Object.assign({ ref: richTextRef, editable: editable }, rest));
53
53
  };
54
54
  RichText.propTypes = Object.assign({ internalLinksSelector: PropTypes.string }, RichTextPropTypes);
55
55
  RichText.displayName = 'NextRichText';
package/dist/esm/index.js CHANGED
@@ -20,4 +20,4 @@ export { FEaaSWrapper };
20
20
  export { BYOCWrapper };
21
21
  export { ComponentBuilder } from './ComponentBuilder';
22
22
  export { Context } from './context';
23
- export { Image, Text, DateField, EditFrame, FEaaSComponent, fetchFEaaSComponentServerProps, BYOCComponent, getComponentLibraryStylesheetLinks, File, VisitorIdentification, SitecoreContext, SitecoreContextReactContext, withSitecoreContext, useSitecoreContext, withEditorChromes, withPlaceholder, withDatasourceCheck, withFieldMetadata, EditingScripts, } from '@sitecore-jss/sitecore-jss-react';
23
+ export { Image, Text, DateField, EditFrame, FEaaSComponent, fetchFEaaSComponentServerProps, BYOCComponent, getComponentLibraryStylesheetLinks, File, DefaultEmptyFieldEditingComponentImage, DefaultEmptyFieldEditingComponentText, VisitorIdentification, SitecoreContext, SitecoreContextReactContext, withSitecoreContext, useSitecoreContext, withEditorChromes, withPlaceholder, withDatasourceCheck, withFieldMetadata, withEmptyFieldEditingComponent, EditingScripts, } from '@sitecore-jss/sitecore-jss-react';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sitecore-jss/sitecore-jss-nextjs",
3
- "version": "22.1.0-canary.41",
3
+ "version": "22.1.0-canary.42",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "sideEffects": false,
@@ -72,9 +72,9 @@
72
72
  "react-dom": "^18.2.0"
73
73
  },
74
74
  "dependencies": {
75
- "@sitecore-jss/sitecore-jss": "^22.1.0-canary.41",
76
- "@sitecore-jss/sitecore-jss-dev-tools": "^22.1.0-canary.41",
77
- "@sitecore-jss/sitecore-jss-react": "^22.1.0-canary.41",
75
+ "@sitecore-jss/sitecore-jss": "^22.1.0-canary.42",
76
+ "@sitecore-jss/sitecore-jss-dev-tools": "^22.1.0-canary.42",
77
+ "@sitecore-jss/sitecore-jss-react": "^22.1.0-canary.42",
78
78
  "@vercel/kv": "^0.2.1",
79
79
  "prop-types": "^15.8.1",
80
80
  "regex-parser": "^2.2.11",
@@ -82,7 +82,7 @@
82
82
  },
83
83
  "description": "",
84
84
  "types": "types/index.d.ts",
85
- "gitHead": "4125328e86f3325f6ad9bce2c36da0fd904642bd",
85
+ "gitHead": "1747f39006e5d311aa26c0251c178f11b2281913",
86
86
  "files": [
87
87
  "dist",
88
88
  "types",
@@ -1,3 +1,5 @@
1
+ /// <reference types="@types/react" />
2
+ import React from 'react';
1
3
  import PropTypes from 'prop-types';
2
4
  import { RichTextProps as ReactRichTextProps } from '@sitecore-jss/sitecore-jss-react';
3
5
  export type RichTextProps = ReactRichTextProps & {
@@ -25,6 +27,7 @@ export declare const RichText: {
25
27
  }>>;
26
28
  tag: PropTypes.Requireable<string>;
27
29
  editable: PropTypes.Requireable<boolean>;
30
+ emptyFieldEditingComponent: PropTypes.Requireable<NonNullable<React.ComponentClass<unknown, any> | React.FC<unknown>>>;
28
31
  internalLinksSelector: PropTypes.Requireable<string>;
29
32
  };
30
33
  displayName: string;
package/types/index.d.ts CHANGED
@@ -23,4 +23,4 @@ export { FEaaSWrapper };
23
23
  export { BYOCWrapper };
24
24
  export { ComponentBuilder, ComponentBuilderConfig } from './ComponentBuilder';
25
25
  export { Context, ContextConfig, SDK } from './context';
26
- export { ComponentFactory, Image, ImageField, ImageFieldValue, ImageProps, LinkField, LinkFieldValue, Text, TextField, DateField, EditFrame, FEaaSComponent, FEaaSComponentProps, FEaaSComponentParams, fetchFEaaSComponentServerProps, BYOCComponentParams, BYOCComponent, BYOCComponentProps, getComponentLibraryStylesheetLinks, File, FileField, RichTextField, VisitorIdentification, PlaceholderComponentProps, SitecoreContext, SitecoreContextState, SitecoreContextValue, SitecoreContextReactContext, withSitecoreContext, useSitecoreContext, withEditorChromes, withPlaceholder, withDatasourceCheck, ImageSizeParameters, WithSitecoreContextOptions, WithSitecoreContextProps, WithSitecoreContextHocProps, withFieldMetadata, EditingScripts, } from '@sitecore-jss/sitecore-jss-react';
26
+ export { ComponentFactory, Image, ImageField, ImageFieldValue, ImageProps, LinkField, LinkFieldValue, Text, TextField, DateField, EditFrame, FEaaSComponent, FEaaSComponentProps, FEaaSComponentParams, fetchFEaaSComponentServerProps, BYOCComponentParams, BYOCComponent, BYOCComponentProps, getComponentLibraryStylesheetLinks, File, FileField, RichTextField, DefaultEmptyFieldEditingComponentImage, DefaultEmptyFieldEditingComponentText, VisitorIdentification, PlaceholderComponentProps, SitecoreContext, SitecoreContextState, SitecoreContextValue, SitecoreContextReactContext, withSitecoreContext, useSitecoreContext, withEditorChromes, withPlaceholder, withDatasourceCheck, ImageSizeParameters, WithSitecoreContextOptions, WithSitecoreContextProps, WithSitecoreContextHocProps, withFieldMetadata, withEmptyFieldEditingComponent, EditingScripts, } from '@sitecore-jss/sitecore-jss-react';