@evoke-platform/ui-components 1.0.0-dev.230 → 1.0.0-dev.231

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.
@@ -36,7 +36,7 @@ export function Form(props) {
36
36
  ViewOnlyTextField: ViewOnlyComponent,
37
37
  ViewOnlyDecimal: ViewOnlyComponent,
38
38
  ViewOnlyInteger: ViewOnlyComponent,
39
- ViewOnlyRichText: richTextEditor,
39
+ ViewOnlyRichText: richTextEditor ?? ViewOnlyComponent,
40
40
  ViewOnlySection: Components.components.fieldset,
41
41
  ViewOnlyManyToManyRepeatableField: RepeatableFieldComponent,
42
42
  ViewOnlyRepeatableField: RepeatableFieldComponent,
@@ -59,7 +59,7 @@ export function Form(props) {
59
59
  Integer: FormFieldComponent,
60
60
  Buttons: ButtonComponent,
61
61
  Content: Components.components.content,
62
- RichText: richTextEditor,
62
+ RichText: richTextEditor ?? FormFieldComponent,
63
63
  Section: Components.components.tabs,
64
64
  ManyToManyRepeatableField: RepeatableFieldComponent,
65
65
  RepeatableField: RepeatableFieldComponent,
@@ -124,7 +124,7 @@ export function Form(props) {
124
124
  navigateTo,
125
125
  apiServices,
126
126
  user: userAccount,
127
- }, undefined, isReadOnly, allDefaultPages, navigateTo, queryAddresses, apiServices, !!closeModal, fieldHeight);
127
+ }, undefined, isReadOnly, allDefaultPages, navigateTo, queryAddresses, apiServices, !!closeModal, fieldHeight, richTextEditor);
128
128
  const components = isReadOnly ? newComponentProps : [...newComponentProps, BottomButtons];
129
129
  setComponentProps(components);
130
130
  }
@@ -205,7 +205,7 @@ export function Form(props) {
205
205
  navigateTo,
206
206
  apiServices,
207
207
  user: userAccount,
208
- }, undefined, undefined, undefined, undefined, undefined, undefined, !!closeModal, fieldHeight)),
208
+ }, undefined, undefined, undefined, undefined, undefined, undefined, !!closeModal, fieldHeight, richTextEditor)),
209
209
  BottomButtons,
210
210
  ]);
211
211
  }
@@ -221,7 +221,7 @@ export function Form(props) {
221
221
  navigateTo,
222
222
  apiServices,
223
223
  user,
224
- }, !!action, undefined, isReadOnly, queryAddresses, !!closeModal, fieldHeight),
224
+ }, !!action, undefined, isReadOnly, queryAddresses, !!closeModal, fieldHeight, richTextEditor),
225
225
  !isReadOnly && BottomButtons,
226
226
  ]);
227
227
  }
@@ -6,6 +6,7 @@ interface ObjectComponentProps extends BaseFormComponentProps {
6
6
  mode: 'default' | 'existingOnly';
7
7
  defaultValueCriteria?: Record<string, unknown>;
8
8
  initialValue?: string;
9
+ richTextEditor?: typeof ReactComponent;
9
10
  }
10
11
  export declare class ObjectComponent extends ReactComponent {
11
12
  relatedObject?: Obj;
@@ -182,7 +182,7 @@ export class ObjectComponent extends ReactComponent {
182
182
  * Will need to be revisited later. Possibly look into using this.ref */
183
183
  return ReactDOM.render(React.createElement("div", null,
184
184
  React.createElement(FormComponentWrapper, { ...updatedComponent, inputId: inputId, errorMessage: this.errorMessages() },
185
- React.createElement(ObjectPropertyInput, { ...updatedComponent, id: inputId, handleChangeObjectProperty: this.handleChangeObjectProperty, error: this.hasErrors(), filter: this.criteria ? { where: transformToWhere(this.updatedCriteria) } : undefined }))), root);
185
+ React.createElement(ObjectPropertyInput, { ...updatedComponent, id: inputId, handleChangeObjectProperty: this.handleChangeObjectProperty, error: this.hasErrors(), filter: this.criteria ? { where: transformToWhere(this.updatedCriteria) } : undefined, richTextEditor: this.component.richTextEditor }))), root);
186
186
  }
