@truedat/df 8.5.9 → 8.6.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/package.json +4 -4
- package/src/api/queries.js +18 -0
- package/src/components/DynamicFieldValue.js +6 -0
- package/src/components/FieldViewerValue.js +21 -3
- package/src/components/__tests__/DynamicFormViewer.spec.js +164 -3
- package/src/components/__tests__/FieldViewerValue.spec.js +129 -12
- package/src/components/widgets/GroupPreview.js +55 -0
- package/src/components/widgets/UserGroupPreview.js +97 -0
- package/src/components/widgets/__tests__/GroupPreview.spec.js +105 -0
- package/src/components/widgets/__tests__/UserGroupPreview.spec.js +98 -0
- package/src/messages/en.js +1 -0
- package/src/messages/es.js +1 -0
- package/src/templates/components/templateForm/TableValuesForm.js +237 -227
- package/src/templates/components/templateForm/__tests__/__snapshots__/FieldForm.spec.js.snap +13 -0
- package/src/templates/components/templateForm/contentValidation.js +21 -9
- package/src/templates/components/templateForm/valueDefinitions.js +1 -0
- package/src/templates/components/templateForm/widgetDefinitions.js +11 -3
- package/src/templates/utils/__tests__/filterValues.spec.js +52 -0
- package/src/templates/utils/__tests__/parseFieldOptions.spec.js +45 -0
- package/src/templates/utils/filterValues.js +33 -11
- package/src/templates/utils/parseFieldOptions.js +33 -24
|
@@ -44,6 +44,58 @@ describe("utils: validValues", () => {
|
|
|
44
44
|
});
|
|
45
45
|
});
|
|
46
46
|
|
|
47
|
+
it("should validate processed_groups values", () => {
|
|
48
|
+
const template = [
|
|
49
|
+
{
|
|
50
|
+
name: "role",
|
|
51
|
+
type: "user_group",
|
|
52
|
+
values: {
|
|
53
|
+
role_groups: "some_role",
|
|
54
|
+
processed_users: ["u1"],
|
|
55
|
+
processed_groups: ["alias1", "group2"],
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
const result = filterValues(template)({
|
|
61
|
+
role: { value: "group:alias1", origin: "default" },
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
expect(result).toEqual({
|
|
65
|
+
role: { value: "group:alias1", origin: "default" },
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it("should validate group values without allowing users", () => {
|
|
70
|
+
const template = [
|
|
71
|
+
{
|
|
72
|
+
name: "role",
|
|
73
|
+
type: "group",
|
|
74
|
+
values: {
|
|
75
|
+
role_groups: "some_role",
|
|
76
|
+
processed_users: ["u1"],
|
|
77
|
+
processed_groups: ["alias1", "group2"],
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
expect(
|
|
83
|
+
filterValues(template)({
|
|
84
|
+
role: { value: "group:alias1", origin: "default" },
|
|
85
|
+
}),
|
|
86
|
+
).toEqual({
|
|
87
|
+
role: { value: "group:alias1", origin: "default" },
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
expect(
|
|
91
|
+
filterValues(template)({
|
|
92
|
+
role: { value: "user:u1", origin: "default" },
|
|
93
|
+
}),
|
|
94
|
+
).toEqual({
|
|
95
|
+
role: { value: null, origin: "default" },
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
47
99
|
it("should nullify unlisted fixed values", () => {
|
|
48
100
|
const result = filterValues(templateContent)({
|
|
49
101
|
fixed: { value: "ho", origin: "default" },
|
|
@@ -105,6 +105,51 @@ describe("utils: parseFieldOptions", () => {
|
|
|
105
105
|
});
|
|
106
106
|
});
|
|
107
107
|
|
|
108
|
+
it("handles values role_groups with processed_groups", () => {
|
|
109
|
+
const field = {
|
|
110
|
+
name: "field",
|
|
111
|
+
type: "user_group",
|
|
112
|
+
values: {
|
|
113
|
+
role_groups: "Some Role",
|
|
114
|
+
processed_users: ["x"],
|
|
115
|
+
processed_groups: ["alias1", "group2"],
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
const content = { field: { value: "group:alias1", origin: "default" } };
|
|
119
|
+
const result = parseFormatFieldOptions(content)(field);
|
|
120
|
+
expect(result).toEqual({
|
|
121
|
+
...field,
|
|
122
|
+
value: { value: "group:alias1", origin: "default" },
|
|
123
|
+
parsedValues: [
|
|
124
|
+
{ value: "user:x", text: "x", icon: "user" },
|
|
125
|
+
{ value: "group:alias1", text: "alias1", icon: "group" },
|
|
126
|
+
{ value: "group:group2", text: "group2", icon: "group" },
|
|
127
|
+
],
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it("handles group values with processed_groups only", () => {
|
|
132
|
+
const field = {
|
|
133
|
+
name: "field",
|
|
134
|
+
type: "group",
|
|
135
|
+
values: {
|
|
136
|
+
role_groups: "Some Role",
|
|
137
|
+
processed_users: ["x"],
|
|
138
|
+
processed_groups: ["alias1", "group2"],
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
const content = { field: { value: "group:alias1", origin: "default" } };
|
|
142
|
+
const result = parseFormatFieldOptions(content)(field);
|
|
143
|
+
expect(result).toEqual({
|
|
144
|
+
...field,
|
|
145
|
+
value: { value: "group:alias1", origin: "default" },
|
|
146
|
+
parsedValues: [
|
|
147
|
+
{ value: "group:alias1", text: "alias1", icon: "group" },
|
|
148
|
+
{ value: "group:group2", text: "group2", icon: "group" },
|
|
149
|
+
],
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
|
|
108
153
|
it("handles values domain", () => {
|
|
109
154
|
const selectedDomain = { id: 1 };
|
|
110
155
|
const field = {
|
|
@@ -1,31 +1,53 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
2
|
|
|
3
|
+
const groupNameOrAlias = (group) =>
|
|
4
|
+
_.isString(group) ? group : group?.alias || group?.name;
|
|
5
|
+
|
|
3
6
|
const userGroupValues = (field) =>
|
|
4
7
|
_.concat(
|
|
5
8
|
_.flow(
|
|
6
9
|
_.get("processed_users"),
|
|
7
|
-
_.map((name) => `user:${name}`)
|
|
10
|
+
_.map((name) => `user:${name}`),
|
|
8
11
|
)(field),
|
|
9
12
|
_.flow(
|
|
10
13
|
_.get("processed_groups"),
|
|
11
|
-
_.map((
|
|
12
|
-
|
|
14
|
+
_.map((group) => {
|
|
15
|
+
const name = groupNameOrAlias(group);
|
|
16
|
+
return `group:${name}`;
|
|
17
|
+
}),
|
|
18
|
+
)(field),
|
|
13
19
|
);
|
|
14
20
|
|
|
21
|
+
const groupValues = _.flow(
|
|
22
|
+
_.get("processed_groups"),
|
|
23
|
+
_.map((group) => {
|
|
24
|
+
const name = groupNameOrAlias(group);
|
|
25
|
+
return `group:${name}`;
|
|
26
|
+
}),
|
|
27
|
+
);
|
|
28
|
+
|
|
15
29
|
export const validValues = _.flow(
|
|
16
30
|
_.filter(
|
|
17
|
-
_.overSome([
|
|
31
|
+
_.overSome([
|
|
32
|
+
_.has("values.fixed"),
|
|
33
|
+
_.has("values.processed_users"),
|
|
34
|
+
_.has("values.processed_groups"),
|
|
35
|
+
]),
|
|
18
36
|
),
|
|
19
|
-
_.map(_.pick(["name", "values"])),
|
|
20
|
-
_.map(({ name, values }) => [
|
|
37
|
+
_.map(_.pick(["name", "type", "values"])),
|
|
38
|
+
_.map(({ name, type, values }) => [
|
|
21
39
|
name,
|
|
22
40
|
_.cond([
|
|
23
41
|
[_.has("fixed"), _.pathOr([], "fixed")],
|
|
42
|
+
[
|
|
43
|
+
() => type === "group" && _.has("processed_groups")(values),
|
|
44
|
+
groupValues,
|
|
45
|
+
],
|
|
24
46
|
[_.has("processed_groups"), userGroupValues],
|
|
25
47
|
[_.has("processed_users"), _.pathOr([], "processed_users")],
|
|
26
48
|
])(values),
|
|
27
49
|
]),
|
|
28
|
-
_.fromPairs
|
|
50
|
+
_.fromPairs,
|
|
29
51
|
);
|
|
30
52
|
|
|
31
53
|
export const filterValues = (templateContent) => {
|
|
@@ -34,12 +56,12 @@ export const filterValues = (templateContent) => {
|
|
|
34
56
|
_.has(key)(vv)
|
|
35
57
|
? _.isArray(value.value)
|
|
36
58
|
? _.set(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
59
|
+
"value",
|
|
60
|
+
_.filter((v) => _.includes(v)(_.prop(key)(vv)))(value.value),
|
|
61
|
+
)(value)
|
|
40
62
|
: _.includes(value.value)(_.prop(key)(vv))
|
|
41
63
|
? value
|
|
42
64
|
: { ...value, value: null }
|
|
43
|
-
: value
|
|
65
|
+
: value,
|
|
44
66
|
);
|
|
45
67
|
};
|
|
@@ -44,38 +44,47 @@ const doParseFieldOptions = (formatMessage, content, selectedDomain, field) => {
|
|
|
44
44
|
]),
|
|
45
45
|
translateValues,
|
|
46
46
|
);
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
})),
|
|
56
|
-
)(values),
|
|
57
|
-
_.flow(
|
|
58
|
-
_.get("processed_groups"),
|
|
59
|
-
_.map((name) => ({
|
|
47
|
+
const groupNameOrAlias = (group) =>
|
|
48
|
+
typeof group === "string" ? group : group.alias || group.name;
|
|
49
|
+
const parseRoleGroups = (values) => {
|
|
50
|
+
const groups = _.flow(
|
|
51
|
+
_.get("processed_groups"),
|
|
52
|
+
_.map((group) => {
|
|
53
|
+
const name = groupNameOrAlias(group);
|
|
54
|
+
return {
|
|
60
55
|
value: `group:${name}`,
|
|
61
56
|
text: name,
|
|
62
57
|
icon: "group",
|
|
63
|
-
}
|
|
64
|
-
)
|
|
65
|
-
);
|
|
58
|
+
};
|
|
59
|
+
}),
|
|
60
|
+
)(values);
|
|
61
|
+
|
|
62
|
+
if (field?.type === "group") return groups;
|
|
63
|
+
|
|
64
|
+
const users = _.flow(
|
|
65
|
+
_.get("processed_users"),
|
|
66
|
+
_.map((name) => ({
|
|
67
|
+
value: `user:${name}`,
|
|
68
|
+
text: name,
|
|
69
|
+
icon: "user",
|
|
70
|
+
})),
|
|
71
|
+
)(values);
|
|
72
|
+
|
|
73
|
+
return _.concat(users, groups);
|
|
74
|
+
};
|
|
66
75
|
const parseDomain = _.flow(
|
|
67
76
|
_.get("domain"),
|
|
68
77
|
(domainValues) => {
|
|
69
78
|
if (!domainValues) return [];
|
|
70
79
|
const domainIds = selectedDomain?.ids || [selectedDomain?.id];
|
|
71
|
-
const allValues =
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
80
|
+
const allValues =
|
|
81
|
+
domainIds
|
|
82
|
+
?.filter((id) => id != null)
|
|
83
|
+
.flatMap((id) => {
|
|
84
|
+
const strId = String(id);
|
|
85
|
+
const val = domainValues[strId];
|
|
86
|
+
return Array.isArray(val) ? val : [];
|
|
87
|
+
}) || [];
|
|
79
88
|
return _.uniq(allValues);
|
|
80
89
|
},
|
|
81
90
|
translateValues,
|