@sitecore-jss/sitecore-jss-react 22.9.1-canary.1 → 22.9.1-canary.2

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.
@@ -5,11 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.DefaultEmptyFieldEditingComponentImage = exports.DefaultEmptyFieldEditingComponentText = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
- const DefaultEmptyFieldEditingComponentText = () => {
9
- return react_1.default.createElement("span", null, "[No text in field]");
8
+ const DefaultEmptyFieldEditingComponentText = (props) => {
9
+ return react_1.default.createElement(props.tag || 'span', props, '[No text in field]');
10
10
  };
11
11
  exports.DefaultEmptyFieldEditingComponentText = DefaultEmptyFieldEditingComponentText;
12
- const DefaultEmptyFieldEditingComponentImage = () => {
12
+ const DefaultEmptyFieldEditingComponentImage = (props) => {
13
13
  const inlineStyles = {
14
14
  minWidth: '48px',
15
15
  minHeight: '48px',
@@ -17,6 +17,6 @@ const DefaultEmptyFieldEditingComponentImage = () => {
17
17
  maxHeight: '400px',
18
18
  cursor: 'pointer',
19
19
  };
20
- return (react_1.default.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 }));
20
+ return (react_1.default.createElement("img", Object.assign({}, props, { 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', style: inlineStyles, className: `scEmptyImage ${props.className || ''}` })));
21
21
  };
22
22
  exports.DefaultEmptyFieldEditingComponentImage = DefaultEmptyFieldEditingComponentImage;
@@ -36,21 +36,28 @@ function withEmptyFieldEditingComponent(FieldComponent, options) {
36
36
  var _a;
37
37
  const { editable = true } = props;
38
38
  if (((_a = props.field) === null || _a === void 0 ? void 0 : _a.metadata) && editable && (0, layout_1.isFieldValueEmpty)(props.field)) {
39
- return props.emptyFieldEditingComponent || options.defaultEmptyFieldEditingComponent;
39
+ const Component = props.emptyFieldEditingComponent || options.defaultEmptyFieldEditingComponent;
40
+ let resolvedProps = props;
41
+ // If no custom empty field editing component is provided, we can omit unnecessary props
42
+ // to do not insert them to html
43
+ if (!props.emptyFieldEditingComponent) {
44
+ resolvedProps = Object.assign(Object.assign({}, props), { editable: undefined, field: undefined });
45
+ }
46
+ return react_1.default.createElement(Component, Object.assign({}, resolvedProps));
40
47
  }
41
48
  return null;
42
49
  };
43
50
  if (options.isForwardRef) {
44
51
  // eslint-disable-next-line react/display-name
45
52
  return (0, react_1.forwardRef)((props, ref) => {
46
- const EmptyFieldEditingComponent = getEmptyFieldEditingComponent(props);
47
- 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 })))));
53
+ const emptyFieldEditingComponent = getEmptyFieldEditingComponent(props);
54
+ return (emptyFieldEditingComponent || (react_1.default.createElement(FieldComponent, Object.assign({}, props, { ref: ref }))));
48
55
  });
49
56
  }
50
57
  // eslint-disable-next-line react/display-name
51
58
  return (props) => {
52
- const EmptyFieldEditingComponent = getEmptyFieldEditingComponent(props);
53
- 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)))));
59
+ const emptyFieldEditingComponent = getEmptyFieldEditingComponent(props);
60
+ return emptyFieldEditingComponent || react_1.default.createElement(FieldComponent, Object.assign({}, props));
54
61
  };
55
62
  }