187
187
  detachReact(element) {
188
188
  ReactDOM.unmountComponentAtNode(element);
@@ -8,7 +8,7 @@ import { Box } from '../../../../layout';
8
8
  import { getPrefixedUrl, normalizeDates, transformToWhere } from '../../utils';
9
9
  import { RelatedObjectInstance } from './RelatedObjectInstance';
10
10
  export const ObjectPropertyInput = (props) => {
11
- const { id, instance, property, apiServices, defaultPages, handleChangeObjectProperty, nestedFieldsView, canUpdateProperty, error, navigateTo, mode, displayOption, filter, defaultValueCriteria, sortBy, orderBy, setSnackbarError, isModal, user, viewLayout, } = props;
11
+ const { id, instance, property, apiServices, defaultPages, handleChangeObjectProperty, nestedFieldsView, canUpdateProperty, error, navigateTo, mode, displayOption, filter, defaultValueCriteria, sortBy, orderBy, setSnackbarError, isModal, user, viewLayout, richTextEditor, } = props;
12
12
  const [relatedObject, setRelatedObject] = useState();
13
13
  const [openCreateDialog, setOpenCreateDialog] = useState(false);
14
14
  const [selectedInstance, setSelectedInstance] = useState();
@@ -333,7 +333,7 @@ export const ObjectPropertyInput = (props) => {
333
333
  event.stopPropagation();
334
334
  setOpenCreateDialog(true);
335
335
  }, "aria-label": `Add`, disabled: !canUpdateProperty }, "Add")))),
336
- openCreateDialog && (React.createElement(React.Fragment, null, nestedFieldsView ? (React.createElement(RelatedObjectInstance, { apiServices: apiServices, handleClose: handleClose, handleChangeObjectProperty: handleChangeObjectProperty, instance: instance, setSelectedInstance: setSelectedInstance, relatedObject: relatedObject, property: property, nestedFieldsView: nestedFieldsView, mode: mode, setSnackbarError: setSnackbarError, displayOption: displayOption, setOptions: setOptions, options: options, filter: filter, user: user, layout: layout })) : (React.createElement(Dialog, { fullWidth: true, maxWidth: "md", open: openCreateDialog, onClose: (e, reason) => reason !== 'backdropClick' && handleClose },
336
+ openCreateDialog && (React.createElement(React.Fragment, null, nestedFieldsView ? (React.createElement(RelatedObjectInstance, { apiServices: apiServices, handleClose: handleClose, handleChangeObjectProperty: handleChangeObjectProperty, instance: instance, setSelectedInstance: setSelectedInstance, relatedObject: relatedObject, property: property, nestedFieldsView: nestedFieldsView, mode: mode, setSnackbarError: setSnackbarError, displayOption: displayOption, setOptions: setOptions, options: options, filter: filter, user: user, layout: layout, richTextEditor: richTextEditor })) : (React.createElement(Dialog, { fullWidth: true, maxWidth: "md", open: openCreateDialog, onClose: (e, reason) => reason !== 'backdropClick' && handleClose },
337
337
  React.createElement(Typography, { sx: {
338
338
  marginTop: '28px',
339
339
  fontSize: '22px',
@@ -341,5 +341,5 @@ export const ObjectPropertyInput = (props) => {
341
341
  marginLeft: '24px',
342
342
  marginBottom: '10px',
343
343
  } }, `Add ${property.name}`),
344
- React.createElement(RelatedObjectInstance, { apiServices: apiServices, handleClose: handleClose, handleChangeObjectProperty: handleChangeObjectProperty, instance: instance, setSnackbarError: setSnackbarError, setSelectedInstance: setSelectedInstance, nestedFieldsView: nestedFieldsView, relatedObject: relatedObject, property: property, mode: mode, displayOption: displayOption, setOptions: setOptions, options: options, filter: filter, user: user, layout: layout })))))));
344
+ React.createElement(RelatedObjectInstance, { apiServices: apiServices, handleClose: handleClose, handleChangeObjectProperty: handleChangeObjectProperty, instance: instance, setSnackbarError: setSnackbarError, setSelectedInstance: setSelectedInstance, nestedFieldsView: nestedFieldsView, relatedObject: relatedObject, property: property, mode: mode, displayOption: displayOption, setOptions: setOptions, options: options, filter: filter, user: user, layout: layout, richTextEditor: richTextEditor })))))));
345
345
  };
