@evoke-platform/ui-components 1.10.0-testing.1 → 1.10.0-testing.11
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.
- package/dist/published/components/custom/CriteriaBuilder/CriteriaBuilder.js +1 -1
- package/dist/published/components/custom/CriteriaBuilder/CriteriaBuilder.test.d.ts +1 -0
- package/dist/published/components/custom/CriteriaBuilder/CriteriaBuilder.test.js +430 -0
- package/dist/published/components/custom/CriteriaBuilder/ValueEditor.js +19 -6
- package/dist/published/components/custom/Form/utils.js +1 -0
- package/dist/published/components/custom/FormV2/FormRenderer.js +13 -3
- package/dist/published/components/custom/FormV2/FormRendererContainer.d.ts +0 -2
- package/dist/published/components/custom/FormV2/FormRendererContainer.js +10 -5
- package/dist/published/components/custom/FormV2/components/Footer.js +1 -0
- package/dist/published/components/custom/FormV2/components/FormFieldTypes/CollectionFiles/ActionDialog.js +1 -1
- package/dist/published/components/custom/FormV2/components/FormFieldTypes/CollectionFiles/RepeatableField.d.ts +0 -3
- package/dist/published/components/custom/FormV2/components/FormFieldTypes/CollectionFiles/RepeatableField.js +31 -27
- package/dist/published/components/custom/FormV2/components/FormFieldTypes/Image.js +1 -2
- package/dist/published/components/custom/FormV2/components/Header.d.ts +1 -0
- package/dist/published/components/custom/FormV2/components/Header.js +5 -2
- package/dist/published/components/custom/FormV2/components/RecursiveEntryRenderer.js +22 -17
- package/dist/published/components/custom/FormV2/components/utils.js +2 -7
- package/dist/published/components/custom/FormV2/tests/FormRenderer.test.js +432 -4
- package/dist/published/components/custom/FormV2/tests/FormRendererContainer.test.js +202 -12
- package/dist/published/components/custom/FormV2/tests/test-data.js +2 -0
- package/dist/published/stories/FormRendererContainer.stories.d.ts +0 -10
- package/dist/published/stories/FormRendererContainer.stories.js +7 -3
- package/dist/published/stories/FormRendererData.js +3 -43
- package/package.json +3 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useApiServices, useNotification, } from '@evoke-platform/context';
|
|
2
|
-
import { get, isEqual,
|
|
2
|
+
import { get, isEqual, omit, startCase } from 'lodash';
|
|
3
3
|
import { DateTime } from 'luxon';
|
|
4
4
|
import React, { useCallback, useEffect, useState } from 'react';
|
|
5
5
|
import sift from 'sift';
|
|
@@ -34,7 +34,7 @@ const styles = {
|
|
|
34
34
|
},
|
|
35
35
|
};
|
|
36
36
|
const RepeatableField = (props) => {
|
|
37
|
-
const { fieldDefinition, canUpdateProperty, criteria, viewLayout, entry
|
|
37
|
+
const { fieldDefinition, canUpdateProperty, criteria, viewLayout, entry } = props;
|
|
38
38
|
const { fetchedOptions, setFetchedOptions, instance, width } = useFormContext();
|
|
39
39
|
const { isBelow } = useWidgetSize({
|
|
40
40
|
scroll: false,
|
|
@@ -62,9 +62,9 @@ const RepeatableField = (props) => {
|
|
|
62
62
|
showAlert: false,
|
|
63
63
|
isError: false,
|
|
64
64
|
});
|
|
65
|
-
const createAction = relatedObject?.actions?.find((item) => item.id === createActionId);
|
|
66
|
-
const updateAction = relatedObject?.actions?.find((item) => item.id === updateActionId);
|
|
67
|
-
const deleteAction = relatedObject?.actions?.find((item) => item.id === deleteActionId);
|
|
65
|
+
const createAction = relatedObject?.actions?.find((item) => item.id === entry.display?.createActionId);
|
|
66
|
+
const updateAction = relatedObject?.actions?.find((item) => item.id === entry.display?.updateActionId);
|
|
67
|
+
const deleteAction = relatedObject?.actions?.find((item) => item.id === entry.display?.deleteActionId);
|
|
68
68
|
function getForm(setForm, action, formId) {
|
|
69
69
|
if (formId || action?.defaultFormId) {
|
|
70
70
|
apiServices
|
|
@@ -209,11 +209,11 @@ const RepeatableField = (props) => {
|
|
|
209
209
|
}, [fetchCriteriaObjects, relatedObject]);
|
|
210
210
|
useEffect(() => {
|
|
211
211
|
if (createAction && !createForm)
|
|
212
|
-
getForm(setCreateForm, createAction
|
|
212
|
+
getForm(setCreateForm, createAction, entry.display?.createFormId);
|
|
213
213
|
if (updateAction && !updateForm)
|
|
214
|
-
getForm(setUpdateForm, updateAction
|
|
214
|
+
getForm(setUpdateForm, updateAction, entry.display?.updateFormId);
|
|
215
215
|
if (deleteAction && !deleteForm)
|
|
216
|
-
getForm(setDeleteForm, deleteAction
|
|
216
|
+
getForm(setDeleteForm, deleteAction, entry.display?.deleteFormId);
|
|
217
217
|
}, [entry.display, createAction, updateAction, deleteAction]);
|
|
218
218
|
useEffect(() => {
|
|
219
219
|
if (relatedObject?.rootObjectId) {
|
|
@@ -269,10 +269,10 @@ const RepeatableField = (props) => {
|
|
|
269
269
|
if (fieldDefinition.objectId && canUpdateProperty && !fetchedOptions[`${fieldDefinition.id}HasCreateAction`]) {
|
|
270
270
|
apiServices
|
|
271
271
|
.get(getPrefixedUrl(`/objects/${fieldDefinition.objectId}/instances/checkAccess`), {
|
|
272
|
-
params: { action: 'execute', field:
|
|
272
|
+
params: { action: 'execute', field: entry.display?.createActionId, scope: 'data' },
|
|
273
273
|
})
|
|
274
274
|
.then((checkAccess) => {
|
|
275
|
-
const action = relatedObject.actions?.find((item) => item.id ===
|
|
275
|
+
const action = relatedObject.actions?.find((item) => item.id === entry.display?.createActionId);
|
|
276
276
|
if (action && fieldDefinition.relatedPropertyId) {
|
|
277
277
|
const { relatedObjectProperty, criteria } = retrieveCriteria(fieldDefinition.relatedPropertyId, action, relatedObject);
|
|
278
278
|
if (!criteria || JSON.stringify(criteria).includes('{{{input.') || !relatedObjectProperty) {
|
|
@@ -346,17 +346,21 @@ const RepeatableField = (props) => {
|
|
|
346
346
|
}, variant: "text", onClick: () => setReloadOnErrorTrigger((prevState) => !prevState) }, "Retry")));
|
|
347
347
|
const save = async (input) => {
|
|
348
348
|
const action = relatedObject?.actions?.find((a) => a.id ===
|
|
349
|
-
(dialogType === 'create'
|
|
349
|
+
(dialogType === 'create'
|
|
350
|
+
? entry.display?.createActionId
|
|
351
|
+
: dialogType === 'update'
|
|
352
|
+
? entry.display?.updateActionId
|
|
353
|
+
: entry.display?.deleteActionId));
|
|
350
354
|
// when save is called we know that fieldDefinition is a parameter and fieldDefinition.objectId is defined
|
|
351
355
|
input = await formatSubmission(input, apiServices, fieldDefinition.objectId, selectedInstanceId, action?.type === 'update' ? updateForm : undefined);
|
|
352
|
-
if (action?.type === 'create' && createActionId) {
|
|
356
|
+
if (action?.type === 'create' && entry.display?.createActionId) {
|
|
353
357
|
const updatedInput = {
|
|
354
358
|
...input,
|
|
355
359
|
[fieldDefinition?.relatedPropertyId]: { id: instance?.id },
|
|
356
360
|
};
|
|
357
361
|
try {
|
|
358
362
|
const instance = await apiServices.post(getPrefixedUrl(`/objects/${fieldDefinition.objectId}/instances/actions`), {
|
|
359
|
-
actionId: createActionId,
|
|
363
|
+
actionId: entry.display?.createActionId,
|
|
360
364
|
input: updatedInput,
|
|
361
365
|
});
|
|
362
366
|
const hasAccess = fieldDefinition?.relatedPropertyId && fieldDefinition.relatedPropertyId in instance;
|
|
@@ -379,8 +383,8 @@ const RepeatableField = (props) => {
|
|
|
379
383
|
try {
|
|
380
384
|
const response = await apiServices.post(getPrefixedUrl(`/objects/${relatedObjectId}/instances/${selectedInstanceId}/actions`), {
|
|
381
385
|
actionId: `_${action?.type}`,
|
|
382
|
-
input:
|
|
383
|
-
?.filter((property) =>
|
|
386
|
+
input: omit(input, relatedObject?.properties
|
|
387
|
+
?.filter((property) => property.formula || property.type === 'collection')
|
|
384
388
|
.map((property) => property.id) ?? []),
|
|
385
389
|
});
|
|
386
390
|
if (response && relatedObject && instance) {
|
|
@@ -519,12 +523,12 @@ const RepeatableField = (props) => {
|
|
|
519
523
|
users?.find((user) => get(relatedInstance, `${prop.id.split('.')[0]}.id`) === user.id)?.status === 'Inactive' &&
|
|
520
524
|
' (Inactive)')))))),
|
|
521
525
|
canUpdateProperty && (React.createElement(Box, { sx: { mt: 2, display: 'flex', gap: 1 } },
|
|
522
|
-
React.createElement(IconButton, { onClick: () => editRow(relatedInstance.id) },
|
|
526
|
+
entry.display?.updateActionId && (React.createElement(IconButton, { onClick: () => editRow(relatedInstance.id) },
|
|
523
527
|
React.createElement(Tooltip, { title: "Edit" },
|
|
524
|
-
React.createElement(Edit, null))),
|
|
525
|
-
React.createElement(IconButton, { onClick: () => deleteRow(relatedInstance.id) },
|
|
528
|
+
React.createElement(Edit, null)))),
|
|
529
|
+
entry.display?.deleteActionId && (React.createElement(IconButton, { onClick: () => deleteRow(relatedInstance.id) },
|
|
526
530
|
React.createElement(Tooltip, { title: "Delete" },
|
|
527
|
-
React.createElement(TrashCan, { sx: { ':hover': { color: '#A12723' } } }))))))))))) : (React.createElement(TableContainer, { sx: {
|
|
531
|
+
React.createElement(TrashCan, { sx: { ':hover': { color: '#A12723' } } })))))))))))) : (React.createElement(TableContainer, { sx: {
|
|
528
532
|
borderRadius: '6px',
|
|
529
533
|
border: '1px solid #919EAB3D',
|
|
530
534
|
boxShadow: 'none',
|
|
@@ -544,7 +548,7 @@ const RepeatableField = (props) => {
|
|
|
544
548
|
cursor: 'pointer',
|
|
545
549
|
},
|
|
546
550
|
}
|
|
547
|
-
: {}, onClick: updateActionId &&
|
|
551
|
+
: {}, onClick: entry.display?.updateActionId &&
|
|
548
552
|
canUpdateProperty &&
|
|
549
553
|
prop.id === 'name'
|
|
550
554
|
? () => editRow(relatedInstance.id)
|
|
@@ -554,19 +558,19 @@ const RepeatableField = (props) => {
|
|
|
554
558
|
users?.find((user) => get(relatedInstance, `${prop.id.split('.')[0]}.id`) === user.id)?.status === 'Inactive' && (React.createElement("span", null, ' (Inactive)'))))));
|
|
555
559
|
}),
|
|
556
560
|
canUpdateProperty && (React.createElement(TableCell, { sx: { width: '80px' } },
|
|
557
|
-
updateActionId && (React.createElement(IconButton, { "aria-label": `edit-collection-instance-${index}`, onClick: () => editRow(relatedInstance.id) },
|
|
561
|
+
entry.display?.updateActionId && (React.createElement(IconButton, { "aria-label": `edit-collection-instance-${index}`, onClick: () => editRow(relatedInstance.id) },
|
|
558
562
|
React.createElement(Tooltip, { title: "Edit" },
|
|
559
563
|
React.createElement(Edit, null)))),
|
|
560
|
-
React.createElement(IconButton, { "aria-label": `delete-collection-instance-${index}`, onClick: () => deleteRow(relatedInstance.id) },
|
|
564
|
+
entry.display?.deleteActionId && (React.createElement(IconButton, { "aria-label": `delete-collection-instance-${index}`, onClick: () => deleteRow(relatedInstance.id) },
|
|
561
565
|
React.createElement(Tooltip, { title: "Delete" },
|
|
562
|
-
React.createElement(TrashCan, { sx: { ':hover': { color: '#A12723' } } })))))))))))),
|
|
563
|
-
hasCreateAction && createActionId && (React.createElement(Button, { variant: "contained", sx: styles.addButton, onClick: addRow, "aria-label": 'Add' }, "Add"))),
|
|
566
|
+
React.createElement(TrashCan, { sx: { ':hover': { color: '#A12723' } } }))))))))))))),
|
|
567
|
+
hasCreateAction && entry.display?.createActionId && (React.createElement(Button, { variant: "contained", sx: styles.addButton, disabled: !createAction, onClick: addRow, "aria-label": 'Add' }, "Add"))),
|
|
564
568
|
relatedObject && openDialog && (React.createElement(ActionDialog, { object: relatedObject, open: openDialog, onClose: () => setOpenDialog(false), onSubmit: save, action: relatedObject?.actions?.find((a) => a.id ===
|
|
565
569
|
(dialogType === 'create'
|
|
566
|
-
? createActionId
|
|
570
|
+
? entry.display?.createActionId
|
|
567
571
|
: dialogType === 'update'
|
|
568
|
-
? updateActionId
|
|
569
|
-
: deleteActionId)), relatedFormId: dialogType === 'create'
|
|
572
|
+
? entry.display?.updateActionId
|
|
573
|
+
: entry.display?.deleteActionId)), relatedFormId: dialogType === 'create'
|
|
570
574
|
? createForm?.id
|
|
571
575
|
: dialogType === 'update'
|
|
572
576
|
? updateForm?.id
|
|
@@ -32,7 +32,6 @@ const styles = {
|
|
|
32
32
|
},
|
|
33
33
|
icon: {
|
|
34
34
|
color: '#fff',
|
|
35
|
-
zIndex: 40,
|
|
36
35
|
fontSize: '16px',
|
|
37
36
|
},
|
|
38
37
|
deleteIcon: {
|
|
@@ -81,7 +80,7 @@ export const Image = (props) => {
|
|
|
81
80
|
accept: { 'image/*': ['.png', '.jpg', '.jpeg', '.gif', '.svg'] },
|
|
82
81
|
});
|
|
83
82
|
return (React.createElement(React.Fragment, null, image ? (React.createElement(Box, { sx: styles.imageContainer },
|
|
84
|
-
React.createElement(Box, { sx: { position: 'relative', left: 0
|
|
83
|
+
React.createElement(Box, { sx: { position: 'relative', left: 0 } },
|
|
85
84
|
React.createElement(CardMedia, { component: "img", image: image, alt: 'Uploaded Image', sx: styles.image }),
|
|
86
85
|
canUpdateProperty && (React.createElement(IconButton, { onClick: handleRemove, "aria-label": "Remove image", sx: styles.deleteIcon },
|
|
87
86
|
React.createElement(ClearRounded, { sx: styles.icon })))))) : canUpdateProperty ? (React.createElement(Box, { sx: {
|
|
@@ -6,6 +6,7 @@ import { ExpandedSection } from './types';
|
|
|
6
6
|
export type HeaderProps = {
|
|
7
7
|
hasAccordions: boolean;
|
|
8
8
|
shouldShowValidationErrors: boolean;
|
|
9
|
+
validationErrorsRef?: React.Ref<HTMLDivElement>;
|
|
9
10
|
title?: string;
|
|
10
11
|
expandedSections?: ExpandedSection[];
|
|
11
12
|
onExpandAll?: () => void;
|
|
@@ -6,7 +6,7 @@ import { Typography } from '../../../core/Typography';
|
|
|
6
6
|
import Box from '../../../layout/Box/Box';
|
|
7
7
|
import ValidationErrors from './ValidationFiles/ValidationErrors';
|
|
8
8
|
const Header = (props) => {
|
|
9
|
-
const { title, errors, hasAccordions, shouldShowValidationErrors, form, sx } = props;
|
|
9
|
+
const { title, errors, hasAccordions, shouldShowValidationErrors, validationErrorsRef, form, sx } = props;
|
|
10
10
|
const { width } = useFormContext();
|
|
11
11
|
const { breakpoints, isBelow } = useWidgetSize({
|
|
12
12
|
scroll: false,
|
|
@@ -25,12 +25,15 @@ const Header = (props) => {
|
|
|
25
25
|
borderBottom: !form.id ? undefined : '1px solid #e9ecef',
|
|
26
26
|
gap: isSm || isXs ? 2 : 3,
|
|
27
27
|
...sx,
|
|
28
|
+
'.evoke-form-renderer-header': {
|
|
29
|
+
flex: 1,
|
|
30
|
+
},
|
|
28
31
|
} },
|
|
29
32
|
title && (React.createElement(Box, { sx: { flex: '1 1 100%' } },
|
|
30
33
|
React.createElement(Title, { ...props }))),
|
|
31
34
|
hasAccordions && (React.createElement(Box, { sx: { flex: '1 1 100%' } },
|
|
32
35
|
React.createElement(AccordionActions, { ...props }))),
|
|
33
|
-
shouldShowValidationErrors && !isEmpty(errors) ? React.createElement(ValidationErrors, { errors: errors }) : null));
|
|
36
|
+
React.createElement("div", { ref: validationErrorsRef, className: 'evoke-form-renderer-header' }, shouldShowValidationErrors && !isEmpty(errors) ? React.createElement(ValidationErrors, { errors: errors }) : null)));
|
|
34
37
|
};
|
|
35
38
|
// Default slot components for convenience
|
|
36
39
|
export const Title = ({ title }) => (React.createElement(Typography, { sx: {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useApiServices, useAuthenticationContext, } from '@evoke-platform/context';
|
|
2
2
|
import { WarningRounded } from '@mui/icons-material';
|
|
3
3
|
import DOMPurify from 'dompurify';
|
|
4
|
+
import { isEmpty } from 'lodash';
|
|
4
5
|
import React, { useEffect, useMemo } from 'react';
|
|
5
6
|
import useWidgetSize, { useFormContext } from '../../../../theme/hooks';
|
|
6
7
|
import { TextField, Typography } from '../../../core';
|
|
@@ -90,18 +91,31 @@ export function RecursiveEntryRenderer(props) {
|
|
|
90
91
|
? display?.defaultValue.orderBy
|
|
91
92
|
: undefined, defaultValueCriteria: typeof display?.defaultValue === 'object' && 'criteria' in display.defaultValue
|
|
92
93
|
? display?.defaultValue?.criteria
|
|
93
|
-
: undefined, viewLayout: display?.viewLayout, hasDescription: !!display?.description,
|
|
94
|
-
// formId={display?.createFormId} // TODO: this should be added as part of the builder update
|
|
95
|
-
createActionId: '_create' })));
|
|
94
|
+
: undefined, viewLayout: display?.viewLayout, hasDescription: !!display?.description, formId: display?.createFormId, createActionId: display?.createActionId })));
|
|
96
95
|
}
|
|
97
96
|
else if (fieldDefinition.type === 'user') {
|
|
98
97
|
return (React.createElement(FieldWrapper, { ...getFieldWrapperProps(fieldDefinition, entry, entryId, fieldValue, display, errors) },
|
|
99
98
|
React.createElement(UserProperty, { id: entryId, value: fieldValue, error: !!errors?.[entryId], readOnly: entry.type === 'readonlyField', hasDescription: !!display?.description })));
|
|
100
99
|
}
|
|
101
100
|
else if (fieldDefinition.type === 'collection') {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
101
|
+
if (fieldDefinition?.manyToManyPropertyId) {
|
|
102
|
+
if (middleObject && !isEmpty(middleObject)) {
|
|
103
|
+
return (initialMiddleObjectInstances && (React.createElement(FieldWrapper, { ...getFieldWrapperProps(fieldDefinition, entry, entryId, fieldValue, display, errors) },
|
|
104
|
+
React.createElement(DropdownRepeatableField, { initialMiddleObjectInstances: fetchedOptions[`${entryId}MiddleObjectInstances`] ||
|
|
105
|
+
initialMiddleObjectInstances, fieldDefinition: fieldDefinition, id: entryId, middleObject: middleObject, readOnly: entry.type === 'readonlyField', criteria: validation?.criteria, hasDescription: !!display?.description }))));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// when in the builder preview, the middle object won't be fetched so instead show an empty field
|
|
109
|
+
const singleSelectProperty = structuredClone(fieldDefinition);
|
|
110
|
+
singleSelectProperty.type = 'choices';
|
|
111
|
+
return (React.createElement(FieldWrapper, { ...getFieldWrapperProps(fieldDefinition, entry, entryId, fieldValue, display, errors) },
|
|
112
|
+
React.createElement(FormField, { id: entryId, property: singleSelectProperty, defaultValue: fieldValue || getValues(entryId), selectOptions: [], size: fieldHeight })));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
return (React.createElement(FieldWrapper, { ...getFieldWrapperProps(fieldDefinition, entry, entryId, fieldValue, display, errors) },
|
|
117
|
+
React.createElement(RepeatableField, { fieldDefinition: fieldDefinition, canUpdateProperty: entry.type !== 'readonlyField', criteria: validation?.criteria, viewLayout: display?.viewLayout, entry: entry })));
|
|
118
|
+
}
|
|
105
119
|
}
|
|
106
120
|
else if (fieldDefinition.type === 'richText') {
|
|
107
121
|
return (React.createElement(FieldWrapper, { ...getFieldWrapperProps(fieldDefinition, entry, entryId, fieldValue, display, errors) }, richTextEditor ? (React.createElement(richTextEditor, {
|
|
@@ -156,18 +170,9 @@ export function RecursiveEntryRenderer(props) {
|
|
|
156
170
|
: `${entryId}-reset-false`, ...getFieldWrapperProps(fieldDefinition, entry, entryId, fieldValue, display, errors), errorMessage: undefined },
|
|
157
171
|
React.createElement(FormField, { id: entryId,
|
|
158
172
|
// TODO: Ideally the FormField prop should be called parameter but can't change the name for backwards compatibility reasons
|
|
159
|
-
property: fieldDefinition, defaultValue: fieldValue || getValues(entryId), onChange: handleChange, readOnly: entry.type === 'readonlyField', placeholder: display?.placeholder, mask: validation?.mask, isOptionEqualToValue: isOptionEqualToValue, error: !!errors?.[entryId], errorMessage: errors?.[entryId]?.message, isMultiLineText: !!display?.rowCount, rows: display?.rowCount, required: entry.display?.required || false,
|
|
160
|
-
if (typeof option === 'string') {
|
|
161
|
-
return (entry?.enumWithLabels?.find((e) => e.value === option)
|
|
162
|
-
?.label ?? option);
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
return (entry?.enumWithLabels?.find((e) => e.value === option.value)?.label ?? String(option.value));
|
|
166
|
-
}
|
|
167
|
-
}, size: fieldHeight, sortBy: display?.choicesDisplay?.sortBy && display.choicesDisplay.sortBy, displayOption: fieldDefinition.type === 'boolean'
|
|
173
|
+
property: fieldDefinition, defaultValue: fieldValue || getValues(entryId), onChange: handleChange, readOnly: entry.type === 'readonlyField', placeholder: display?.placeholder, mask: validation?.mask, isOptionEqualToValue: isOptionEqualToValue, error: !!errors?.[entryId], errorMessage: errors?.[entryId]?.message, isMultiLineText: !!display?.rowCount, rows: display?.rowCount, required: entry.display?.required || false, size: fieldHeight, sortBy: display?.choicesDisplay?.sortBy && display.choicesDisplay.sortBy, displayOption: fieldDefinition.type === 'boolean'
|
|
168
174
|
? display?.booleanDisplay
|
|
169
|
-
: display?.choicesDisplay?.type && display.choicesDisplay.type, label: display?.label, description: display?.description, tooltip: display?.tooltip, selectOptions:
|
|
170
|
-
entry.enumWithLabels, additionalProps: additionalProps, isCombobox: fieldDefinition.nonStrictEnum, strictlyTrue: fieldDefinition.strictlyTrue })));
|
|
175
|
+
: display?.choicesDisplay?.type && display.choicesDisplay.type, label: display?.label, description: display?.description, tooltip: display?.tooltip, selectOptions: fieldDefinition?.enum, additionalProps: additionalProps, isCombobox: fieldDefinition.nonStrictEnum, strictlyTrue: fieldDefinition.strictlyTrue })));
|
|
171
176
|
}
|
|
172
177
|
}
|
|
173
178
|
else if (entry.type === 'columns') {
|
|
@@ -482,11 +482,6 @@ export function convertDocToEntries(document) {
|
|
|
482
482
|
sortBy: 'ASC',
|
|
483
483
|
},
|
|
484
484
|
},
|
|
485
|
-
enumWithLabels: [
|
|
486
|
-
{ label: 'Public', value: 'Public' },
|
|
487
|
-
{ label: 'Private', value: 'Private' },
|
|
488
|
-
{ label: 'Portal', value: 'Portal' },
|
|
489
|
-
],
|
|
490
485
|
});
|
|
491
486
|
}
|
|
492
487
|
entries.push({
|
|
@@ -507,8 +502,8 @@ export function formatDataToDoc(data) {
|
|
|
507
502
|
uploadedDate: data.uploadedDate,
|
|
508
503
|
versionId: data.versionId,
|
|
509
504
|
metadata: {
|
|
510
|
-
type: data.type,
|
|
511
|
-
view_permission: data.view_permission,
|
|
505
|
+
type: data.type ?? '',
|
|
506
|
+
view_permission: data.view_permission ?? '',
|
|
512
507
|
},
|
|
513
508
|
};
|
|
514
509
|
}
|