@truedat/df 4.35.5 → 4.36.0
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/CHANGELOG.md +6 -0
- package/package.json +4 -4
- package/src/components/FieldGroupDetail.js +22 -4
- package/src/components/widgets/DynamicField.js +3 -0
- package/src/components/widgets/IdentifierField.js +20 -0
- package/src/messages/en.js +2 -0
- package/src/messages/es.js +2 -0
- package/src/styles/fieldGroupDetail.less +11 -0
- package/src/styles/identifierField.less +8 -0
- package/src/templates/components/templateForm/DefaultValue.js +1 -0
- package/src/templates/components/templateForm/ValuesField.js +42 -42
- package/src/templates/components/templateForm/__tests__/TemplateForm.spec.js +1 -0
- package/src/templates/components/templateForm/__tests__/__snapshots__/FieldForm.spec.js.snap +24 -0
- package/src/templates/components/templateForm/__tests__/__snapshots__/TemplateForm.spec.js.snap +4 -4
- package/src/templates/components/templateForm/widgetDefinitions.js +8 -0
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@truedat/df",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.36.0",
|
|
4
4
|
"description": "Truedat Web Data Quality Module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"jsnext:main": "src/index.js",
|
|
@@ -80,8 +80,8 @@
|
|
|
80
80
|
]
|
|
81
81
|
},
|
|
82
82
|
"dependencies": {
|
|
83
|
-
"@truedat/auth": "4.
|
|
84
|
-
"@truedat/core": "4.
|
|
83
|
+
"@truedat/auth": "4.36.0",
|
|
84
|
+
"@truedat/core": "4.36.0",
|
|
85
85
|
"axios": "^0.19.2",
|
|
86
86
|
"path-to-regexp": "^1.7.0",
|
|
87
87
|
"prop-types": "^15.7.2",
|
|
@@ -100,5 +100,5 @@
|
|
|
100
100
|
"react-dom": ">= 16.8.6 < 17",
|
|
101
101
|
"semantic-ui-react": ">= 0.88.2 < 2.1"
|
|
102
102
|
},
|
|
103
|
-
"gitHead": "
|
|
103
|
+
"gitHead": "6bf7c33362c73f97c8e5ff61f19c694ef28a0c3d"
|
|
104
104
|
}
|
|
@@ -14,12 +14,13 @@ import DomainPreview from "./widgets/DomainPreview";
|
|
|
14
14
|
import FieldGroupCopy from "./FieldGroupCopy";
|
|
15
15
|
import ImagePreview from "./widgets/ImagePreview";
|
|
16
16
|
import SystemPreview from "./widgets/SystemPreview";
|
|
17
|
+
import "../styles/fieldGroupDetail.less";
|
|
17
18
|
|
|
18
19
|
const RichTextEditor = React.lazy(() =>
|
|
19
20
|
import("@truedat/core/components/RichTextEditor")
|
|
20
21
|
);
|
|
21
22
|
|
|
22
|
-
const ValueRenderByType = ({ value, type, multiple, values }) => {
|
|
23
|
+
const ValueRenderByType = ({ value, type, multiple, values, widget }) => {
|
|
23
24
|
switch (type) {
|
|
24
25
|
case "url":
|
|
25
26
|
return (
|
|
@@ -69,7 +70,18 @@ const ValueRenderByType = ({ value, type, multiple, values }) => {
|
|
|
69
70
|
if (multiple) {
|
|
70
71
|
return <Label>{value}</Label>;
|
|
71
72
|
}
|
|
72
|
-
return
|
|
73
|
+
return (
|
|
74
|
+
<div
|
|
75
|
+
className={[
|
|
76
|
+
"default-value",
|
|
77
|
+
widget === "identifier" ? "identifier-value" : "",
|
|
78
|
+
]
|
|
79
|
+
.join(" ")
|
|
80
|
+
.trim()}
|
|
81
|
+
>
|
|
82
|
+
{value}
|
|
83
|
+
</div>
|
|
84
|
+
);
|
|
73
85
|
}
|
|
74
86
|
};
|
|
75
87
|
|
|
@@ -78,6 +90,7 @@ ValueRenderByType.propTypes = {
|
|
|
78
90
|
type: PropTypes.string,
|
|
79
91
|
values: PropTypes.any,
|
|
80
92
|
multiple: PropTypes.bool,
|
|
93
|
+
widget: PropTypes.string,
|
|
81
94
|
};
|
|
82
95
|
|
|
83
96
|
const parseField = (field) => {
|
|
@@ -104,7 +117,7 @@ const parseField = (field) => {
|
|
|
104
117
|
const DynamicFieldValue = ({ label, value, type, values, widget }) => {
|
|
105
118
|
return (
|
|
106
119
|
<List.Item>
|
|
107
|
-
<List.Header>{label}</List.Header>
|
|
120
|
+
<List.Header className="dynamic-field-header">{label}</List.Header>
|
|
108
121
|
<List.Description>
|
|
109
122
|
{_.isNil(value) || (!_.isNumber(value) && _.isEmpty(value)) ? (
|
|
110
123
|
<Icon name="minus" color="grey" />
|
|
@@ -127,7 +140,12 @@ const DynamicFieldValue = ({ label, value, type, values, widget }) => {
|
|
|
127
140
|
) : widget === "password" ? (
|
|
128
141
|
"*****"
|
|
129
142
|
) : (
|
|
130
|
-
<ValueRenderByType
|
|
143
|
+
<ValueRenderByType
|
|
144
|
+
value={value}
|
|
145
|
+
type={type}
|
|
146
|
+
values={values}
|
|
147
|
+
widget={widget}
|
|
148
|
+
/>
|
|
131
149
|
)}
|
|
132
150
|
</List.Description>
|
|
133
151
|
</List.Item>
|
|
@@ -8,6 +8,7 @@ import CheckboxField from "./CheckboxField";
|
|
|
8
8
|
import ColorPickerField from "./ColorPickerField";
|
|
9
9
|
import DropdownField from "./DropdownField";
|
|
10
10
|
import EnrichedTextField from "./EnrichedTextField";
|
|
11
|
+
import IdentifierField from "./IdentifierField";
|
|
11
12
|
import ImageField from "./ImageField";
|
|
12
13
|
import PairListField from "./PairListField";
|
|
13
14
|
import PasswordField from "./PasswordField";
|
|
@@ -24,6 +25,8 @@ const isNullOrEmpty = (value) =>
|
|
|
24
25
|
|
|
25
26
|
const FieldByWidget = ({ scope, widget, onChange, field }) => {
|
|
26
27
|
switch (widget) {
|
|
28
|
+
case "identifier":
|
|
29
|
+
return <IdentifierField field={field} />;
|
|
27
30
|
case "dropdown":
|
|
28
31
|
return <DropdownField field={field} scope={scope} onChange={onChange} />;
|
|
29
32
|
case "radio":
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import PropTypes from "prop-types";
|
|
3
|
+
import { useIntl } from "react-intl";
|
|
4
|
+
|
|
5
|
+
import "../../styles/identifierField.less";
|
|
6
|
+
|
|
7
|
+
export const IdentifierField = ({ field: { value } }) => {
|
|
8
|
+
const { formatMessage } = useIntl();
|
|
9
|
+
return (
|
|
10
|
+
<p className="identifier">
|
|
11
|
+
{value || formatMessage({ id: "template.field.autogenerated" })}
|
|
12
|
+
</p>
|
|
13
|
+
);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
IdentifierField.propTypes = {
|
|
17
|
+
field: PropTypes.object,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export default IdentifierField;
|
package/src/messages/en.js
CHANGED
|
@@ -8,7 +8,9 @@ export default {
|
|
|
8
8
|
"template.actions.delete.confirmation.content":
|
|
9
9
|
"Template {name} will be deleted. Are you sure?",
|
|
10
10
|
"template.actions.delete.confirmation.header": "Delete Template",
|
|
11
|
+
"template.field.autogenerated": "Generated automatically",
|
|
11
12
|
"template.field.cardinality": "Cardinality",
|
|
13
|
+
"template.field.cardinality.0": "None (autogenerated)",
|
|
12
14
|
"template.field.cardinality.*": "None or more",
|
|
13
15
|
"template.field.cardinality.+": "One or more",
|
|
14
16
|
"template.field.cardinality.1": "One",
|
package/src/messages/es.js
CHANGED
|
@@ -8,7 +8,9 @@ export default {
|
|
|
8
8
|
"template.actions.delete.confirmation.content":
|
|
9
9
|
"Se va a eliminar la plantilla {name}. ¿Estás seguro?",
|
|
10
10
|
"template.actions.delete.confirmation.header": "Eliminar plantilla",
|
|
11
|
+
"template.field.autogenerated": "Generado automáticamente",
|
|
11
12
|
"template.field.cardinality": "Cardinalidad",
|
|
13
|
+
"template.field.cardinality.0": "Ninguno (autogenerado)",
|
|
12
14
|
"template.field.cardinality.*": "Ningúno o más",
|
|
13
15
|
"template.field.cardinality.+": "Uno o más",
|
|
14
16
|
"template.field.cardinality.1": "Uno",
|
|
@@ -27,53 +27,53 @@ export const ValuesField = ({
|
|
|
27
27
|
text: formatMessage({ id }),
|
|
28
28
|
}))(options);
|
|
29
29
|
|
|
30
|
-
return
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
30
|
+
return field.cardinality == "0"
|
|
31
|
+
? null
|
|
32
|
+
: valueSegment(values, keyType, fieldType) && (
|
|
33
|
+
<Segment>
|
|
34
|
+
{_.size(values) > 1 && (
|
|
35
|
+
<Form.Dropdown
|
|
36
|
+
fluid
|
|
37
|
+
selection
|
|
38
|
+
label={formatMessage({ id: "template.field.values" })}
|
|
39
|
+
onChange={onSelectionChange}
|
|
40
|
+
value={keyType || "null"}
|
|
41
|
+
required
|
|
42
|
+
options={valueTypes(values)}
|
|
43
|
+
/>
|
|
44
|
+
)}
|
|
45
|
+
{keyType && (
|
|
46
|
+
<ValuesSelector
|
|
47
|
+
cardinality={field?.cardinality}
|
|
48
|
+
defaultField={defaultField}
|
|
49
|
+
defaultValue={field?.default}
|
|
50
|
+
name={name}
|
|
51
|
+
formatMessage={formatMessage}
|
|
52
|
+
onChange={onChange}
|
|
53
|
+
type={keyType}
|
|
54
|
+
values={_.path(`values.${keyType}`)(field)}
|
|
55
|
+
/>
|
|
56
|
+
)}
|
|
57
|
+
{_.includes(keyType)(["fixed", "fixed_tuple"]) && (
|
|
58
|
+
<Form.Checkbox
|
|
59
|
+
name={subscribableField}
|
|
60
|
+
label={formatMessage({ id: "template.field.subscribable" })}
|
|
61
|
+
checked={_.prop("subscribable")(field) || false}
|
|
62
|
+
onChange={(e, { name, checked: value }) =>
|
|
63
|
+
onChange(null, { name, value })
|
|
64
|
+
}
|
|
65
|
+
/>
|
|
66
|
+
)}
|
|
67
|
+
<DefaultValue
|
|
47
68
|
defaultField={defaultField}
|
|
48
|
-
|
|
49
|
-
|
|
69
|
+
field={field}
|
|
70
|
+
fieldType={fieldType}
|
|
50
71
|
formatMessage={formatMessage}
|
|
51
72
|
onChange={onChange}
|
|
52
73
|
type={keyType}
|
|
53
|
-
values={_.path(`values.${keyType}`)(field)}
|
|
54
|
-
/>
|
|
55
|
-
)}
|
|
56
|
-
{_.includes(keyType)(["fixed", "fixed_tuple"]) && (
|
|
57
|
-
<Form.Checkbox
|
|
58
|
-
name={subscribableField}
|
|
59
|
-
label={formatMessage({ id: "template.field.subscribable" })}
|
|
60
|
-
checked={_.prop("subscribable")(field) || false}
|
|
61
|
-
onChange={(e, { name, checked: value }) =>
|
|
62
|
-
onChange(null, { name, value })
|
|
63
|
-
}
|
|
64
74
|
/>
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
defaultField={defaultField}
|
|
68
|
-
field={field}
|
|
69
|
-
fieldType={fieldType}
|
|
70
|
-
formatMessage={formatMessage}
|
|
71
|
-
onChange={onChange}
|
|
72
|
-
type={keyType}
|
|
73
|
-
/>
|
|
74
|
-
</Segment>
|
|
75
|
-
)
|
|
76
|
-
);
|
|
75
|
+
</Segment>
|
|
76
|
+
);
|
|
77
77
|
};
|
|
78
78
|
|
|
79
79
|
ValuesField.propTypes = {
|
package/src/templates/components/templateForm/__tests__/__snapshots__/FieldForm.spec.js.snap
CHANGED
|
@@ -84,6 +84,12 @@ exports[`<FieldForm /> manages handleCardinalityChange 1`] = `
|
|
|
84
84
|
onChange={[Function]}
|
|
85
85
|
options={
|
|
86
86
|
Array [
|
|
87
|
+
Object {
|
|
88
|
+
"icon": "hashtag",
|
|
89
|
+
"key": undefined,
|
|
90
|
+
"text": "Identifier",
|
|
91
|
+
"value": "identifier",
|
|
92
|
+
},
|
|
87
93
|
Object {
|
|
88
94
|
"icon": "minus",
|
|
89
95
|
"key": undefined,
|
|
@@ -425,6 +431,12 @@ exports[`<FieldForm /> matches the latest snapshot 1`] = `
|
|
|
425
431
|
onChange={[Function]}
|
|
426
432
|
options={
|
|
427
433
|
Array [
|
|
434
|
+
Object {
|
|
435
|
+
"icon": "hashtag",
|
|
436
|
+
"key": undefined,
|
|
437
|
+
"text": "Identifier",
|
|
438
|
+
"value": "identifier",
|
|
439
|
+
},
|
|
428
440
|
Object {
|
|
429
441
|
"icon": "minus",
|
|
430
442
|
"key": undefined,
|
|
@@ -711,6 +723,12 @@ exports[`<FieldForm /> renders MandatoryConditional 1`] = `
|
|
|
711
723
|
onChange={[Function]}
|
|
712
724
|
options={
|
|
713
725
|
Array [
|
|
726
|
+
Object {
|
|
727
|
+
"icon": "hashtag",
|
|
728
|
+
"key": undefined,
|
|
729
|
+
"text": "Identifier",
|
|
730
|
+
"value": "identifier",
|
|
731
|
+
},
|
|
714
732
|
Object {
|
|
715
733
|
"icon": "minus",
|
|
716
734
|
"key": undefined,
|
|
@@ -1052,6 +1070,12 @@ exports[`<FieldForm /> renders ValuesField and manages onChange 1`] = `
|
|
|
1052
1070
|
onChange={[Function]}
|
|
1053
1071
|
options={
|
|
1054
1072
|
Array [
|
|
1073
|
+
Object {
|
|
1074
|
+
"icon": "hashtag",
|
|
1075
|
+
"key": undefined,
|
|
1076
|
+
"text": "Identifier",
|
|
1077
|
+
"value": "identifier",
|
|
1078
|
+
},
|
|
1055
1079
|
Object {
|
|
1056
1080
|
"icon": "minus",
|
|
1057
1081
|
"key": undefined,
|
package/src/templates/components/templateForm/__tests__/__snapshots__/TemplateForm.spec.js.snap
CHANGED
|
@@ -155,7 +155,7 @@ exports[`<TemplateForm /> matches the latest snapshot (loading) 1`] = `
|
|
|
155
155
|
<span
|
|
156
156
|
class="text"
|
|
157
157
|
>
|
|
158
|
-
|
|
158
|
+
qe
|
|
159
159
|
</span>
|
|
160
160
|
</div>
|
|
161
161
|
<div
|
|
@@ -168,7 +168,7 @@ exports[`<TemplateForm /> matches the latest snapshot (loading) 1`] = `
|
|
|
168
168
|
<span
|
|
169
169
|
class="text"
|
|
170
170
|
>
|
|
171
|
-
|
|
171
|
+
ri
|
|
172
172
|
</span>
|
|
173
173
|
</div>
|
|
174
174
|
</div>
|
|
@@ -388,7 +388,7 @@ exports[`<TemplateForm /> matches the latest snapshot 1`] = `
|
|
|
388
388
|
<span
|
|
389
389
|
class="text"
|
|
390
390
|
>
|
|
391
|
-
|
|
391
|
+
qe
|
|
392
392
|
</span>
|
|
393
393
|
</div>
|
|
394
394
|
<div
|
|
@@ -401,7 +401,7 @@ exports[`<TemplateForm /> matches the latest snapshot 1`] = `
|
|
|
401
401
|
<span
|
|
402
402
|
class="text"
|
|
403
403
|
>
|
|
404
|
-
|
|
404
|
+
ri
|
|
405
405
|
</span>
|
|
406
406
|
</div>
|
|
407
407
|
</div>
|
|
@@ -31,6 +31,14 @@ export const getWidgetOptions = () => {
|
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
export const WIDGETS = [
|
|
34
|
+
{
|
|
35
|
+
key: "identifier",
|
|
36
|
+
value: "identifier",
|
|
37
|
+
text: "Identifier",
|
|
38
|
+
icon: "hashtag",
|
|
39
|
+
cardinalities: ["0"],
|
|
40
|
+
types: ["string"]
|
|
41
|
+
},
|
|
34
42
|
{
|
|
35
43
|
key: "string",
|
|
36
44
|
value: "string",
|