@truedat/df 4.37.4 → 4.38.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/CHANGELOG.md +6 -0
- package/package.json +5 -5
- package/src/components/DynamicFieldValue.js +64 -0
- package/src/components/DynamicForm.js +7 -67
- package/src/components/DynamicFormViewer.js +10 -29
- package/src/components/EditableDynamicFieldValue.js +137 -0
- package/src/components/FieldGroupDetail.js +17 -141
- package/src/components/FieldViewerValue.js +88 -0
- package/src/components/__tests__/DynamicFieldValue.spec.js +22 -0
- package/src/components/__tests__/EditableDynamicFieldValue.spec.js +34 -0
- package/src/components/__tests__/FieldViewerValue.spec.js +76 -0
- package/src/components/__tests__/__snapshots__/DynamicFieldValue.spec.js.snap +102 -0
- package/src/components/__tests__/__snapshots__/EditableDynamicFieldValue.spec.js.snap +160 -0
- package/src/components/__tests__/__snapshots__/FieldViewerValue.spec.js.snap +963 -0
- package/src/messages/en.js +3 -0
- package/src/messages/es.js +3 -0
- package/src/styles/fieldGroupDetail.less +50 -0
- package/src/templates/utils/__tests__/parseFieldOptions.spec.js +120 -0
- package/src/templates/utils/__tests__/parseGroups.spec.js +228 -0
- package/src/templates/utils/index.js +2 -0
- package/src/templates/utils/parseFieldOptions.js +41 -0
- package/src/templates/utils/parseGroups.js +44 -0
- package/src/templates/utils/validateContent.js +1 -1
package/src/messages/en.js
CHANGED
|
@@ -8,6 +8,8 @@ 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.action.cancel": "Cancel",
|
|
12
|
+
"template.field.action.save": "Save",
|
|
11
13
|
"template.field.autogenerated": "Generated automatically",
|
|
12
14
|
"template.field.cardinality": "Cardinality",
|
|
13
15
|
"template.field.cardinality.0": "None (autogenerated)",
|
|
@@ -19,6 +21,7 @@ export default {
|
|
|
19
21
|
"template.field.depends.on": "Source Field",
|
|
20
22
|
"template.field.depends.to_be": "Source Value",
|
|
21
23
|
"template.field.description": "Description",
|
|
24
|
+
"template.field.hidden_secret": "<Hidden secret value>",
|
|
22
25
|
"template.field.label": "Label",
|
|
23
26
|
"template.field.mandatory.depends": "Mandatory depending on",
|
|
24
27
|
"template.field.mandatory.depends.on": "Depending on",
|
package/src/messages/es.js
CHANGED
|
@@ -8,6 +8,8 @@ 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.action.cancel": "Cancelar",
|
|
12
|
+
"template.field.action.save": "Guardar",
|
|
11
13
|
"template.field.autogenerated": "Generado automáticamente",
|
|
12
14
|
"template.field.cardinality": "Cardinalidad",
|
|
13
15
|
"template.field.cardinality.0": "Ninguno (autogenerado)",
|
|
@@ -19,6 +21,7 @@ export default {
|
|
|
19
21
|
"template.field.depends.on": "Campo origen",
|
|
20
22
|
"template.field.depends.to_be": "Valor origen",
|
|
21
23
|
"template.field.description": "Descripción",
|
|
24
|
+
"template.field.hidden_secret": "<Campo secreto oculto>",
|
|
22
25
|
"template.field.mandatory.depends": "Obligatorio dependiente de",
|
|
23
26
|
"template.field.mandatory.depends.on": "Depende de",
|
|
24
27
|
"template.field.mandatory.depends.to_be": "Valor dependiente",
|
|
@@ -1,6 +1,56 @@
|
|
|
1
1
|
.list > .item > .header.dynamic-field-header {
|
|
2
2
|
margin-bottom: 10px;
|
|
3
3
|
}
|
|
4
|
+
.list > .item > .header.dynamic-field-header i{
|
|
5
|
+
visibility: hidden;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.list > .item > .header.editable-dynamic-field-header{
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.list > .item > .header.editable-dynamic-field-header i{
|
|
13
|
+
color: rgba(0, 0, 0, 0.8);
|
|
14
|
+
font-size: 14px;
|
|
15
|
+
margin-left: 5px;
|
|
16
|
+
visibility: hidden;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.list > .item > .header.editable-dynamic-field-header:hover i{
|
|
20
|
+
visibility: visible;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.editable-dynamic-field-buttons{
|
|
24
|
+
padding: 8px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.editable-dynamic-field-button-shake {
|
|
28
|
+
animation: shake 1s;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@keyframes shake {
|
|
32
|
+
10%, 90% {
|
|
33
|
+
transform: translate3d(-1px, 0, 0);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
20%, 80% {
|
|
37
|
+
transform: translate3d(2px, 0, 0);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
30%, 50%, 70% {
|
|
41
|
+
transform: translate3d(-4px, 0, 0);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
40%, 60% {
|
|
45
|
+
transform: translate3d(4px, 0, 0);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.hidden-secret-value {
|
|
50
|
+
font-family: 'Courier New', Courier, monospace;
|
|
51
|
+
color: #888;
|
|
52
|
+
}
|
|
53
|
+
|
|
4
54
|
|
|
5
55
|
.identifier-value {
|
|
6
56
|
font-family: 'Courier New', Courier, monospace;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { parseFieldOptions } from "..";
|
|
2
|
+
|
|
3
|
+
describe("utils: parseFieldOptions", () => {
|
|
4
|
+
it("adds value to field", () => {
|
|
5
|
+
const field = { name: "field" };
|
|
6
|
+
const content = { field: "1" };
|
|
7
|
+
const result = parseFieldOptions(content)(field);
|
|
8
|
+
expect(result).toEqual({ ...field, value: "1" });
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it("handles values switch", () => {
|
|
12
|
+
const field = {
|
|
13
|
+
name: "field",
|
|
14
|
+
values: {
|
|
15
|
+
switch: {
|
|
16
|
+
on: "switcher",
|
|
17
|
+
values: {
|
|
18
|
+
odd: ["1", "3"],
|
|
19
|
+
even: ["2", "4"],
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
const content = { field: "1", switcher: "odd" };
|
|
25
|
+
const result = parseFieldOptions(content)(field);
|
|
26
|
+
expect(result).toEqual({
|
|
27
|
+
...field,
|
|
28
|
+
value: "1",
|
|
29
|
+
parsed_values: [
|
|
30
|
+
{ text: "1", value: "1" },
|
|
31
|
+
{ text: "3", value: "3" },
|
|
32
|
+
],
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("handles values fixed", () => {
|
|
37
|
+
const field = {
|
|
38
|
+
name: "field",
|
|
39
|
+
values: {
|
|
40
|
+
fixed: ["a", "b", "c"],
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
const content = { field: "b" };
|
|
44
|
+
const result = parseFieldOptions(content)(field);
|
|
45
|
+
expect(result).toEqual({
|
|
46
|
+
...field,
|
|
47
|
+
value: "b",
|
|
48
|
+
parsed_values: [
|
|
49
|
+
{ text: "a", value: "a" },
|
|
50
|
+
{ text: "b", value: "b" },
|
|
51
|
+
{ text: "c", value: "c" },
|
|
52
|
+
],
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("handles values fixed_tuple", () => {
|
|
57
|
+
const field = {
|
|
58
|
+
name: "field",
|
|
59
|
+
values: {
|
|
60
|
+
fixed_tuple: [
|
|
61
|
+
{ text: "a", value: "a" },
|
|
62
|
+
{ text: "b", value: "b" },
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
const content = { field: "a" };
|
|
67
|
+
const result = parseFieldOptions(content)(field);
|
|
68
|
+
expect(result).toEqual({
|
|
69
|
+
...field,
|
|
70
|
+
value: "a",
|
|
71
|
+
parsed_values: [
|
|
72
|
+
{ text: "a", value: "a" },
|
|
73
|
+
{ text: "b", value: "b" },
|
|
74
|
+
],
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it("handles values role_users", () => {
|
|
79
|
+
const field = {
|
|
80
|
+
name: "field",
|
|
81
|
+
values: {
|
|
82
|
+
role_users: {},
|
|
83
|
+
processed_users: ["x", "y", "z"],
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
const content = { field: "y" };
|
|
87
|
+
const result = parseFieldOptions(content)(field);
|
|
88
|
+
expect(result).toEqual({
|
|
89
|
+
...field,
|
|
90
|
+
value: "y",
|
|
91
|
+
parsed_values: [
|
|
92
|
+
{ text: "x", value: "x" },
|
|
93
|
+
{ text: "y", value: "y" },
|
|
94
|
+
{ text: "z", value: "z" },
|
|
95
|
+
],
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it("handles values domain", () => {
|
|
100
|
+
const selectedDomain = { id: 1 };
|
|
101
|
+
const field = {
|
|
102
|
+
name: "field",
|
|
103
|
+
values: {
|
|
104
|
+
domain: {
|
|
105
|
+
1: ["foo", "bar"],
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
const content = { field: "bar" };
|
|
110
|
+
const result = parseFieldOptions(content, selectedDomain)(field);
|
|
111
|
+
expect(result).toEqual({
|
|
112
|
+
...field,
|
|
113
|
+
value: "bar",
|
|
114
|
+
parsed_values: [
|
|
115
|
+
{ text: "foo", value: "foo" },
|
|
116
|
+
{ text: "bar", value: "bar" },
|
|
117
|
+
],
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
});
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { parseGroups } from "..";
|
|
2
|
+
|
|
3
|
+
describe("utils: parseGroups", () => {
|
|
4
|
+
it("adds required and value to field", () => {
|
|
5
|
+
const template = {
|
|
6
|
+
content: [
|
|
7
|
+
{
|
|
8
|
+
name: "group1",
|
|
9
|
+
fields: [
|
|
10
|
+
{ name: "field" },
|
|
11
|
+
{ name: "field_mandatory", cardinality: "1" },
|
|
12
|
+
],
|
|
13
|
+
},
|
|
14
|
+
],
|
|
15
|
+
};
|
|
16
|
+
const content = { field: "1", field_mandatory: "2" };
|
|
17
|
+
const result = parseGroups(template, content);
|
|
18
|
+
expect(result).toEqual([
|
|
19
|
+
{
|
|
20
|
+
fields: [
|
|
21
|
+
{ name: "field", required: false, value: "1" },
|
|
22
|
+
{
|
|
23
|
+
name: "field_mandatory",
|
|
24
|
+
required: true,
|
|
25
|
+
value: "2",
|
|
26
|
+
cardinality: "1",
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
name: "group1",
|
|
30
|
+
},
|
|
31
|
+
]);
|
|
32
|
+
});
|
|
33
|
+
it("omits fields", () => {
|
|
34
|
+
const template = {
|
|
35
|
+
content: [
|
|
36
|
+
{
|
|
37
|
+
name: "group1",
|
|
38
|
+
fields: [{ name: "field" }, { name: "ommitedField" }],
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
};
|
|
42
|
+
const content = { field: "1" };
|
|
43
|
+
const fieldsToOmit = ["ommitedField"];
|
|
44
|
+
const result = parseGroups(template, content, fieldsToOmit);
|
|
45
|
+
expect(result).toEqual([
|
|
46
|
+
{
|
|
47
|
+
fields: [{ name: "field", required: false, value: "1" }],
|
|
48
|
+
name: "group1",
|
|
49
|
+
},
|
|
50
|
+
]);
|
|
51
|
+
});
|
|
52
|
+
it("hides dependant fields and parses values", () => {
|
|
53
|
+
const template = {
|
|
54
|
+
content: [
|
|
55
|
+
{
|
|
56
|
+
name: "group1",
|
|
57
|
+
fields: [
|
|
58
|
+
{ name: "parent", values: { fixed: ["a", "b"] } },
|
|
59
|
+
{ name: "dependant_hidden", depends: { on: "parent", to_be: "a" } },
|
|
60
|
+
{ name: "dependant", depends: { on: "parent", to_be: "b" } },
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
};
|
|
65
|
+
const content = { parent: "b", dependant: "value" };
|
|
66
|
+
const fieldsToOmit = ["ommitedField"];
|
|
67
|
+
const result = parseGroups(template, content, fieldsToOmit);
|
|
68
|
+
expect(result).toEqual([
|
|
69
|
+
{
|
|
70
|
+
fields: [
|
|
71
|
+
{
|
|
72
|
+
name: "parent",
|
|
73
|
+
parsed_values: [
|
|
74
|
+
{ text: "a", value: "a" },
|
|
75
|
+
{ text: "b", value: "b" },
|
|
76
|
+
],
|
|
77
|
+
values: { fixed: ["a", "b"] },
|
|
78
|
+
required: false,
|
|
79
|
+
value: "b",
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: "dependant",
|
|
83
|
+
depends: { on: "parent", to_be: "b" },
|
|
84
|
+
value: "value",
|
|
85
|
+
required: false,
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
name: "group1",
|
|
89
|
+
},
|
|
90
|
+
]);
|
|
91
|
+
});
|
|
92
|
+
it("hides dependant fields of multiple values", () => {
|
|
93
|
+
const template = {
|
|
94
|
+
content: [
|
|
95
|
+
{
|
|
96
|
+
name: "group1",
|
|
97
|
+
fields: [
|
|
98
|
+
{ name: "parent", values: { fixed: ["a", "b", "c"] } },
|
|
99
|
+
{ name: "dependant_hidden", depends: { on: "parent", to_be: "a" } },
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
};
|
|
104
|
+
const content = { parent: ["b", "c"] };
|
|
105
|
+
const fieldsToOmit = ["ommitedField"];
|
|
106
|
+
const result = parseGroups(template, content, fieldsToOmit);
|
|
107
|
+
expect(result).toEqual([
|
|
108
|
+
{
|
|
109
|
+
fields: [
|
|
110
|
+
{
|
|
111
|
+
name: "parent",
|
|
112
|
+
parsed_values: [
|
|
113
|
+
{ text: "a", value: "a" },
|
|
114
|
+
{ text: "b", value: "b" },
|
|
115
|
+
{ text: "c", value: "c" },
|
|
116
|
+
],
|
|
117
|
+
values: { fixed: ["a", "b", "c"] },
|
|
118
|
+
required: false,
|
|
119
|
+
value: ["b", "c"],
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
name: "group1",
|
|
123
|
+
},
|
|
124
|
+
]);
|
|
125
|
+
});
|
|
126
|
+
it("hides fields of switch type", () => {
|
|
127
|
+
const template = {
|
|
128
|
+
content: [
|
|
129
|
+
{
|
|
130
|
+
name: "group1",
|
|
131
|
+
fields: [
|
|
132
|
+
{ name: "parent", values: { fixed: ["a", "b"] } },
|
|
133
|
+
{
|
|
134
|
+
name: "dependant_hidden",
|
|
135
|
+
values: {
|
|
136
|
+
switch: { on: "parent", values: { a: "1" } },
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: "dependant",
|
|
141
|
+
values: {
|
|
142
|
+
switch: { on: "parent", values: { b: "1" } },
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
};
|
|
149
|
+
const content = { parent: "b", dependant: "1" };
|
|
150
|
+
const fieldsToOmit = ["ommitedField"];
|
|
151
|
+
const result = parseGroups(template, content, fieldsToOmit);
|
|
152
|
+
expect(result).toEqual([
|
|
153
|
+
{
|
|
154
|
+
fields: [
|
|
155
|
+
{
|
|
156
|
+
name: "parent",
|
|
157
|
+
parsed_values: [
|
|
158
|
+
{ text: "a", value: "a" },
|
|
159
|
+
{ text: "b", value: "b" },
|
|
160
|
+
],
|
|
161
|
+
values: { fixed: ["a", "b"] },
|
|
162
|
+
required: false,
|
|
163
|
+
value: "b",
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: "dependant",
|
|
167
|
+
values: {
|
|
168
|
+
switch: { on: "parent", values: { b: "1" } },
|
|
169
|
+
},
|
|
170
|
+
parsed_values: [{ text: "1", value: "1" }],
|
|
171
|
+
value: "1",
|
|
172
|
+
required: false,
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
name: "group1",
|
|
176
|
+
},
|
|
177
|
+
]);
|
|
178
|
+
});
|
|
179
|
+
it("filters groups without fields", () => {
|
|
180
|
+
const template = {
|
|
181
|
+
content: [
|
|
182
|
+
{
|
|
183
|
+
name: "group1",
|
|
184
|
+
fields: [{ name: "field" }],
|
|
185
|
+
},
|
|
186
|
+
{ name: "empty_group" },
|
|
187
|
+
],
|
|
188
|
+
};
|
|
189
|
+
const content = { field: "1" };
|
|
190
|
+
const result = parseGroups(template, content);
|
|
191
|
+
expect(result).toEqual([
|
|
192
|
+
{
|
|
193
|
+
fields: [{ name: "field", required: false, value: "1" }],
|
|
194
|
+
name: "group1",
|
|
195
|
+
},
|
|
196
|
+
]);
|
|
197
|
+
});
|
|
198
|
+
it("enriches isSecret", () => {
|
|
199
|
+
const template = {
|
|
200
|
+
content: [
|
|
201
|
+
{
|
|
202
|
+
name: "group1",
|
|
203
|
+
fields: [{ name: "not_secret" }],
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
name: "group2",
|
|
207
|
+
fields: [{ name: "secret" }],
|
|
208
|
+
is_secret: true,
|
|
209
|
+
},
|
|
210
|
+
],
|
|
211
|
+
};
|
|
212
|
+
const content = { secret: "1", not_secret: "2" };
|
|
213
|
+
const result = parseGroups(template, content);
|
|
214
|
+
expect(result).toEqual([
|
|
215
|
+
{
|
|
216
|
+
fields: [{ name: "not_secret", required: false, value: "2" }],
|
|
217
|
+
name: "group1",
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
fields: [
|
|
221
|
+
{ name: "secret", required: false, value: "1", isSecret: true },
|
|
222
|
+
],
|
|
223
|
+
is_secret: true,
|
|
224
|
+
name: "group2",
|
|
225
|
+
},
|
|
226
|
+
]);
|
|
227
|
+
});
|
|
228
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import _ from "lodash/fp";
|
|
2
|
+
const stringToValueTextList = _.map((v) => ({ value: v, text: v }));
|
|
3
|
+
|
|
4
|
+
const parseFieldOptions = (content, selectedDomain) => (field) => {
|
|
5
|
+
const value = _.prop(field?.name)(content);
|
|
6
|
+
if (!field?.values) return { ...field, value };
|
|
7
|
+
|
|
8
|
+
const parseSwitch = (values) => {
|
|
9
|
+
const switchOn = _.prop("switch.on")(values);
|
|
10
|
+
const switchedValues = _.prop(`switch.values.${content[switchOn]}`)(values);
|
|
11
|
+
return stringToValueTextList(switchedValues);
|
|
12
|
+
};
|
|
13
|
+
const parseFixed = _.flow(_.get("fixed"), stringToValueTextList);
|
|
14
|
+
const parseRoleUsers = _.flow(
|
|
15
|
+
_.get("processed_users"),
|
|
16
|
+
_.cond([
|
|
17
|
+
[_.isArray, _.identity],
|
|
18
|
+
[_.stubTrue, _.constant([])],
|
|
19
|
+
]),
|
|
20
|
+
stringToValueTextList
|
|
21
|
+
);
|
|
22
|
+
const parseDomain = _.flow(
|
|
23
|
+
_.get("domain"),
|
|
24
|
+
_.propOr([], _.toString(selectedDomain?.id)),
|
|
25
|
+
stringToValueTextList
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
const parsed_values = _.flow(
|
|
29
|
+
_.get("values"),
|
|
30
|
+
_.cond([
|
|
31
|
+
[_.has("switch"), parseSwitch],
|
|
32
|
+
[_.has("fixed"), parseFixed],
|
|
33
|
+
[_.has("fixed_tuple"), _.get("fixed_tuple")],
|
|
34
|
+
[_.has("role_users"), parseRoleUsers],
|
|
35
|
+
[_.has("domain"), parseDomain],
|
|
36
|
+
])
|
|
37
|
+
)(field);
|
|
38
|
+
return { ...field, value, parsed_values };
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export { parseFieldOptions };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import _ from "lodash/fp";
|
|
2
|
+
import { enrichRequired } from "./validateContent";
|
|
3
|
+
import { parseFieldOptions } from "./parseFieldOptions";
|
|
4
|
+
|
|
5
|
+
const hasDependentKeys = (field) =>
|
|
6
|
+
!_.isNil(_.path("depends.to_be")(field)) &&
|
|
7
|
+
!_.isNil(_.path("depends.on")(field));
|
|
8
|
+
|
|
9
|
+
const checkDependency = (field, content) => {
|
|
10
|
+
const on = _.prop(_.path("depends.on")(field))(content);
|
|
11
|
+
const to_be = _.path("depends.to_be")(field);
|
|
12
|
+
return _.isArray(on)
|
|
13
|
+
? _.some((d) => to_be.includes(d))(on)
|
|
14
|
+
: to_be.includes(on);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const enrichIsSecret = (isSecret) => (field) =>
|
|
18
|
+
isSecret ? { ...field, isSecret } : field;
|
|
19
|
+
|
|
20
|
+
const parseGroups = (template, content, fieldsToOmit, selectedDomain) =>
|
|
21
|
+
_.flow(
|
|
22
|
+
_.getOr([], "content"),
|
|
23
|
+
_.map((group) => {
|
|
24
|
+
const fields = _.flow(
|
|
25
|
+
_.get("fields"),
|
|
26
|
+
_.filter((field) => !_.includes(fieldsToOmit)(field?.name)),
|
|
27
|
+
_.filter(
|
|
28
|
+
(field) =>
|
|
29
|
+
(!("depends" in field) ||
|
|
30
|
+
(hasDependentKeys(field) && checkDependency(field, content))) &&
|
|
31
|
+
(!(field.values && "switch" in field.values) ||
|
|
32
|
+
_.prop(_.prop("values.switch.on")(field))(content) in
|
|
33
|
+
_.prop("values.switch.values")(field))
|
|
34
|
+
),
|
|
35
|
+
_.map(parseFieldOptions(content, selectedDomain)),
|
|
36
|
+
_.map(enrichRequired(content)),
|
|
37
|
+
_.map(enrichIsSecret(_.get("is_secret")(group)))
|
|
38
|
+
)(group);
|
|
39
|
+
return { ...group, fields };
|
|
40
|
+
}),
|
|
41
|
+
_.filter(({ fields }) => _.negate(_.isEmpty)(fields))
|
|
42
|
+
)(template);
|
|
43
|
+
|
|
44
|
+
export { parseGroups };
|
|
@@ -53,7 +53,7 @@ export const isRequired = (field, content) =>
|
|
|
53
53
|
_.includes(field?.cardinality)(["1", "+"]) ||
|
|
54
54
|
dependentRequired(field, content);
|
|
55
55
|
|
|
56
|
-
export const enrichRequired = (
|
|
56
|
+
export const enrichRequired = (content) => (field) => {
|
|
57
57
|
const required = isRequired(field, content);
|
|
58
58
|
return { ...field, required };
|
|
59
59
|
};
|