56
63
  exports.withEmptyFieldEditingComponent = withEmptyFieldEditingComponent;
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
- export const DefaultEmptyFieldEditingComponentText = () => {
3
- return React.createElement("span", null, "[No text in field]");
2
+ export const DefaultEmptyFieldEditingComponentText = (props) => {
3
+ return React.createElement(props.tag || 'span', props, '[No text in field]');
4
4
  };
5
- export const DefaultEmptyFieldEditingComponentImage = () => {
5
+ export const DefaultEmptyFieldEditingComponentImage = (props) => {
6
6
  const inlineStyles = {
7
7
  minWidth: '48px',
8
8
  minHeight: '48px',
@@ -10,5 +10,5 @@ export const DefaultEmptyFieldEditingComponentImage = () => {
10
10
  maxHeight: '400px',
11
11
  cursor: 'pointer',
12
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 }));
13
+ return (React.createElement("img", Object.assign({}, props, { 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', style: inlineStyles, className: `scEmptyImage ${props.className || ''}` })));
14
14
  };
@@ -10,20 +10,27 @@ export function withEmptyFieldEditingComponent(FieldComponent, options) {
10
10
  var _a;
11
11
  const { editable = true } = props;
12
12
  if (((_a = props.field) === null || _a === void 0 ? void 0 : _a.metadata) && editable && isFieldValueEmpty(props.field)) {
13
- return props.emptyFieldEditingComponent || options.defaultEmptyFieldEditingComponent;
13
+ const Component = props.emptyFieldEditingComponent || options.defaultEmptyFieldEditingComponent;
14
+ let resolvedProps = props;
15
+ // If no custom empty field editing component is provided, we can omit unnecessary props
16
+ // to do not insert them to html
17
+ if (!props.emptyFieldEditingComponent) {
18
+ resolvedProps = Object.assign(Object.assign({}, props), { editable: undefined, field: undefined });
19
+ }
20
+ return React.createElement(Component, Object.assign({}, resolvedProps));
14
21
  }
15
22
  return null;
16
23
  };
17
24
  if (options.isForwardRef) {
18
25
  // eslint-disable-next-line react/display-name
19
26
  return forwardRef((props, ref) => {
20
- const EmptyFieldEditingComponent = getEmptyFieldEditingComponent(props);
21
- return (React.createElement(React.Fragment, null, (EmptyFieldEditingComponent && React.createElement(EmptyFieldEditingComponent, null)) || (React.createElement(FieldComponent, Object.assign({}, props, { ref: ref })))));
27
+ const emptyFieldEditingComponent = getEmptyFieldEditingComponent(props);
28
+ return (emptyFieldEditingComponent || (React.createElement(FieldComponent, Object.assign({}, props, { ref: ref }))));
22
29
  });
23
30
  }
24
31
  // eslint-disable-next-line react/display-name
25
32
  return (props) => {
26
- const EmptyFieldEditingComponent = getEmptyFieldEditingComponent(props);
27
- return (React.createElement(React.Fragment, null, (EmptyFieldEditingComponent && React.createElement(EmptyFieldEditingComponent, null)) || (React.createElement(FieldComponent, Object.assign({}, props)))));
33
+ const emptyFieldEditingComponent = getEmptyFieldEditingComponent(props);
34
+ return emptyFieldEditingComponent || React.createElement(FieldComponent, Object.assign({}, props));
28
35
  };
29
36
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sitecore-jss/sitecore-jss-react",
3
- "version": "22.9.1-canary.1",
3
+ "version": "22.9.1-canary.2",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "sideEffects": false,
@@ -61,13 +61,13 @@
61
61
  "react-dom": "^19.1.0"
62
62
  },
63
63
  "dependencies": {
64
- "@sitecore-jss/sitecore-jss": "22.9.1-canary.1",
64
+ "@sitecore-jss/sitecore-jss": "22.9.1-canary.2",
65
65
  "fast-deep-equal": "^3.1.3",
66
66
  "style-attr": "^1.3.0"
67
67
  },
68
68
  "description": "",
69
69
  "types": "types/index.d.ts",
70
- "gitHead": "37948499e02360fcf6e7f262d241444451bda07d",
70
+ "gitHead": "2a48376b67f1278441ca21fecc9ec577bb797957",
71
71
  "files": [
72
72
  "dist",
73
73
  "types"
@@ -2,7 +2,7 @@
2
2
  import React from 'react';
3
3
  import { EditableFieldProps } from './sharedTypes';
4
4
  import { FieldMetadata } from '@sitecore-jss/sitecore-jss/layout';
5
- export interface DateFieldProps extends EditableFieldProps {
5
+ export interface DateFieldProps extends EditableFieldProps<DateFieldProps> {
6
6
  /** The date field data. */
7
7
  [htmlAttributes: string]: unknown;
8
8
  field: FieldMetadata & {
@@ -1,4 +1,10 @@
1
1
  /// <reference types="@types/react" />
2
2
  import React from 'react';
3
- export declare const DefaultEmptyFieldEditingComponentText: React.FC;
4
- export declare const DefaultEmptyFieldEditingComponentImage: React.FC;
3
+ export declare const DefaultEmptyFieldEditingComponentText: React.FC<{
4
+ [key: string]: unknown;
5
+ tag?: string;
6
+ }>;
7
+ export declare const DefaultEmptyFieldEditingComponentImage: React.FC<{
8
+ [key: string]: unknown;
9
+ className?: string;
10
+ }>;
@@ -27,7 +27,7 @@ export interface ImageSizeParameters {
27
27
  /** Image scale. Defaults to 1.0 */
28
28
  sc?: number;
29
29
  }
30
- export interface ImageProps extends EditableFieldProps {
30
+ export interface ImageProps extends EditableFieldProps<ImageProps> {
31
31
  [attributeName: string]: unknown;
32
32
  /** Image field data (consistent with other field types) */
33
33
  field?: (ImageField | ImageFieldValue) & FieldMetadata;
@@ -19,7 +19,7 @@ export interface LinkField {
19
19
  editableFirstPart?: string;
20
20
  editableLastPart?: string;
21
21
  }
22
- export type LinkProps = EditableFieldProps & React.AnchorHTMLAttributes<HTMLAnchorElement> & RefAttributes<HTMLAnchorElement> & {
22
+ export type LinkProps = EditableFieldProps<LinkProps> & React.AnchorHTMLAttributes<HTMLAnchorElement> & RefAttributes<HTMLAnchorElement> & {
23
23
  /** The link field data. */
24
24
  field: (LinkField | LinkFieldValue) & FieldMetadata;
25
25
  /**
@@ -6,7 +6,7 @@ export interface RichTextField extends FieldMetadata {
6
6
  value?: string;
7
7
  editable?: string;
8
8
  }
9
- export interface RichTextProps extends EditableFieldProps {
9
+ export interface RichTextProps extends EditableFieldProps<RichTextProps> {
10
10
  [htmlAttributes: string]: unknown;
11
11
  /** The rich text field data. */
12
12
  field?: RichTextField;
@@ -6,7 +6,7 @@ export interface TextField extends FieldMetadata {
6
6
  value?: string | number;
7
7
  editable?: string;
8
8
  }
9
- export interface TextProps extends EditableFieldProps {
9
+ export interface TextProps extends EditableFieldProps<TextProps> {
10
10
  [htmlAttributes: string]: unknown;
11
11
  /** The text field data. */
12
12
  field?: TextField;
@@ -16,7 +16,7 @@ export type JssComponentType = ComponentType & {
16
16
  /**
17
17
  * Shared editing field props
18
18
  */
19
- export interface EditableFieldProps {
19
+ export interface EditableFieldProps<EmptyFieldEditingComponentProps = unknown> {
20
20
  /**
21
21
  * Can be used to explicitly disable inline editing.
22
22
  * If true and `field.editable` has a value, then `field.editable` will be processed and rendered as component output. If false, `field.editable` value will be ignored and not rendered.
@@ -28,5 +28,5 @@ export interface EditableFieldProps {
28
28
  *
29
29
  * Custom element to render in Pages in Metadata edit mode if field value is empty
30
30
  */
31
- emptyFieldEditingComponent?: React.ComponentClass<unknown> | React.FC<unknown>;
31
+ emptyFieldEditingComponent?: React.ComponentClass<EmptyFieldEditingComponentProps> | React.FC<EmptyFieldEditingComponentProps>;
32
32
  }
@@ -14,15 +14,15 @@ export interface WithEmptyFieldEditingComponentOptions {
14
14
  */
15
15
  isForwardRef?: boolean;
16
16
  }
17
- interface WithEmptyFieldEditingComponentProps {
17
+ interface WithEmptyFieldEditingComponentProps<Props> {
18
18
  field?: (Partial<Field> | GenericFieldValue) & FieldMetadata;
19
19
  editable?: boolean;
20
- emptyFieldEditingComponent?: React.ComponentClass | React.FC;
20
+ emptyFieldEditingComponent?: React.ComponentClass<Props> | React.FC<Props>;
21
21
  }
22
22
  /**
23
23
  * Returns the passed field component or default component in case field value is empty and edit mode is 'metadata'
24
24
  * @param {ComponentType<FieldComponentProps>} FieldComponent the field component
25
25
  * @param {WithEmptyFieldEditingComponentProps} options the options of the HOC;
26
26
  */
27
- export declare function withEmptyFieldEditingComponent<FieldComponentProps extends WithEmptyFieldEditingComponentProps, RefElementType = HTMLElement>(FieldComponent: ComponentType<FieldComponentProps>, options: WithEmptyFieldEditingComponentOptions): React.ForwardRefExoticComponent<React.PropsWithoutRef<FieldComponentProps> & React.RefAttributes<RefElementType>> | ((props: FieldComponentProps) => React.JSX.Element);
27
+ export declare function withEmptyFieldEditingComponent<FieldComponentProps extends WithEmptyFieldEditingComponentProps<FieldComponentProps>, RefElementType = HTMLElement>(FieldComponent: ComponentType<FieldComponentProps>, options: WithEmptyFieldEditingComponentOptions): React.ForwardRefExoticComponent<React.PropsWithoutRef<FieldComponentProps> & React.RefAttributes<RefElementType>> | ((props: FieldComponentProps) => React.JSX.Element);
28
28
  export {};