@@ -1,5 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { ApiServices, Obj, ObjectInstance, Property, TableViewLayout, UserAccount } from '@evoke-platform/context';
3
+ import { ReactComponent } from '@formio/react';
3
4
  export declare type RelatedObjectInstanceProps = {
4
5
  relatedObject?: Obj;
5
6
  property: Property;
@@ -21,5 +22,6 @@ export declare type RelatedObjectInstanceProps = {
21
22
  filter?: Record<string, unknown>;
22
23
  user?: UserAccount;
23
24
  layout?: TableViewLayout;
25
+ richTextEditor?: typeof ReactComponent;
24
26
  };
25
27
  export declare const RelatedObjectInstance: (props: RelatedObjectInstanceProps) => JSX.Element;
@@ -20,7 +20,7 @@ const styles = {
20
20
  };
21
21
  const DEFAULT_CREATE_ACTION = '_create';
22
22
  export const RelatedObjectInstance = (props) => {
23
- const { relatedObject, property, setSelectedInstance, handleChangeObjectProperty, handleClose, apiServices, setSnackbarError, nestedFieldsView, mode, displayOption, setOptions, options, filter, user, layout, } = props;
23
+ const { relatedObject, property, setSelectedInstance, handleChangeObjectProperty, handleClose, apiServices, setSnackbarError, nestedFieldsView, mode, displayOption, setOptions, options, filter, user, layout, richTextEditor, } = props;
24
24
  const [relationType, setRelationType] = useState(displayOption === 'dropdown' ? 'new' : 'existing');
25
25
  const [selectedRow, setSelectedRow] = useState();
26
26
  const [errors, setErrors] = useState([]);
@@ -104,7 +104,7 @@ export const RelatedObjectInstance = (props) => {
104
104
  React.createElement(Form, { actionId: "_create", actionType: "create", object: relatedObject, onSave: createNewInstance, submitButtonLabel: 'Add', closeModal: onClose, apiServices: apiServices, clearable: true, objectInputCommonProps: {
105
105
  apiServices: apiServices,
106
106
  setSnackbarError: setSnackbarError,
107
- }, queryAddresses: queryAddresses, user: userAccount }))) : (relatedObject && (React.createElement(React.Fragment, null,
107
+ }, queryAddresses: queryAddresses, user: userAccount, richTextEditor: richTextEditor }))) : (relatedObject && (React.createElement(React.Fragment, null,
108
108
  React.createElement(InstanceLookup, { apiServices: apiServices, nestedFieldsView: nestedFieldsView, setRelationType: setRelationType, object: relatedObject, setSelectedInstance: setSelectedRow, mode: mode, filter: filter, layout: layout }))))),
