@truedat/df 8.7.0 → 8.7.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.
- package/package.json +4 -4
- package/src/components/DynamicFormViewer.js +3 -3
- package/src/components/DynamicFormWithTranslations.js +4 -4
- package/src/components/FieldGroupDetail.js +1 -1
- package/src/components/FieldGroupWithTranslations.js +1 -1
- package/src/components/SelectableDynamicForm.js +1 -1
- package/src/components/__tests__/DynamicFieldValue.spec.js +2 -2
- package/src/components/__tests__/DynamicFormViewer.spec.js +7 -7
- package/src/components/__tests__/EditableDynamicFieldValue.spec.js +1 -1
- package/src/components/__tests__/FieldViewerValue.spec.js +12 -12
- package/src/components/__tests__/SelectDynamicFormWithTranslations.spec.js +1 -1
- package/src/components/__tests__/SelectableDynamicForm.spec.js +16 -12
- package/src/components/hierarchies/HierarchyView.js +9 -9
- package/src/components/hierarchies/__tests__/HierarchyRoutes.spec.js +1 -1
- package/src/components/widgets/DropdownDataLoader.js +1 -1
- package/src/components/widgets/DynamicField.js +5 -5
- package/src/components/widgets/DynamicTableField.js +129 -125
- package/src/components/widgets/GroupPreview.js +2 -2
- package/src/components/widgets/HierarchyPreview.js +1 -1
- package/src/components/widgets/ImageField.js +2 -3
- package/src/components/widgets/MarkdownField.js +0 -1
- package/src/components/widgets/StandardDropdown.js +5 -5
- package/src/components/widgets/StringField.js +1 -4
- package/src/components/widgets/TableField.js +1 -1
- package/src/components/widgets/UserGroupPreview.js +1 -1
- package/src/components/widgets/__tests__/CheckboxField.spec.js +2 -2
- package/src/components/widgets/__tests__/DropdownField.spec.js +2 -2
- package/src/components/widgets/__tests__/DynamicField.spec.js +11 -3
- package/src/components/widgets/__tests__/DynamicTableField.spec.js +237 -237
- package/src/components/widgets/__tests__/GroupPreview.spec.js +11 -11
- package/src/components/widgets/__tests__/HierarchyDropdown.spec.js +3 -3
- package/src/components/widgets/__tests__/NumberField.spec.js +1 -1
- package/src/components/widgets/__tests__/PairListField.spec.js +3 -3
- package/src/components/widgets/__tests__/StandardDropdown.spec.js +1 -1
- package/src/components/widgets/__tests__/UserGroupPreview.spec.js +14 -10
- package/src/messages/index.js +1 -1
- package/src/reducers/__tests__/dfMessage.spec.js +5 -5
- package/src/reducers/__tests__/selectedDomain.spec.js +2 -2
- package/src/reducers/__tests__/selectedDomains.spec.js +2 -2
- package/src/reducers/dfMessage.js +4 -4
- package/src/selectors/getOptions.js +2 -2
- package/src/selectors/templates.js +2 -2
- package/src/templates/components/Template.js +2 -2
- package/src/templates/components/TemplateFilters.js +1 -1
- package/src/templates/components/TemplateLoader.js +1 -1
- package/src/templates/components/TemplateRoutes.js +1 -1
- package/src/templates/components/Templates.js +1 -6
- package/src/templates/components/TemplatesContext.js +3 -3
- package/src/templates/components/TemplatesTable.js +1 -1
- package/src/templates/components/__tests__/TemplateLoader.spec.js +2 -2
- package/src/templates/components/__tests__/TemplateRoutes.spec.js +1 -1
- package/src/templates/components/__tests__/TemplatesTable.spec.js +1 -1
- package/src/templates/components/templateForm/ActiveGroupForm.js +3 -3
- package/src/templates/components/templateForm/ConditionalFieldForm.js +3 -3
- package/src/templates/components/templateForm/DependentDomain.js +3 -3
- package/src/templates/components/templateForm/FieldDefinition.js +126 -129
- package/src/templates/components/templateForm/HierarchiesList.js +1 -1
- package/src/templates/components/templateForm/MandatoryConditional.js +2 -2
- package/src/templates/components/templateForm/TemplateForm.js +46 -41
- package/src/templates/components/templateForm/ValuesConfiguration.js +69 -56
- package/src/templates/components/templateForm/ValuesField.js +43 -43
- package/src/templates/components/templateForm/__tests__/DefaultValue.spec.js +35 -35
- package/src/templates/components/templateForm/__tests__/DependentDomain.spec.js +1 -1
- package/src/templates/components/templateForm/__tests__/FieldDefinition.spec.js +227 -201
- package/src/templates/components/templateForm/__tests__/FieldForm.spec.js +12 -10
- package/src/templates/components/templateForm/__tests__/MandatoryConditional.spec.js +3 -3
- package/src/templates/components/templateForm/__tests__/SwitchListForm.spec.js +5 -5
- package/src/templates/components/templateForm/__tests__/SwitchSegment.spec.js +8 -8
- package/src/templates/components/templateForm/__tests__/TableValuesForm.spec.js +207 -189
- package/src/templates/components/templateForm/__tests__/TemplateForm.spec.js +42 -13
- package/src/templates/components/templateForm/__tests__/TemplateFormActions.spec.js +1 -1
- package/src/templates/components/templateForm/__tests__/TemplateRelationsForm.spec.js +3 -1
- package/src/templates/components/templateForm/__tests__/ValuesField.spec.js +6 -6
- package/src/templates/components/templateForm/__tests__/ValuesListForm.spec.js +4 -4
- package/src/templates/components/templateForm/__tests__/ValuesSelector.spec.js +3 -3
- package/src/templates/components/templateForm/widgetDefinitions.js +2 -0
- package/src/templates/reducers/__tests__/allTemplates.spec.js +4 -4
- package/src/templates/reducers/__tests__/selectedTemplate.spec.js +2 -2
- package/src/templates/reducers/__tests__/template.spec.js +4 -4
- package/src/templates/reducers/__tests__/templateDeleting.spec.js +2 -2
- package/src/templates/reducers/__tests__/templateLoading.spec.js +2 -2
- package/src/templates/reducers/__tests__/templates.spec.js +3 -3
- package/src/templates/reducers/__tests__/templatesLoading.spec.js +2 -2
- package/src/templates/sagas/__tests__/createTemplate.spec.js +3 -3
- package/src/templates/sagas/__tests__/fetchTemplates.spec.js +1 -1
- package/src/templates/sagas/index.js +2 -2
- package/src/templates/utils/__tests__/applyDefaults.spec.js +4 -4
- package/src/templates/utils/__tests__/filterDomains.spec.js +15 -15
- package/src/templates/utils/__tests__/filterFields.spec.js +2 -2
- package/src/templates/utils/__tests__/filterSwitches.spec.js +5 -5
- package/src/templates/utils/__tests__/filterValues.spec.js +4 -4
- package/src/templates/utils/__tests__/formatLegacyContent.spec.js +7 -7
- package/src/templates/utils/applyTemplate.js +66 -53
- package/src/templates/utils/filterDepends.js +1 -1
- package/src/templates/utils/filterSwitches.js +3 -3
- package/src/templates/utils/filterValues.js +4 -5
- package/src/templates/utils/flattenFields.js +2 -2
- package/src/templates/utils/formatLegacyContent.js +2 -1
- package/src/templates/utils/parseFieldOptions.js +15 -14
- package/src/templates/utils/parseGroups.js +43 -43
- package/src/templates/utils/validateContent.js +4 -4
|
@@ -5,154 +5,151 @@ import { useIntl } from "react-intl";
|
|
|
5
5
|
import { useEffect } from "react";
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
getCardinalityOptions,
|
|
9
|
+
getWidgetOptions,
|
|
10
|
+
getTypeOptions,
|
|
11
|
+
WIDGETS,
|
|
12
12
|
} from "./widgetDefinitions";
|
|
13
13
|
import { getValues } from "./valueDefinitions";
|
|
14
14
|
|
|
15
15
|
const defaultType = (values) => _.flow(_.map("value"), _.first)(values);
|
|
16
16
|
|
|
17
17
|
const FieldDefinition = ({
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
18
|
+
allowedTypes = [],
|
|
19
|
+
allowedWidgets = [],
|
|
20
|
+
cardinality,
|
|
21
|
+
defaultField,
|
|
22
|
+
fieldNamePrefix,
|
|
23
|
+
mandatory,
|
|
24
|
+
onChange,
|
|
25
|
+
subscribableField,
|
|
26
|
+
type,
|
|
27
|
+
valueName,
|
|
28
|
+
widget,
|
|
29
29
|
}) => {
|
|
30
|
-
|
|
30
|
+
const { formatMessage } = useIntl();
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
const handleTypeChange = (e, data) => {
|
|
41
|
-
const { value } = data;
|
|
42
|
-
changeValue(valueName, defaultType(getValues(widget, value)) || "null");
|
|
43
|
-
onChange(e, {
|
|
44
|
-
name: defaultField,
|
|
45
|
-
value: { value: "", origin: "default" },
|
|
32
|
+
const changeValue = (name, value) =>
|
|
33
|
+
value == "null"
|
|
34
|
+
? onChange(null, { name, value: null })
|
|
35
|
+
: onChange(null, {
|
|
36
|
+
name,
|
|
37
|
+
value: { [value]: null },
|
|
46
38
|
});
|
|
47
|
-
onChange(e, { name: subscribableField, value: false });
|
|
48
|
-
onChange(e, data);
|
|
49
|
-
};
|
|
50
39
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
40
|
+
const handleTypeChange = (e, data) => {
|
|
41
|
+
const { value } = data;
|
|
42
|
+
changeValue(valueName, defaultType(getValues(widget, value)) || "null");
|
|
43
|
+
onChange(e, {
|
|
44
|
+
name: defaultField,
|
|
45
|
+
value: { value: "", origin: "default" },
|
|
46
|
+
});
|
|
47
|
+
onChange(e, { name: subscribableField, value: false });
|
|
48
|
+
onChange(e, data);
|
|
49
|
+
};
|
|
57
50
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
defaultType(getValues(value, updatedType)) || "null",
|
|
65
|
-
);
|
|
66
|
-
onChange(e, {
|
|
67
|
-
name: defaultField,
|
|
68
|
-
value: { value: "", origin: "default" },
|
|
69
|
-
});
|
|
70
|
-
onChange(e, { name: subscribableField, value: false });
|
|
71
|
-
onChange(e, data);
|
|
72
|
-
};
|
|
51
|
+
const handleCardinalityChange = (e, data) => {
|
|
52
|
+
const value = data?.value;
|
|
53
|
+
onChange(e, data);
|
|
54
|
+
if (_.includes(value)(["1", "+"]) && !_.isEmpty(mandatory))
|
|
55
|
+
onChange(e, { name: `${fieldNamePrefix}.mandatory`, value: null });
|
|
56
|
+
};
|
|
73
57
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
58
|
+
const handleWidgetChange = (e, data) => {
|
|
59
|
+
const { value } = data;
|
|
60
|
+
const types = _.find({ value })(WIDGETS).types;
|
|
61
|
+
const updatedType = _.indexOf(type)(types) < 0 ? _.head(types) : type;
|
|
62
|
+
changeValue(
|
|
63
|
+
valueName,
|
|
64
|
+
defaultType(getValues(value, updatedType)) || "null",
|
|
65
|
+
);
|
|
66
|
+
onChange(e, {
|
|
67
|
+
name: defaultField,
|
|
68
|
+
value: { value: "", origin: "default" },
|
|
69
|
+
});
|
|
70
|
+
onChange(e, { name: subscribableField, value: false });
|
|
71
|
+
onChange(e, data);
|
|
72
|
+
};
|
|
81
73
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
value: widgetOption.cardinalities[0],
|
|
90
|
-
});
|
|
91
|
-
};
|
|
74
|
+
const typeCheckOnChange = (widgetOption) => {
|
|
75
|
+
if (widgetOption && _.indexOf(type)(widgetOption.types) < 0)
|
|
76
|
+
onChange(null, {
|
|
77
|
+
name: `${fieldNamePrefix}.type`,
|
|
78
|
+
value: widgetOption.types[0],
|
|
79
|
+
});
|
|
80
|
+
};
|
|
92
81
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
82
|
+
const cardinalityCheckOnChange = (widgetOption) => {
|
|
83
|
+
if (widgetOption && _.indexOf(cardinality)(widgetOption.cardinalities) < 0)
|
|
84
|
+
onChange(null, {
|
|
85
|
+
name: `${fieldNamePrefix}.cardinality`,
|
|
86
|
+
value: widgetOption.cardinalities[0],
|
|
87
|
+
});
|
|
88
|
+
};
|
|
100
89
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
: _.filter((type) => allowedTypes.includes(type.value))(
|
|
109
|
-
getTypeOptions(widget),
|
|
110
|
-
);
|
|
90
|
+
//On widget change, verify if type and cardinality are still valid
|
|
91
|
+
useEffect(() => {
|
|
92
|
+
const widgetOption = _.find({ value: widget })(WIDGETS);
|
|
93
|
+
typeCheckOnChange(widgetOption);
|
|
94
|
+
cardinalityCheckOnChange(widgetOption);
|
|
95
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
96
|
+
}, [widget, type]);
|
|
111
97
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
98
|
+
const widgetOptions = _.isEmpty(allowedWidgets)
|
|
99
|
+
? getWidgetOptions()
|
|
100
|
+
: _.filter((widget) => allowedWidgets.includes(widget.value))(
|
|
101
|
+
getWidgetOptions(),
|
|
102
|
+
);
|
|
103
|
+
const typeOptions = _.isEmpty(allowedTypes)
|
|
104
|
+
? getTypeOptions(widget)
|
|
105
|
+
: _.filter((type) => allowedTypes.includes(type.value))(
|
|
106
|
+
getTypeOptions(widget),
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
return (
|
|
110
|
+
<Form.Group size="small" widths="equal">
|
|
111
|
+
<Form.Dropdown
|
|
112
|
+
name={`${fieldNamePrefix}.widget`}
|
|
113
|
+
fluid
|
|
114
|
+
selection
|
|
115
|
+
label={formatMessage({ id: "template.field.widget" })}
|
|
116
|
+
value={widget}
|
|
117
|
+
options={widgetOptions}
|
|
118
|
+
required
|
|
119
|
+
onChange={handleWidgetChange}
|
|
120
|
+
/>
|
|
121
|
+
<Form.Dropdown
|
|
122
|
+
fluid
|
|
123
|
+
selection
|
|
124
|
+
label={formatMessage({ id: "template.field.type" })}
|
|
125
|
+
onChange={handleTypeChange}
|
|
126
|
+
name={`${fieldNamePrefix}.type`}
|
|
127
|
+
value={type}
|
|
128
|
+
required
|
|
129
|
+
options={typeOptions}
|
|
130
|
+
/>
|
|
131
|
+
<Form.Dropdown
|
|
132
|
+
fluid
|
|
133
|
+
selection
|
|
134
|
+
label={formatMessage({ id: "template.field.cardinality" })}
|
|
135
|
+
name={`${fieldNamePrefix}.cardinality`}
|
|
136
|
+
value={cardinality}
|
|
137
|
+
onChange={handleCardinalityChange}
|
|
138
|
+
required
|
|
139
|
+
options={getCardinalityOptions(widget)}
|
|
140
|
+
/>
|
|
141
|
+
</Form.Group>
|
|
142
|
+
);
|
|
146
143
|
};
|
|
147
144
|
|
|
148
145
|
FieldDefinition.propTypes = {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
146
|
+
fieldNamePrefix: PropTypes.string,
|
|
147
|
+
handleWidgetChange: PropTypes.func,
|
|
148
|
+
handleTypeChange: PropTypes.func,
|
|
149
|
+
handleCardinalityChange: PropTypes.func,
|
|
150
|
+
type: PropTypes.string,
|
|
151
|
+
widget: PropTypes.string,
|
|
152
|
+
cardinality: PropTypes.string,
|
|
156
153
|
};
|
|
157
154
|
|
|
158
155
|
export default FieldDefinition;
|
|
@@ -16,13 +16,13 @@ export const MandatoryConditional = ({
|
|
|
16
16
|
const fieldOptions = _.flow(
|
|
17
17
|
_.reject({ name }),
|
|
18
18
|
_.reject((field) => _.isEmpty(field?.values?.fixed)),
|
|
19
|
-
_.map(({ label, name }) => ({ text: label, value: name }))
|
|
19
|
+
_.map(({ label, name }) => ({ text: label, value: name })),
|
|
20
20
|
)(allFields);
|
|
21
21
|
const valueOptions = _.flow(
|
|
22
22
|
_.find({ name: depends }),
|
|
23
23
|
_.propOr([], "values.fixed"),
|
|
24
24
|
_.reject(_.isNil),
|
|
25
|
-
_.map((value) => ({ text: value, value }))
|
|
25
|
+
_.map((value) => ({ text: value, value })),
|
|
26
26
|
)(allFields);
|
|
27
27
|
const handleChange = (e, { name, value }) => {
|
|
28
28
|
if (_.includes("mandatory.on")(name) && !_.isEmpty(field?.mandatory?.to_be))
|
|
@@ -17,7 +17,7 @@ const scopeOptions = (formatMessage) =>
|
|
|
17
17
|
text: formatMessage({ id: `template.scope.${value}` }),
|
|
18
18
|
value,
|
|
19
19
|
})),
|
|
20
|
-
_.sortBy("text")
|
|
20
|
+
_.sortBy("text"),
|
|
21
21
|
)([
|
|
22
22
|
"bg",
|
|
23
23
|
"dd",
|
|
@@ -66,55 +66,58 @@ export const TemplateForm = ({ loading, template, onSubmit }) => {
|
|
|
66
66
|
});
|
|
67
67
|
|
|
68
68
|
const handleRelationsChange = useCallback((relations) => {
|
|
69
|
-
setEditedTemplate((prev) =>
|
|
69
|
+
setEditedTemplate((prev) =>
|
|
70
|
+
_.assoc("template_resource_relations", relations)(prev),
|
|
71
|
+
);
|
|
70
72
|
}, []);
|
|
71
73
|
|
|
72
|
-
const formattedFields = (fields) =>
|
|
73
|
-
_.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
74
|
+
const formattedFields = (fields) =>
|
|
75
|
+
_.flow(
|
|
76
|
+
_.map((field) => {
|
|
77
|
+
const fieldProperties = [
|
|
78
|
+
"label",
|
|
79
|
+
"name",
|
|
80
|
+
"description",
|
|
81
|
+
"type",
|
|
82
|
+
"widget",
|
|
83
|
+
"cardinality",
|
|
84
|
+
"values",
|
|
85
|
+
"default",
|
|
86
|
+
"subscribable",
|
|
87
|
+
"editable",
|
|
88
|
+
"searchable",
|
|
89
|
+
"ai_suggestion",
|
|
90
|
+
];
|
|
88
91
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
(fieldProperties);
|
|
92
|
+
const dependsProperty = _.isEmpty(_.path("depends.on")(field))
|
|
93
|
+
? []
|
|
94
|
+
: ["depends"];
|
|
95
|
+
const mandatoryProperty = _.isEmpty(_.path("mandatory.on")(field))
|
|
96
|
+
? []
|
|
97
|
+
: ["mandatory"];
|
|
98
|
+
const allFields = _.flow(
|
|
99
|
+
_.concat(dependsProperty),
|
|
100
|
+
_.concat(mandatoryProperty),
|
|
101
|
+
)(fieldProperties);
|
|
99
102
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
(field);
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
103
|
+
if (field?.type === "dynamic_table") {
|
|
104
|
+
const tableColumns = formattedFields(field?.values?.table_columns);
|
|
105
|
+
return _.flow(
|
|
106
|
+
_.set("values.table_columns", tableColumns),
|
|
107
|
+
_.pick(allFields),
|
|
108
|
+
_.omit(["default"]),
|
|
109
|
+
)(field);
|
|
110
|
+
}
|
|
111
|
+
return _.pick(allFields)(field);
|
|
112
|
+
}),
|
|
113
|
+
)(fields);
|
|
111
114
|
|
|
112
115
|
const handleSubmit = () => {
|
|
113
116
|
const formattedContent = _.flow(
|
|
114
117
|
_.prop("content"),
|
|
115
118
|
_.map(({ name, fields }) => {
|
|
116
119
|
return { name, fields: formattedFields(fields) };
|
|
117
|
-
})
|
|
120
|
+
}),
|
|
118
121
|
)(editedTemplate);
|
|
119
122
|
|
|
120
123
|
onSubmit({ template: { ...editedTemplate, content: formattedContent } });
|
|
@@ -213,7 +216,9 @@ export const TemplateForm = ({ loading, template, onSubmit }) => {
|
|
|
213
216
|
label={formatMessage({ id: "template.form.subscope" })}
|
|
214
217
|
value={subscopeValue}
|
|
215
218
|
onChange={handleChange}
|
|
216
|
-
disabled={
|
|
219
|
+
disabled={
|
|
220
|
+
editedTemplate?.scope !== "bg" && editedTemplate?.scope !== "ri"
|
|
221
|
+
}
|
|
217
222
|
/>
|
|
218
223
|
</Form.Group>
|
|
219
224
|
{scopesWithRelations?.includes(editedTemplate.scope) && (
|
|
@@ -4,64 +4,77 @@ import { useIntl } from "react-intl";
|
|
|
4
4
|
|
|
5
5
|
const searchableEnabledScopes = ["bg", "dq", "ie", "ri", "dd"];
|
|
6
6
|
|
|
7
|
-
const ValuesConfiguration = ({
|
|
8
|
-
|
|
7
|
+
const ValuesConfiguration = ({
|
|
8
|
+
aiSuggestion,
|
|
9
|
+
editable,
|
|
10
|
+
searchable,
|
|
11
|
+
fieldNamePrefix,
|
|
12
|
+
hasAiSuggestion,
|
|
13
|
+
keyType,
|
|
14
|
+
onChange,
|
|
15
|
+
scope,
|
|
16
|
+
subscribable,
|
|
17
|
+
subscribableField,
|
|
18
|
+
}) => {
|
|
19
|
+
const { formatMessage } = useIntl();
|
|
9
20
|
|
|
10
|
-
|
|
21
|
+
return (
|
|
22
|
+
<Form.Group size="small" widths="equal">
|
|
23
|
+
<Form.Field>
|
|
24
|
+
<Form.Checkbox
|
|
25
|
+
name={`${fieldNamePrefix}.editable`}
|
|
26
|
+
label={formatMessage({
|
|
27
|
+
id: "template.field.editable",
|
|
28
|
+
defaultMessage: "Editable",
|
|
29
|
+
})}
|
|
30
|
+
checked={editable}
|
|
31
|
+
onChange={(e, { name, checked: value }) =>
|
|
32
|
+
onChange(null, { name, value })
|
|
33
|
+
}
|
|
34
|
+
/>
|
|
35
|
+
</Form.Field>
|
|
36
|
+
{hasAiSuggestion ? (
|
|
11
37
|
<Form.Field>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
38
|
+
<Form.Checkbox
|
|
39
|
+
name={`${fieldNamePrefix}.ai_suggestion`}
|
|
40
|
+
label={formatMessage({
|
|
41
|
+
id: "template.field.ai_suggestion",
|
|
42
|
+
defaultMessage: "AI Suggestions",
|
|
43
|
+
})}
|
|
44
|
+
checked={aiSuggestion}
|
|
45
|
+
onChange={(_e, { name, checked: value }) =>
|
|
46
|
+
onChange(null, { name, value })
|
|
47
|
+
}
|
|
48
|
+
/>
|
|
23
49
|
</Form.Field>
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
/>
|
|
52
|
-
</Form.Field>
|
|
53
|
-
) : null}
|
|
54
|
-
{_.includes(keyType)(["fixed", "fixed_tuple"]) ? (
|
|
55
|
-
<Form.Checkbox
|
|
56
|
-
name={subscribableField}
|
|
57
|
-
label={formatMessage({ id: "template.field.subscribable" })}
|
|
58
|
-
checked={subscribable}
|
|
59
|
-
onChange={(_e, { name, checked: value }) =>
|
|
60
|
-
onChange(null, { name, value })
|
|
61
|
-
}
|
|
62
|
-
/>
|
|
63
|
-
) : null}
|
|
50
|
+
) : null}
|
|
51
|
+
{_.includes(scope)(searchableEnabledScopes) ? (
|
|
52
|
+
<Form.Field>
|
|
53
|
+
<Form.Checkbox
|
|
54
|
+
name={`${fieldNamePrefix}.searchable`}
|
|
55
|
+
label={formatMessage({
|
|
56
|
+
id: "template.field.searchable",
|
|
57
|
+
defaultMessage: "Sercheable",
|
|
58
|
+
})}
|
|
59
|
+
checked={searchable}
|
|
60
|
+
onChange={(_e, { name, checked: value }) =>
|
|
61
|
+
onChange(null, { name, value })
|
|
62
|
+
}
|
|
63
|
+
/>
|
|
64
|
+
</Form.Field>
|
|
65
|
+
) : null}
|
|
66
|
+
{_.includes(keyType)(["fixed", "fixed_tuple"]) ? (
|
|
67
|
+
<Form.Checkbox
|
|
68
|
+
name={subscribableField}
|
|
69
|
+
label={formatMessage({ id: "template.field.subscribable" })}
|
|
70
|
+
checked={subscribable}
|
|
71
|
+
onChange={(_e, { name, checked: value }) =>
|
|
72
|
+
onChange(null, { name, value })
|
|
73
|
+
}
|
|
74
|
+
/>
|
|
75
|
+
) : null}
|
|
64
76
|
</Form.Group>
|
|
65
|
-
|
|
77
|
+
);
|
|
78
|
+
};
|
|
66
79
|
|
|
67
|
-
export default ValuesConfiguration;
|
|
80
|
+
export default ValuesConfiguration;
|
|
@@ -37,9 +37,9 @@ export const ValuesField = ({
|
|
|
37
37
|
value == "null"
|
|
38
38
|
? onChange(null, { name, value: null })
|
|
39
39
|
: onChange(null, {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
name,
|
|
41
|
+
value: { [value]: null },
|
|
42
|
+
});
|
|
43
43
|
|
|
44
44
|
const onSelectionChange = (e, { value }) => {
|
|
45
45
|
onChange(e, { name: subscribableField, value: false });
|
|
@@ -56,52 +56,52 @@ export const ValuesField = ({
|
|
|
56
56
|
return field.cardinality == "0"
|
|
57
57
|
? null
|
|
58
58
|
: valueSegment(values, keyType, fieldType) && (
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
59
|
+
<Segment>
|
|
60
|
+
{_.size(values) > 1 ? (
|
|
61
|
+
<Form.Dropdown
|
|
62
|
+
fluid
|
|
63
|
+
selection
|
|
64
|
+
label={formatMessage({ id: "template.field.values" })}
|
|
65
|
+
onChange={onSelectionChange}
|
|
66
|
+
value={keyType || "null"}
|
|
67
|
+
required
|
|
68
|
+
options={valueTypes(values)}
|
|
69
|
+
/>
|
|
70
|
+
) : null}
|
|
71
|
+
{keyType ? (
|
|
72
|
+
<ValuesSelector
|
|
73
|
+
cardinality={field?.cardinality}
|
|
74
|
+
defaultField={defaultField}
|
|
75
|
+
defaultValue={field?.default}
|
|
76
|
+
name={name}
|
|
77
|
+
formatMessage={formatMessage}
|
|
78
|
+
onChange={onChange}
|
|
79
|
+
type={keyType}
|
|
80
|
+
values={_.path(`values.${keyType}`)(field)}
|
|
81
|
+
/>
|
|
82
|
+
) : null}
|
|
83
|
+
<ValuesConfiguration
|
|
84
|
+
aiSuggestion={ai_suggestion}
|
|
85
|
+
editable={editable}
|
|
86
|
+
keyType={keyType}
|
|
87
|
+
onChange={onChange}
|
|
88
|
+
searchable={searchable}
|
|
89
|
+
fieldNamePrefix={fieldNamePrefix}
|
|
90
|
+
hasAiSuggestion={hasAiSuggestion}
|
|
91
|
+
subscribableField={subscribableField}
|
|
92
|
+
subscribable={field?.subscribable}
|
|
93
|
+
scope={scope}
|
|
69
94
|
/>
|
|
70
|
-
|
|
71
|
-
{keyType ? (
|
|
72
|
-
<ValuesSelector
|
|
73
|
-
cardinality={field?.cardinality}
|
|
95
|
+
<DefaultValue
|
|
74
96
|
defaultField={defaultField}
|
|
75
|
-
|
|
76
|
-
|
|
97
|
+
field={field}
|
|
98
|
+
fieldType={fieldType}
|
|
77
99
|
formatMessage={formatMessage}
|
|
78
100
|
onChange={onChange}
|
|
79
101
|
type={keyType}
|
|
80
|
-
values={_.path(`values.${keyType}`)(field)}
|
|
81
102
|
/>
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
aiSuggestion={ai_suggestion}
|
|
85
|
-
editable={editable}
|
|
86
|
-
keyType={keyType}
|
|
87
|
-
onChange={onChange}
|
|
88
|
-
searchable={searchable}
|
|
89
|
-
fieldNamePrefix={fieldNamePrefix}
|
|
90
|
-
hasAiSuggestion={hasAiSuggestion}
|
|
91
|
-
subscribableField={subscribableField}
|
|
92
|
-
subscribable={field?.subscribable}
|
|
93
|
-
scope={scope}
|
|
94
|
-
/>
|
|
95
|
-
<DefaultValue
|
|
96
|
-
defaultField={defaultField}
|
|
97
|
-
field={field}
|
|
98
|
-
fieldType={fieldType}
|
|
99
|
-
formatMessage={formatMessage}
|
|
100
|
-
onChange={onChange}
|
|
101
|
-
type={keyType}
|
|
102
|
-
/>
|
|
103
|
-
</Segment>
|
|
104
|
-
);
|
|
103
|
+
</Segment>
|
|
104
|
+
);
|
|
105
105
|
};
|
|
106
106
|
|
|
107
107
|
ValuesField.propTypes = {
|