109
109
  relationType !== 'new' && (React.createElement(Box, { sx: styles.actionButtons },
110
110
  React.createElement(Button, { onClick: onClose, color: 'inherit', sx: {
@@ -1,4 +1,5 @@
1
1
  import { ApiServices, ObjectInstance, Property, UserAccount, ViewLayoutEntityReference } from '@evoke-platform/context';
2
+ import { ReactComponent } from '@formio/react';
2
3
  import { AutocompleteOption } from '../../core';
3
4
  export declare type BaseFormComponentProps = {
4
5
  key: string;
@@ -76,6 +77,7 @@ export declare type ObjectPropertyInputProps = {
76
77
  isModal?: boolean;
77
78
  label?: string;
78
79
  viewLayout?: ViewLayoutEntityReference;
80
+ richTextEditor?: typeof ReactComponent;
79
81
  };
80
82
  export declare type Address = {
81
83
  line1?: string;
@@ -1,4 +1,5 @@
1
1
  import { ActionInput, ActionInputType, ApiServices, FormEntry, InputParameter, InputParameterReference, Obj, ObjectInstance, Property, PropertyType } from '@evoke-platform/context';
2
+ import { ReactComponent } from '@formio/react';
2
3
  import { LocalDateTime } from '@js-joda/core';
3
4
  import { AutocompleteOption } from '../../core';
4
5
  import { ObjectPropertyInputProps } from './types';
@@ -20,9 +21,9 @@ export declare function getMiddleObject(instance: ObjectInstance, property: Prop
20
21
  } | undefined;
21
22
  export declare function getMiddleInstance(instanceId: string, property: Property, middleObjectInstances: ObjectInstance[]): ObjectInstance | undefined;
22
23
  export declare function getPrefixedUrl(url: string): string;
23
- export declare function addObjectPropertiesToComponentProps(properties: Property[], formComponents: any[], instance?: ObjectInstance, objectPropertyInputProps?: ObjectPropertyInputProps, autoSave?: (data: Record<string, unknown>) => void, readOnly?: boolean, defaultPages?: Record<string, string>, navigateTo?: (path: string) => void, queryAddresses?: unknown, apiServices?: ApiServices, isModal?: boolean, fieldHeight?: 'small' | 'medium'): Promise<ActionInput[]>;
24
+ export declare function addObjectPropertiesToComponentProps(properties: Property[], formComponents: any[], instance?: ObjectInstance, objectPropertyInputProps?: ObjectPropertyInputProps, autoSave?: (data: Record<string, unknown>) => void, readOnly?: boolean, defaultPages?: Record<string, string>, navigateTo?: (path: string) => void, queryAddresses?: unknown, apiServices?: ApiServices, isModal?: boolean, fieldHeight?: 'small' | 'medium', richTextEditor?: typeof ReactComponent): Promise<ActionInput[]>;
24
25
  export declare function getDefaultValue(initialValue: unknown, selectOptions?: AutocompleteOption[]): unknown;
25
- export declare const buildComponentPropsFromObjectProperties: (properties: Property[], objectId: string, instance?: ObjectInstance, objectPropertyInputProps?: ObjectPropertyInputProps, hasActionPermissions?: boolean, autoSave?: ((data: Record<string, unknown>) => void) | undefined, readOnly?: boolean, queryAddresses?: unknown, isModal?: boolean, fieldHeight?: 'small' | 'medium') => unknown[];
26
+ export declare const buildComponentPropsFromObjectProperties: (properties: Property[], objectId: string, instance?: ObjectInstance, objectPropertyInputProps?: ObjectPropertyInputProps, hasActionPermissions?: boolean, autoSave?: ((data: Record<string, unknown>) => void) | undefined, readOnly?: boolean, queryAddresses?: unknown, isModal?: boolean, fieldHeight?: 'small' | 'medium', richTextEditor?: typeof ReactComponent) => unknown[];
26
27
  export declare const buildComponentPropsFromDocumentProperties: (documentProperties: [string, unknown][], readOnly?: boolean, autoSave?: ((data: Record<string, unknown>) => void) | undefined, fieldHeight?: 'small' | 'medium') => {
27
28
  type: string;
28
29
  key: string;
@@ -468,7 +468,7 @@ export function getPrefixedUrl(url) {
468
468
  // This function is used when there is no form configured in the form builder.
469
469
  export async function addObjectPropertiesToComponentProps(properties,
470
470
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
471
- formComponents, instance, objectPropertyInputProps, autoSave, readOnly, defaultPages, navigateTo, queryAddresses, apiServices, isModal, fieldHeight) {
471
+ formComponents, instance, objectPropertyInputProps, autoSave, readOnly, defaultPages, navigateTo, queryAddresses, apiServices, isModal, fieldHeight, richTextEditor) {
472
472
  return [
473
473
  ...(await Promise.all(formComponents
474
474
  ?.filter((component) => !isUndefined(component) && !isNil(component))
@@ -625,6 +625,9 @@ formComponents, instance, objectPropertyInputProps, autoSave, readOnly, defaultP
625
625
  middleObject,
626
626
  getMiddleObjectInstances,
627
627
  isModal,
628
+ richTextEditor: ['RepeatableField', 'Object'].includes(component.type)
629
+ ? richTextEditor
630
+ : undefined,
628
631
  };
629
632
  }
630
633
  const defaultValue = getDefaultValue(isNil(instanceValue) ? component.initialValue : instanceValue, component?.data?.values);
@@ -665,11 +668,14 @@ formComponents, instance, objectPropertyInputProps, autoSave, readOnly, defaultP
665
668
  }
666
669
  : undefined,
667
670
  isModal,
671
+ richTextEditor: ['RepeatableField', 'Object'].includes(component.type)
672
+ ? richTextEditor
673
+ : undefined,
668
674
  };
669
675
  }
670
676
  if (component.columns) {
671
677
  for (const column of component.columns) {
672
- column.components = await addObjectPropertiesToComponentProps(properties, column.components, instance, objectPropertyInputProps, autoSave, readOnly, undefined, undefined, queryAddresses, apiServices, isModal, fieldHeight);
678
+ column.components = await addObjectPropertiesToComponentProps(properties, column.components, instance, objectPropertyInputProps, autoSave, readOnly, undefined, undefined, queryAddresses, apiServices, isModal, fieldHeight, richTextEditor);
673
679
  }
674
680
  return component;
675
681
  }
@@ -703,6 +709,9 @@ formComponents, instance, objectPropertyInputProps, autoSave, readOnly, defaultP
703
709
  item.navigateTo = navigateTo;
704
710
  item.isModal = isModal;
705
711
  item.fieldHeight = fieldHeight;
712
+ item.richTextEditor = ['RepeatableField', 'Object'].includes(item.type)
713
+ ? richTextEditor
714
+ : undefined;
706
715
  if (item.addressPropertyId) {
707
716
  item.queryAddresses = queryAddresses;
708
717
  }
@@ -724,7 +733,7 @@ formComponents, instance, objectPropertyInputProps, autoSave, readOnly, defaultP
724
733
  }
725
734
  }
726
735
  return {
727
- components: await addObjectPropertiesToComponentProps(properties, component.components, instance, objectPropertyInputProps, autoSave, readOnly, defaultPages, navigateTo, queryAddresses, apiServices, isModal, fieldHeight),
736
+ components: await addObjectPropertiesToComponentProps(properties, component.components, instance, objectPropertyInputProps, autoSave, readOnly, defaultPages, navigateTo, queryAddresses, apiServices, isModal, fieldHeight, richTextEditor),
728
737
  ...component,
729
738
  ...(component.type === 'Object' && objectPropertyInputProps),
730
739
  type: `${readOnly ? 'ViewOnly' : ''}${component.type}`,
@@ -738,6 +747,9 @@ formComponents, instance, objectPropertyInputProps, autoSave, readOnly, defaultP
738
747
  queryAddresses: component.isAddressLine1 ? queryAddresses : undefined,
739
748
  isModal,
740
749
  fieldHeight,
750
+ richTextEditor: ['RepeatableField', 'Object'].includes(component.type)
751
+ ? richTextEditor
752
+ : undefined,
741
753
  };
742
754
  }
743
755
  }))).filter((component) => !!component),
@@ -788,7 +800,7 @@ export function getDefaultValue(initialValue, selectOptions) {
788
800
  }
789
801
  // The following function adds the configured properties to the form components.
790
802
  // This function is used when there is a form configured in the form builder.
791
- export const buildComponentPropsFromObjectProperties = (properties, objectId, instance, objectPropertyInputProps, hasActionPermissions, autoSave, readOnly, queryAddresses, isModal, fieldHeight) => {
803
+ export const buildComponentPropsFromObjectProperties = (properties, objectId, instance, objectPropertyInputProps, hasActionPermissions, autoSave, readOnly, queryAddresses, isModal, fieldHeight, richTextEditor) => {
792
804
  const matchType = (type) => {
793
805
  switch (type) {
794
806
  case 'boolean':
@@ -1049,6 +1061,7 @@ export const buildComponentPropsFromObjectProperties = (properties, objectId, in
1049
1061
  autoSave,
1050
1062
  queryAddresses: ['collection', 'object'].includes(property?.type) ? queryAddresses : undefined,
1051
1063
  isModal,
1064
+ richTextEditor: property.type === 'object' ? richTextEditor : undefined,
1052
1065
  };
1053
1066
  });
1054
1067
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evoke-platform/ui-components",
3
- "version": "1.0.0-dev.230",
3
+ "version": "1.0.0-dev.231",
4
4
  "description": "",
5
5
  "main": "dist/published/index.js",
6
6
  "module": "dist/published/index.js",