@backstage-community/plugin-rbac 1.32.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 +761 -0
- package/README.md +106 -0
- package/app-config.yaml +19 -0
- package/dist/api/LicensedUsersClient.esm.js +45 -0
- package/dist/api/LicensedUsersClient.esm.js.map +1 -0
- package/dist/api/RBACBackendClient.esm.js +337 -0
- package/dist/api/RBACBackendClient.esm.js.map +1 -0
- package/dist/components/Administration.esm.js +23 -0
- package/dist/components/Administration.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js +23 -0
- package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js +149 -0
- package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js +62 -0
- package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/ConditionRule.esm.js +34 -0
- package/dist/components/ConditionalAccess/ConditionRule.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js +93 -0
- package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/ConditionsForm.esm.js +204 -0
- package/dist/components/ConditionalAccess/ConditionsForm.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js +459 -0
- package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js +209 -0
- package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/CriteriaToggleButton.esm.js +33 -0
- package/dist/components/ConditionalAccess/CriteriaToggleButton.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/CustomArrayField.esm.js +47 -0
- package/dist/components/ConditionalAccess/CustomArrayField.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/RulesDropdownOption.esm.js +24 -0
- package/dist/components/ConditionalAccess/RulesDropdownOption.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/const.esm.js +21 -0
- package/dist/components/ConditionalAccess/const.esm.js.map +1 -0
- package/dist/components/ConditionalAccess/types.esm.js +8 -0
- package/dist/components/ConditionalAccess/types.esm.js.map +1 -0
- package/dist/components/CreateRole/AddMembersForm.esm.js +94 -0
- package/dist/components/CreateRole/AddMembersForm.esm.js.map +1 -0
- package/dist/components/CreateRole/AddedMembersTable.esm.js +31 -0
- package/dist/components/CreateRole/AddedMembersTable.esm.js.map +1 -0
- package/dist/components/CreateRole/AddedMembersTableColumn.esm.js +77 -0
- package/dist/components/CreateRole/AddedMembersTableColumn.esm.js.map +1 -0
- package/dist/components/CreateRole/CreateRolePage.esm.js +53 -0
- package/dist/components/CreateRole/CreateRolePage.esm.js.map +1 -0
- package/dist/components/CreateRole/EditRolePage.esm.js +65 -0
- package/dist/components/CreateRole/EditRolePage.esm.js.map +1 -0
- package/dist/components/CreateRole/MembersDropdownOption.esm.js +40 -0
- package/dist/components/CreateRole/MembersDropdownOption.esm.js.map +1 -0
- package/dist/components/CreateRole/PermissionPoliciesForm.esm.js +144 -0
- package/dist/components/CreateRole/PermissionPoliciesForm.esm.js.map +1 -0
- package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js +179 -0
- package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js.map +1 -0
- package/dist/components/CreateRole/PoliciesCheckboxGroup.esm.js +76 -0
- package/dist/components/CreateRole/PoliciesCheckboxGroup.esm.js.map +1 -0
- package/dist/components/CreateRole/ReviewStep.esm.js +50 -0
- package/dist/components/CreateRole/ReviewStep.esm.js.map +1 -0
- package/dist/components/CreateRole/ReviewStepTable.esm.js +29 -0
- package/dist/components/CreateRole/ReviewStepTable.esm.js.map +1 -0
- package/dist/components/CreateRole/RoleDetailsForm.esm.js +57 -0
- package/dist/components/CreateRole/RoleDetailsForm.esm.js.map +1 -0
- package/dist/components/CreateRole/RoleForm.esm.js +271 -0
- package/dist/components/CreateRole/RoleForm.esm.js.map +1 -0
- package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js +34 -0
- package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js.map +1 -0
- package/dist/components/CreateRole/const.esm.js +14 -0
- package/dist/components/CreateRole/const.esm.js.map +1 -0
- package/dist/components/DownloadUserStatistics.esm.js +51 -0
- package/dist/components/DownloadUserStatistics.esm.js.map +1 -0
- package/dist/components/EditRole.esm.js +30 -0
- package/dist/components/EditRole.esm.js.map +1 -0
- package/dist/components/RbacPage.esm.js +18 -0
- package/dist/components/RbacPage.esm.js.map +1 -0
- package/dist/components/RoleOverview/AboutCard.esm.js +89 -0
- package/dist/components/RoleOverview/AboutCard.esm.js.map +1 -0
- package/dist/components/RoleOverview/MembersCard.esm.js +87 -0
- package/dist/components/RoleOverview/MembersCard.esm.js.map +1 -0
- package/dist/components/RoleOverview/MembersListColumns.esm.js +48 -0
- package/dist/components/RoleOverview/MembersListColumns.esm.js.map +1 -0
- package/dist/components/RoleOverview/PermissionsCard.esm.js +99 -0
- package/dist/components/RoleOverview/PermissionsCard.esm.js.map +1 -0
- package/dist/components/RoleOverview/PermissionsListColumns.esm.js +43 -0
- package/dist/components/RoleOverview/PermissionsListColumns.esm.js.map +1 -0
- package/dist/components/RoleOverview/RoleOverviewPage.esm.js +49 -0
- package/dist/components/RoleOverview/RoleOverviewPage.esm.js.map +1 -0
- package/dist/components/RolesList/DeleteRole.esm.js +32 -0
- package/dist/components/RolesList/DeleteRole.esm.js.map +1 -0
- package/dist/components/RolesList/DeleteRoleDialog.esm.js +142 -0
- package/dist/components/RolesList/DeleteRoleDialog.esm.js.map +1 -0
- package/dist/components/RolesList/RolesList.esm.js +102 -0
- package/dist/components/RolesList/RolesList.esm.js.map +1 -0
- package/dist/components/RolesList/RolesListColumns.esm.js +76 -0
- package/dist/components/RolesList/RolesListColumns.esm.js.map +1 -0
- package/dist/components/RolesList/RolesListToolbar.esm.js +48 -0
- package/dist/components/RolesList/RolesListToolbar.esm.js.map +1 -0
- package/dist/components/Router.esm.js +57 -0
- package/dist/components/Router.esm.js.map +1 -0
- package/dist/components/SnackbarAlert.esm.js +23 -0
- package/dist/components/SnackbarAlert.esm.js.map +1 -0
- package/dist/components/ToastContext.esm.js +19 -0
- package/dist/components/ToastContext.esm.js.map +1 -0
- package/dist/components/index.esm.js +5 -0
- package/dist/components/index.esm.js.map +1 -0
- package/dist/hooks/useCheckIfLicensePluginEnabled.esm.js +20 -0
- package/dist/hooks/useCheckIfLicensePluginEnabled.esm.js.map +1 -0
- package/dist/hooks/useConditionRules.esm.js +64 -0
- package/dist/hooks/useConditionRules.esm.js.map +1 -0
- package/dist/hooks/useLocationToast.esm.js +15 -0
- package/dist/hooks/useLocationToast.esm.js.map +1 -0
- package/dist/hooks/useMembers.esm.js +92 -0
- package/dist/hooks/useMembers.esm.js.map +1 -0
- package/dist/hooks/usePermissionPolicies.esm.js +80 -0
- package/dist/hooks/usePermissionPolicies.esm.js.map +1 -0
- package/dist/hooks/useRole.esm.js +23 -0
- package/dist/hooks/useRole.esm.js.map +1 -0
- package/dist/hooks/useRoles.esm.js +169 -0
- package/dist/hooks/useRoles.esm.js.map +1 -0
- package/dist/hooks/useSelectedMembers.esm.js +39 -0
- package/dist/hooks/useSelectedMembers.esm.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.esm.js +4 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/plugin.esm.js +49 -0
- package/dist/plugin.esm.js.map +1 -0
- package/dist/routes.esm.js +23 -0
- package/dist/routes.esm.js.map +1 -0
- package/dist/utils/conditional-access-utils.esm.js +268 -0
- package/dist/utils/conditional-access-utils.esm.js.map +1 -0
- package/dist/utils/create-role-utils.esm.js +231 -0
- package/dist/utils/create-role-utils.esm.js.map +1 -0
- package/dist/utils/rbac-utils.esm.js +256 -0
- package/dist/utils/rbac-utils.esm.js.map +1 -0
- package/dist/utils/role-form-utils.esm.js +66 -0
- package/dist/utils/role-form-utils.esm.js.map +1 -0
- package/package.json +120 -0
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useTheme, RadioGroup, FormControlLabel, Radio, IconButton } from '@material-ui/core';
|
|
3
|
+
import AddIcon from '@mui/icons-material/Add';
|
|
4
|
+
import RemoveIcon from '@mui/icons-material/Remove';
|
|
5
|
+
import Box from '@mui/material/Box';
|
|
6
|
+
import Button from '@mui/material/Button';
|
|
7
|
+
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup';
|
|
8
|
+
import { makeConditionsFormRowStyles, extractNestedConditions, getDefaultRule, ruleOptionDisabled, isNestedConditionRule, resetErrors, isSimpleRule, getSimpleRulesCount, getNestedConditionSimpleRulesCount, nestedConditionButtons } from '../../utils/conditional-access-utils.esm.js';
|
|
9
|
+
import { AddNestedConditionButton } from './AddNestedConditionButton.esm.js';
|
|
10
|
+
import { ComplexConditionRow } from './ComplexConditionRow.esm.js';
|
|
11
|
+
import { ComplexConditionRowButtons } from './ComplexConditionRowButtons.esm.js';
|
|
12
|
+
import { ConditionRule } from './ConditionRule.esm.js';
|
|
13
|
+
import { ConditionsFormRowFields } from './ConditionsFormRowFields.esm.js';
|
|
14
|
+
import { criterias, conditionButtons } from './const.esm.js';
|
|
15
|
+
import { CriteriaToggleButton } from './CriteriaToggleButton.esm.js';
|
|
16
|
+
import { NotConditionType } from './types.esm.js';
|
|
17
|
+
|
|
18
|
+
const ConditionsFormRow = ({
|
|
19
|
+
conditionRulesData,
|
|
20
|
+
conditionRow,
|
|
21
|
+
selPluginResourceType,
|
|
22
|
+
criteria,
|
|
23
|
+
onRuleChange,
|
|
24
|
+
setCriteria,
|
|
25
|
+
setErrors,
|
|
26
|
+
setRemoveAllClicked
|
|
27
|
+
}) => {
|
|
28
|
+
const classes = makeConditionsFormRowStyles();
|
|
29
|
+
const theme = useTheme();
|
|
30
|
+
const [nestedConditionRow, setNestedConditionRow] = React.useState([]);
|
|
31
|
+
const [notConditionType, setNotConditionType] = React.useState(NotConditionType.SimpleCondition);
|
|
32
|
+
React.useEffect(() => {
|
|
33
|
+
const nestedConditions = [];
|
|
34
|
+
const criteriaTypes = [criterias.allOf, criterias.anyOf, criterias.not];
|
|
35
|
+
switch (criteria) {
|
|
36
|
+
case criterias.allOf:
|
|
37
|
+
extractNestedConditions(
|
|
38
|
+
conditionRow.allOf || [],
|
|
39
|
+
criteriaTypes,
|
|
40
|
+
nestedConditions
|
|
41
|
+
);
|
|
42
|
+
break;
|
|
43
|
+
case criterias.anyOf:
|
|
44
|
+
extractNestedConditions(
|
|
45
|
+
conditionRow.anyOf || [],
|
|
46
|
+
criteriaTypes,
|
|
47
|
+
nestedConditions
|
|
48
|
+
);
|
|
49
|
+
break;
|
|
50
|
+
case criterias.not:
|
|
51
|
+
if (conditionRow.not && criteriaTypes.includes(
|
|
52
|
+
Object.keys(conditionRow.not)[0]
|
|
53
|
+
)) {
|
|
54
|
+
nestedConditions.push(conditionRow.not);
|
|
55
|
+
setNotConditionType(NotConditionType.NestedCondition);
|
|
56
|
+
}
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
setNestedConditionRow(nestedConditions);
|
|
60
|
+
}, [conditionRow, criteria]);
|
|
61
|
+
const handleCriteriaChange = (val) => {
|
|
62
|
+
setCriteria(val);
|
|
63
|
+
setErrors(resetErrors(val));
|
|
64
|
+
const defaultRule = getDefaultRule(selPluginResourceType);
|
|
65
|
+
const ruleMap = {
|
|
66
|
+
[criterias.condition]: { condition: defaultRule },
|
|
67
|
+
[criterias.allOf]: { allOf: [defaultRule] },
|
|
68
|
+
[criterias.anyOf]: { anyOf: [defaultRule] },
|
|
69
|
+
[criterias.not]: { not: defaultRule }
|
|
70
|
+
};
|
|
71
|
+
if (val === criterias.not) {
|
|
72
|
+
setNotConditionType(NotConditionType.SimpleCondition);
|
|
73
|
+
}
|
|
74
|
+
const ruleChange = ruleMap[val];
|
|
75
|
+
if (ruleChange) {
|
|
76
|
+
onRuleChange(ruleChange);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const updateRules = (updatedNestedConditionRow) => {
|
|
80
|
+
const existingSimpleCondition = criteria !== criterias.not ? conditionRow[criteria]?.filter(
|
|
81
|
+
(con) => isSimpleRule(con)
|
|
82
|
+
) || [] : [];
|
|
83
|
+
const newCondition = Array.isArray(updatedNestedConditionRow) ? [...existingSimpleCondition, ...updatedNestedConditionRow] : [...existingSimpleCondition, updatedNestedConditionRow];
|
|
84
|
+
if (criteria === criterias.anyOf || criteria === criterias.allOf) {
|
|
85
|
+
onRuleChange({
|
|
86
|
+
[criteria]: newCondition
|
|
87
|
+
});
|
|
88
|
+
} else if (criteria === criterias.not && !Array.isArray(updatedNestedConditionRow)) {
|
|
89
|
+
onRuleChange({
|
|
90
|
+
not: updatedNestedConditionRow
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const handleNestedConditionCriteriaChange = (val, nestedConditionIndex) => {
|
|
95
|
+
const defaultRule = getDefaultRule(selPluginResourceType);
|
|
96
|
+
const nestedConditionMap = {
|
|
97
|
+
[criterias.not]: { [val]: defaultRule },
|
|
98
|
+
[criterias.allOf]: { [val]: [defaultRule] },
|
|
99
|
+
[criterias.anyOf]: { [val]: [defaultRule] },
|
|
100
|
+
[criterias.condition]: { [val]: [defaultRule] }
|
|
101
|
+
};
|
|
102
|
+
const newCondition = nestedConditionMap[val] || { [val]: [defaultRule] };
|
|
103
|
+
setErrors((prevErrors) => {
|
|
104
|
+
const updatedErrors = { ...prevErrors };
|
|
105
|
+
if (updatedErrors[criteria] !== void 0) {
|
|
106
|
+
if (criteria === criterias.not) {
|
|
107
|
+
updatedErrors[criteria] = val !== criterias.not ? { [val]: [""] } : { [val]: "" };
|
|
108
|
+
return updatedErrors;
|
|
109
|
+
}
|
|
110
|
+
const criteriaErrors = updatedErrors[criteria];
|
|
111
|
+
const simpleRuleErrors = criteriaErrors.filter(
|
|
112
|
+
(err) => typeof err === "string"
|
|
113
|
+
);
|
|
114
|
+
const nestedConditionErrors = criteriaErrors.filter((err) => typeof err !== "string");
|
|
115
|
+
nestedConditionErrors[nestedConditionIndex] = val !== criterias.not ? { [val]: [""] } : { [val]: "" };
|
|
116
|
+
updatedErrors[criteria] = [
|
|
117
|
+
...simpleRuleErrors,
|
|
118
|
+
...nestedConditionErrors
|
|
119
|
+
];
|
|
120
|
+
}
|
|
121
|
+
return updatedErrors;
|
|
122
|
+
});
|
|
123
|
+
if (criteria === criterias.not) {
|
|
124
|
+
updateRules(newCondition);
|
|
125
|
+
} else {
|
|
126
|
+
const updatedNestedConditionRow = nestedConditionRow.map((c, index) => {
|
|
127
|
+
if (index === nestedConditionIndex) {
|
|
128
|
+
return newCondition;
|
|
129
|
+
}
|
|
130
|
+
return c;
|
|
131
|
+
});
|
|
132
|
+
updateRules(updatedNestedConditionRow);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
const handleAddNestedCondition = (currentCriteria) => {
|
|
136
|
+
const newNestedCondition = {
|
|
137
|
+
[criterias.allOf]: [getDefaultRule(selPluginResourceType)]
|
|
138
|
+
};
|
|
139
|
+
const updatedNestedConditionRow = [
|
|
140
|
+
...nestedConditionRow,
|
|
141
|
+
newNestedCondition
|
|
142
|
+
];
|
|
143
|
+
updateRules(
|
|
144
|
+
currentCriteria === criterias.not ? newNestedCondition : updatedNestedConditionRow
|
|
145
|
+
);
|
|
146
|
+
setErrors((prevErrors) => {
|
|
147
|
+
const updatedErrors = { ...prevErrors };
|
|
148
|
+
if (updatedErrors[currentCriteria]) {
|
|
149
|
+
const criteriaErrors = updatedErrors[currentCriteria];
|
|
150
|
+
if (Array.isArray(criteriaErrors)) {
|
|
151
|
+
criteriaErrors.push({ [criterias.allOf]: [""] });
|
|
152
|
+
} else {
|
|
153
|
+
updatedErrors[currentCriteria] = {
|
|
154
|
+
[criterias.allOf]: [""]
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return updatedErrors;
|
|
159
|
+
});
|
|
160
|
+
};
|
|
161
|
+
const handleNotConditionTypeChange = (val) => {
|
|
162
|
+
setNotConditionType(val);
|
|
163
|
+
setErrors(resetErrors(criteria, val));
|
|
164
|
+
if (val === "nested-condition") {
|
|
165
|
+
handleAddNestedCondition(criterias.not);
|
|
166
|
+
} else {
|
|
167
|
+
onRuleChange({
|
|
168
|
+
not: getDefaultRule(selPluginResourceType)
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
const handleAddRuleInNestedCondition = (nestedConditionCriteria, nestedConditionIndex) => {
|
|
173
|
+
const updatedNestedConditionRow = [];
|
|
174
|
+
nestedConditionRow.forEach((c, index) => {
|
|
175
|
+
if (index === nestedConditionIndex) {
|
|
176
|
+
updatedNestedConditionRow.push({
|
|
177
|
+
[nestedConditionCriteria]: [
|
|
178
|
+
...c[nestedConditionCriteria] || [],
|
|
179
|
+
getDefaultRule(selPluginResourceType)
|
|
180
|
+
]
|
|
181
|
+
});
|
|
182
|
+
} else {
|
|
183
|
+
updatedNestedConditionRow.push(c);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
updateRules(
|
|
187
|
+
criteria === criterias.not ? updatedNestedConditionRow[0] : updatedNestedConditionRow
|
|
188
|
+
);
|
|
189
|
+
setErrors((prevErrors) => {
|
|
190
|
+
const updatedErrors = { ...prevErrors };
|
|
191
|
+
if (updatedErrors[criteria] !== void 0) {
|
|
192
|
+
const criteriaErrors = updatedErrors[criteria];
|
|
193
|
+
if (criteria === criterias.not && notConditionType === "nested-condition") {
|
|
194
|
+
criteriaErrors[nestedConditionCriteria].push("");
|
|
195
|
+
return updatedErrors;
|
|
196
|
+
}
|
|
197
|
+
const simpleRuleErrors = criteriaErrors.filter(
|
|
198
|
+
(err) => typeof err === "string"
|
|
199
|
+
);
|
|
200
|
+
const nestedConditionErrors = criteriaErrors.filter((err) => typeof err !== "string");
|
|
201
|
+
(nestedConditionErrors[nestedConditionIndex][nestedConditionCriteria] || []).push("");
|
|
202
|
+
updatedErrors[criteria] = [
|
|
203
|
+
...simpleRuleErrors,
|
|
204
|
+
...nestedConditionErrors
|
|
205
|
+
];
|
|
206
|
+
}
|
|
207
|
+
return updatedErrors;
|
|
208
|
+
});
|
|
209
|
+
};
|
|
210
|
+
const handleRemoveNestedCondition = (nestedConditionIndex) => {
|
|
211
|
+
const updatedNestedConditionRow = nestedConditionRow.filter(
|
|
212
|
+
(_, index) => index !== nestedConditionIndex
|
|
213
|
+
);
|
|
214
|
+
updateRules(updatedNestedConditionRow);
|
|
215
|
+
setErrors((prevErrors) => {
|
|
216
|
+
const updatedErrors = { ...prevErrors };
|
|
217
|
+
if (updatedErrors[criteria] !== void 0) {
|
|
218
|
+
const criteriaErrors = updatedErrors[criteria];
|
|
219
|
+
const simpleRuleErrors = criteriaErrors.filter(
|
|
220
|
+
(err) => typeof err === "string"
|
|
221
|
+
);
|
|
222
|
+
const nestedConditionErrors = criteriaErrors.filter(
|
|
223
|
+
(err) => typeof err !== "string"
|
|
224
|
+
);
|
|
225
|
+
nestedConditionErrors.splice(nestedConditionIndex, 1);
|
|
226
|
+
updatedErrors[criteria] = [
|
|
227
|
+
...simpleRuleErrors,
|
|
228
|
+
...nestedConditionErrors
|
|
229
|
+
];
|
|
230
|
+
}
|
|
231
|
+
return updatedErrors;
|
|
232
|
+
});
|
|
233
|
+
};
|
|
234
|
+
const updateErrors = (_index) => {
|
|
235
|
+
setErrors((prevErrors) => {
|
|
236
|
+
const updatedErrors = { ...prevErrors };
|
|
237
|
+
if (!Array.isArray(updatedErrors[criteria])) {
|
|
238
|
+
updatedErrors[criteria] = [];
|
|
239
|
+
}
|
|
240
|
+
const firstNestedConditionErrorIndex = updatedErrors[criteria].findIndex(
|
|
241
|
+
(e) => typeof e !== "string"
|
|
242
|
+
) || 0;
|
|
243
|
+
updatedErrors[criteria].splice(
|
|
244
|
+
firstNestedConditionErrorIndex,
|
|
245
|
+
0,
|
|
246
|
+
""
|
|
247
|
+
);
|
|
248
|
+
return updatedErrors;
|
|
249
|
+
});
|
|
250
|
+
};
|
|
251
|
+
const renderNestedConditionRow = (nc, nestedConditionIndex) => {
|
|
252
|
+
const selectedNestedConditionCriteria = Object.keys(nc)[0];
|
|
253
|
+
const simpleRulesCount = getSimpleRulesCount(conditionRow, criteria);
|
|
254
|
+
const nestedConditionsCount = nestedConditionRow.length;
|
|
255
|
+
const nestedConditionSimpleRulesCount = getNestedConditionSimpleRulesCount(
|
|
256
|
+
nc,
|
|
257
|
+
selectedNestedConditionCriteria
|
|
258
|
+
);
|
|
259
|
+
return nestedConditionSimpleRulesCount > 0 && /* @__PURE__ */ React.createElement(
|
|
260
|
+
Box,
|
|
261
|
+
{
|
|
262
|
+
mt: 2,
|
|
263
|
+
className: classes.nestedConditionRow,
|
|
264
|
+
key: `nestedCondition-${nestedConditionIndex}`
|
|
265
|
+
},
|
|
266
|
+
/* @__PURE__ */ React.createElement("div", { style: { display: "flex", justifyContent: "space-between" } }, /* @__PURE__ */ React.createElement(
|
|
267
|
+
ToggleButtonGroup,
|
|
268
|
+
{
|
|
269
|
+
exclusive: true,
|
|
270
|
+
value: selectedNestedConditionCriteria,
|
|
271
|
+
onChange: (_event, newNestedCriteria) => handleNestedConditionCriteriaChange(
|
|
272
|
+
newNestedCriteria,
|
|
273
|
+
nestedConditionIndex
|
|
274
|
+
),
|
|
275
|
+
className: classes.nestedConditioncriteriaButtonGroup
|
|
276
|
+
},
|
|
277
|
+
nestedConditionButtons.map(({ val, label }) => /* @__PURE__ */ React.createElement(
|
|
278
|
+
CriteriaToggleButton,
|
|
279
|
+
{
|
|
280
|
+
key: `nested-criteria-${val}`,
|
|
281
|
+
val,
|
|
282
|
+
label,
|
|
283
|
+
selectedCriteria: selectedNestedConditionCriteria,
|
|
284
|
+
theme
|
|
285
|
+
}
|
|
286
|
+
))
|
|
287
|
+
), criteria !== criterias.not && /* @__PURE__ */ React.createElement(
|
|
288
|
+
IconButton,
|
|
289
|
+
{
|
|
290
|
+
title: "Remove nested condition",
|
|
291
|
+
className: classes.removeNestedRuleButton,
|
|
292
|
+
disabled: simpleRulesCount === 0 && nestedConditionsCount === 1,
|
|
293
|
+
onClick: () => handleRemoveNestedCondition(nestedConditionIndex)
|
|
294
|
+
},
|
|
295
|
+
/* @__PURE__ */ React.createElement(RemoveIcon, { "data-testid": "remove-nested-condition" })
|
|
296
|
+
)),
|
|
297
|
+
/* @__PURE__ */ React.createElement(Box, null, selectedNestedConditionCriteria !== criterias.not && nc[selectedNestedConditionCriteria].map((c, ncrIndex) => /* @__PURE__ */ React.createElement(
|
|
298
|
+
ComplexConditionRow,
|
|
299
|
+
{
|
|
300
|
+
key: `nested-condition-${nestedConditionIndex}-${ncrIndex}`,
|
|
301
|
+
conditionRow,
|
|
302
|
+
nestedConditionRow,
|
|
303
|
+
criteria,
|
|
304
|
+
onRuleChange,
|
|
305
|
+
updateRules,
|
|
306
|
+
setErrors,
|
|
307
|
+
setRemoveAllClicked,
|
|
308
|
+
conditionRulesData,
|
|
309
|
+
notConditionType,
|
|
310
|
+
classes,
|
|
311
|
+
currentCondition: c,
|
|
312
|
+
ruleIndex: ncrIndex,
|
|
313
|
+
isNestedCondition: true,
|
|
314
|
+
nestedConditionIndex,
|
|
315
|
+
activeNestedCriteria: selectedNestedConditionCriteria
|
|
316
|
+
}
|
|
317
|
+
)), selectedNestedConditionCriteria === criterias.not && nc.not.resourceType && /* @__PURE__ */ React.createElement(
|
|
318
|
+
ConditionsFormRowFields,
|
|
319
|
+
{
|
|
320
|
+
oldCondition: nc.not ?? getDefaultRule(selPluginResourceType),
|
|
321
|
+
onRuleChange,
|
|
322
|
+
conditionRow,
|
|
323
|
+
criteria,
|
|
324
|
+
conditionRulesData,
|
|
325
|
+
setErrors,
|
|
326
|
+
optionDisabled: (ruleOption) => ruleOptionDisabled(
|
|
327
|
+
ruleOption,
|
|
328
|
+
nc.not ? [nc.not] : void 0
|
|
329
|
+
),
|
|
330
|
+
setRemoveAllClicked,
|
|
331
|
+
nestedConditionRow,
|
|
332
|
+
nestedConditionCriteria: selectedNestedConditionCriteria,
|
|
333
|
+
nestedConditionIndex,
|
|
334
|
+
updateRules
|
|
335
|
+
}
|
|
336
|
+
), selectedNestedConditionCriteria !== criterias.not && /* @__PURE__ */ React.createElement(
|
|
337
|
+
Button,
|
|
338
|
+
{
|
|
339
|
+
className: classes.addRuleButton,
|
|
340
|
+
size: "small",
|
|
341
|
+
onClick: () => handleAddRuleInNestedCondition(
|
|
342
|
+
selectedNestedConditionCriteria,
|
|
343
|
+
nestedConditionIndex
|
|
344
|
+
)
|
|
345
|
+
},
|
|
346
|
+
/* @__PURE__ */ React.createElement(AddIcon, { fontSize: "small" }),
|
|
347
|
+
"Add rule"
|
|
348
|
+
))
|
|
349
|
+
);
|
|
350
|
+
};
|
|
351
|
+
return /* @__PURE__ */ React.createElement(Box, { className: classes.conditionRow, "data-testid": "conditions-row" }, /* @__PURE__ */ React.createElement(
|
|
352
|
+
ToggleButtonGroup,
|
|
353
|
+
{
|
|
354
|
+
exclusive: true,
|
|
355
|
+
value: criteria,
|
|
356
|
+
onChange: (_event, newCriteria) => handleCriteriaChange(newCriteria),
|
|
357
|
+
className: classes.criteriaButtonGroup
|
|
358
|
+
},
|
|
359
|
+
conditionButtons.map(({ val, label }) => /* @__PURE__ */ React.createElement(
|
|
360
|
+
CriteriaToggleButton,
|
|
361
|
+
{
|
|
362
|
+
key: `criteria-${val}`,
|
|
363
|
+
val,
|
|
364
|
+
label,
|
|
365
|
+
selectedCriteria: criteria,
|
|
366
|
+
theme
|
|
367
|
+
}
|
|
368
|
+
))
|
|
369
|
+
), /* @__PURE__ */ React.createElement(
|
|
370
|
+
ConditionRule,
|
|
371
|
+
{
|
|
372
|
+
conditionRow,
|
|
373
|
+
selPluginResourceType,
|
|
374
|
+
onRuleChange,
|
|
375
|
+
criteria,
|
|
376
|
+
conditionRulesData,
|
|
377
|
+
setErrors,
|
|
378
|
+
setRemoveAllClicked
|
|
379
|
+
}
|
|
380
|
+
), criteria !== criterias.condition && /* @__PURE__ */ React.createElement(Box, null, criteria !== criterias.not && conditionRow[criteria]?.map(
|
|
381
|
+
(c, srIndex) => /* @__PURE__ */ React.createElement(
|
|
382
|
+
ComplexConditionRow,
|
|
383
|
+
{
|
|
384
|
+
key: `${criteria}-simple-condition-${srIndex}`,
|
|
385
|
+
conditionRow,
|
|
386
|
+
nestedConditionRow,
|
|
387
|
+
criteria,
|
|
388
|
+
onRuleChange,
|
|
389
|
+
updateRules,
|
|
390
|
+
setErrors,
|
|
391
|
+
setRemoveAllClicked,
|
|
392
|
+
conditionRulesData,
|
|
393
|
+
notConditionType,
|
|
394
|
+
classes,
|
|
395
|
+
currentCondition: c,
|
|
396
|
+
ruleIndex: srIndex,
|
|
397
|
+
activeCriteria: criteria
|
|
398
|
+
}
|
|
399
|
+
)
|
|
400
|
+
), criteria === criterias.not && /* @__PURE__ */ React.createElement(
|
|
401
|
+
RadioGroup,
|
|
402
|
+
{
|
|
403
|
+
className: classes.radioGroup,
|
|
404
|
+
value: notConditionType,
|
|
405
|
+
onChange: (_event, value) => handleNotConditionTypeChange(value)
|
|
406
|
+
},
|
|
407
|
+
/* @__PURE__ */ React.createElement(
|
|
408
|
+
FormControlLabel,
|
|
409
|
+
{
|
|
410
|
+
value: NotConditionType.SimpleCondition,
|
|
411
|
+
control: /* @__PURE__ */ React.createElement(Radio, { color: "primary" }),
|
|
412
|
+
label: "Add rule",
|
|
413
|
+
className: classes.radioLabel
|
|
414
|
+
}
|
|
415
|
+
),
|
|
416
|
+
notConditionType === NotConditionType.SimpleCondition && /* @__PURE__ */ React.createElement(
|
|
417
|
+
ConditionsFormRowFields,
|
|
418
|
+
{
|
|
419
|
+
oldCondition: conditionRow.not ?? getDefaultRule(selPluginResourceType),
|
|
420
|
+
onRuleChange,
|
|
421
|
+
conditionRow,
|
|
422
|
+
criteria,
|
|
423
|
+
conditionRulesData,
|
|
424
|
+
setErrors,
|
|
425
|
+
optionDisabled: (ruleOption) => ruleOptionDisabled(
|
|
426
|
+
ruleOption,
|
|
427
|
+
conditionRow.not ? [conditionRow.not] : void 0
|
|
428
|
+
),
|
|
429
|
+
setRemoveAllClicked
|
|
430
|
+
}
|
|
431
|
+
),
|
|
432
|
+
/* @__PURE__ */ React.createElement(
|
|
433
|
+
FormControlLabel,
|
|
434
|
+
{
|
|
435
|
+
value: NotConditionType.NestedCondition,
|
|
436
|
+
control: /* @__PURE__ */ React.createElement(Radio, { color: "primary" }),
|
|
437
|
+
label: /* @__PURE__ */ React.createElement(AddNestedConditionButton, null),
|
|
438
|
+
className: classes.radioLabel
|
|
439
|
+
}
|
|
440
|
+
)
|
|
441
|
+
), /* @__PURE__ */ React.createElement(
|
|
442
|
+
ComplexConditionRowButtons,
|
|
443
|
+
{
|
|
444
|
+
conditionRow,
|
|
445
|
+
onRuleChange,
|
|
446
|
+
criteria,
|
|
447
|
+
classes,
|
|
448
|
+
selPluginResourceType,
|
|
449
|
+
updateErrors,
|
|
450
|
+
isNestedConditionRule,
|
|
451
|
+
handleAddNestedCondition
|
|
452
|
+
}
|
|
453
|
+
), nestedConditionRow?.length > 0 && nestedConditionRow.map(
|
|
454
|
+
(nc, nestedConditionIndex) => renderNestedConditionRow(nc, nestedConditionIndex)
|
|
455
|
+
)));
|
|
456
|
+
};
|
|
457
|
+
|
|
458
|
+
export { ConditionsFormRow };
|
|
459
|
+
//# sourceMappingURL=ConditionsFormRow.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConditionsFormRow.esm.js","sources":["../../../src/components/ConditionalAccess/ConditionsFormRow.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { PermissionCondition } from '@backstage/plugin-permission-common';\n\nimport {\n FormControlLabel,\n IconButton,\n Radio,\n RadioGroup,\n useTheme,\n} from '@material-ui/core';\nimport AddIcon from '@mui/icons-material/Add';\nimport RemoveIcon from '@mui/icons-material/Remove';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\n\nimport {\n extractNestedConditions,\n getDefaultRule,\n getNestedConditionSimpleRulesCount,\n getSimpleRulesCount,\n isNestedConditionRule,\n isSimpleRule,\n makeConditionsFormRowStyles,\n nestedConditionButtons,\n resetErrors,\n ruleOptionDisabled,\n} from '../../utils/conditional-access-utils';\nimport { AddNestedConditionButton } from './AddNestedConditionButton';\nimport { ComplexConditionRow } from './ComplexConditionRow';\nimport { ComplexConditionRowButtons } from './ComplexConditionRowButtons';\nimport { ConditionRule } from './ConditionRule';\nimport { ConditionsFormRowFields } from './ConditionsFormRowFields';\nimport { conditionButtons, criterias } from './const';\nimport { CriteriaToggleButton } from './CriteriaToggleButton';\nimport {\n ComplexErrors,\n Condition,\n ConditionFormRowProps,\n ConditionsData,\n NestedCriteriaErrors,\n NotConditionType,\n} from './types';\n\nexport const ConditionsFormRow = ({\n conditionRulesData,\n conditionRow,\n selPluginResourceType,\n criteria,\n onRuleChange,\n setCriteria,\n setErrors,\n setRemoveAllClicked,\n}: ConditionFormRowProps) => {\n const classes = makeConditionsFormRowStyles();\n const theme = useTheme();\n const [nestedConditionRow, setNestedConditionRow] = React.useState<\n Condition[]\n >([]);\n const [notConditionType, setNotConditionType] =\n React.useState<NotConditionType>(NotConditionType.SimpleCondition);\n\n React.useEffect(() => {\n const nestedConditions: Condition[] = [];\n const criteriaTypes = [criterias.allOf, criterias.anyOf, criterias.not];\n switch (criteria) {\n case criterias.allOf:\n extractNestedConditions(\n conditionRow.allOf || [],\n criteriaTypes,\n nestedConditions,\n );\n break;\n case criterias.anyOf:\n extractNestedConditions(\n conditionRow.anyOf || [],\n criteriaTypes,\n nestedConditions,\n );\n break;\n case criterias.not:\n if (\n conditionRow.not &&\n criteriaTypes.includes(\n Object.keys(conditionRow.not)[0] as keyof ConditionsData,\n )\n ) {\n nestedConditions.push(conditionRow.not);\n setNotConditionType(NotConditionType.NestedCondition);\n }\n break;\n default:\n break;\n }\n\n setNestedConditionRow(nestedConditions);\n }, [conditionRow, criteria]);\n\n const handleCriteriaChange = (val: keyof ConditionsData) => {\n setCriteria(val);\n setErrors(resetErrors(val));\n\n const defaultRule = getDefaultRule(selPluginResourceType);\n\n const ruleMap = {\n [criterias.condition]: { condition: defaultRule },\n [criterias.allOf]: { allOf: [defaultRule] },\n [criterias.anyOf]: { anyOf: [defaultRule] },\n [criterias.not]: { not: defaultRule },\n };\n\n if (val === criterias.not) {\n setNotConditionType(NotConditionType.SimpleCondition);\n }\n\n const ruleChange = ruleMap[val];\n if (ruleChange) {\n onRuleChange(ruleChange);\n }\n };\n\n const updateRules = (updatedNestedConditionRow: Condition[] | Condition) => {\n const existingSimpleCondition =\n criteria !== criterias.not\n ? (conditionRow[criteria as keyof Condition] as Condition[])?.filter(\n con => isSimpleRule(con),\n ) || []\n : [];\n\n const newCondition: Condition[] = Array.isArray(updatedNestedConditionRow)\n ? [...existingSimpleCondition, ...updatedNestedConditionRow]\n : [...existingSimpleCondition, updatedNestedConditionRow];\n\n if (criteria === criterias.anyOf || criteria === criterias.allOf) {\n onRuleChange({\n [criteria]: newCondition,\n });\n } else if (\n criteria === criterias.not &&\n !Array.isArray(updatedNestedConditionRow)\n ) {\n onRuleChange({\n not: updatedNestedConditionRow,\n });\n }\n };\n\n const handleNestedConditionCriteriaChange = (\n val: string,\n nestedConditionIndex: number,\n ) => {\n const defaultRule = getDefaultRule(selPluginResourceType);\n\n const nestedConditionMap = {\n [criterias.not]: { [val]: defaultRule },\n [criterias.allOf]: { [val]: [defaultRule] },\n [criterias.anyOf]: { [val]: [defaultRule] },\n [criterias.condition]: { [val]: [defaultRule] },\n };\n\n const newCondition = nestedConditionMap[val] || { [val]: [defaultRule] };\n\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n\n if (updatedErrors[criteria] !== undefined) {\n if (criteria === criterias.not) {\n (updatedErrors[criteria] as ComplexErrors) =\n val !== criterias.not ? { [val]: [''] } : { [val]: '' };\n return updatedErrors;\n }\n const criteriaErrors = updatedErrors[criteria];\n const simpleRuleErrors = (criteriaErrors as ComplexErrors[]).filter(\n (err: ComplexErrors) => typeof err === 'string',\n );\n const nestedConditionErrors = (\n criteriaErrors as ComplexErrors[]\n ).filter((err: ComplexErrors) => typeof err !== 'string');\n nestedConditionErrors[nestedConditionIndex] =\n val !== criterias.not ? { [val]: [''] } : { [val]: '' };\n updatedErrors[criteria] = [\n ...simpleRuleErrors,\n ...nestedConditionErrors,\n ];\n }\n\n return updatedErrors;\n });\n\n if (criteria === criterias.not) {\n updateRules(newCondition);\n } else {\n const updatedNestedConditionRow = nestedConditionRow.map((c, index) => {\n if (index === nestedConditionIndex) {\n return newCondition;\n }\n return c;\n });\n updateRules(updatedNestedConditionRow);\n }\n };\n\n const handleAddNestedCondition = (currentCriteria: string) => {\n const newNestedCondition = {\n [criterias.allOf]: [getDefaultRule(selPluginResourceType)],\n };\n const updatedNestedConditionRow = [\n ...nestedConditionRow,\n newNestedCondition,\n ];\n updateRules(\n currentCriteria === criterias.not\n ? newNestedCondition\n : updatedNestedConditionRow,\n );\n\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n if (updatedErrors[currentCriteria]) {\n const criteriaErrors = updatedErrors[\n currentCriteria\n ] as ComplexErrors[];\n if (Array.isArray(criteriaErrors)) {\n criteriaErrors.push({ [criterias.allOf]: [''] });\n } else {\n (updatedErrors[currentCriteria] as ComplexErrors) = {\n [criterias.allOf]: [''],\n };\n }\n }\n return updatedErrors;\n });\n };\n\n const handleNotConditionTypeChange = (val: NotConditionType) => {\n setNotConditionType(val);\n setErrors(resetErrors(criteria, val));\n if (val === 'nested-condition') {\n handleAddNestedCondition(criterias.not);\n } else {\n onRuleChange({\n not: getDefaultRule(selPluginResourceType),\n });\n }\n };\n\n const handleAddRuleInNestedCondition = (\n nestedConditionCriteria: string,\n nestedConditionIndex: number,\n ) => {\n const updatedNestedConditionRow: Condition[] = [];\n\n nestedConditionRow.forEach((c, index) => {\n if (index === nestedConditionIndex) {\n updatedNestedConditionRow.push({\n [nestedConditionCriteria as keyof Condition]: [\n ...((c[\n nestedConditionCriteria as keyof Condition\n ] as PermissionCondition[]) || []),\n getDefaultRule(selPluginResourceType),\n ],\n });\n } else {\n updatedNestedConditionRow.push(c);\n }\n });\n updateRules(\n criteria === criterias.not\n ? updatedNestedConditionRow[0]\n : updatedNestedConditionRow,\n );\n\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n if (updatedErrors[criteria] !== undefined) {\n const criteriaErrors = updatedErrors[criteria];\n if (\n criteria === criterias.not &&\n notConditionType === 'nested-condition'\n ) {\n (\n (criteriaErrors as NestedCriteriaErrors)[\n nestedConditionCriteria\n ] as string[]\n ).push('');\n return updatedErrors;\n }\n const simpleRuleErrors = (criteriaErrors as ComplexErrors[]).filter(\n (err: ComplexErrors) => typeof err === 'string',\n );\n const nestedConditionErrors = (\n criteriaErrors as ComplexErrors[]\n ).filter((err: ComplexErrors) => typeof err !== 'string');\n\n (\n ((\n nestedConditionErrors[nestedConditionIndex] as NestedCriteriaErrors\n )[nestedConditionCriteria] as string[]) || []\n ).push('');\n updatedErrors[criteria] = [\n ...simpleRuleErrors,\n ...nestedConditionErrors,\n ];\n }\n return updatedErrors;\n });\n };\n\n const handleRemoveNestedCondition = (nestedConditionIndex: number) => {\n const updatedNestedConditionRow = nestedConditionRow.filter(\n (_, index) => index !== nestedConditionIndex,\n );\n\n updateRules(updatedNestedConditionRow);\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n\n if (updatedErrors[criteria] !== undefined) {\n const criteriaErrors = updatedErrors[criteria] as ComplexErrors[];\n const simpleRuleErrors = criteriaErrors.filter(\n (err: ComplexErrors) => typeof err === 'string',\n );\n const nestedConditionErrors = criteriaErrors.filter(\n (err: ComplexErrors) => typeof err !== 'string',\n );\n nestedConditionErrors.splice(nestedConditionIndex, 1);\n\n updatedErrors[criteria] = [\n ...simpleRuleErrors,\n ...nestedConditionErrors,\n ];\n }\n\n return updatedErrors;\n });\n };\n\n const updateErrors = (_index: number) => {\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n\n if (!Array.isArray(updatedErrors[criteria])) {\n updatedErrors[criteria] = [];\n }\n\n const firstNestedConditionErrorIndex =\n (updatedErrors[criteria] as ComplexErrors[]).findIndex(\n e => typeof e !== 'string',\n ) || 0;\n\n (updatedErrors[criteria] as ComplexErrors[]).splice(\n firstNestedConditionErrorIndex,\n 0,\n '',\n );\n\n return updatedErrors;\n });\n };\n\n const renderNestedConditionRow = (\n nc: Condition,\n nestedConditionIndex: number,\n ) => {\n const selectedNestedConditionCriteria = Object.keys(nc)[0];\n const simpleRulesCount = getSimpleRulesCount(conditionRow, criteria);\n const nestedConditionsCount = nestedConditionRow.length;\n const nestedConditionSimpleRulesCount = getNestedConditionSimpleRulesCount(\n nc,\n selectedNestedConditionCriteria,\n );\n return (\n nestedConditionSimpleRulesCount > 0 && (\n <Box\n mt={2}\n className={classes.nestedConditionRow}\n key={`nestedCondition-${nestedConditionIndex}`}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <ToggleButtonGroup\n exclusive\n value={selectedNestedConditionCriteria}\n onChange={(_event, newNestedCriteria) =>\n handleNestedConditionCriteriaChange(\n newNestedCriteria,\n nestedConditionIndex,\n )\n }\n className={classes.nestedConditioncriteriaButtonGroup}\n >\n {nestedConditionButtons.map(({ val, label }) => (\n <CriteriaToggleButton\n key={`nested-criteria-${val}`}\n val={val}\n label={label}\n selectedCriteria={selectedNestedConditionCriteria}\n theme={theme}\n />\n ))}\n </ToggleButtonGroup>\n {criteria !== criterias.not && (\n <IconButton\n title=\"Remove nested condition\"\n className={classes.removeNestedRuleButton}\n disabled={simpleRulesCount === 0 && nestedConditionsCount === 1} // 0 simple rules and this is the only 1 nested condition\n onClick={() =>\n handleRemoveNestedCondition(nestedConditionIndex)\n }\n >\n <RemoveIcon data-testid=\"remove-nested-condition\" />\n </IconButton>\n )}\n </div>\n <Box>\n {selectedNestedConditionCriteria !== criterias.not &&\n (\n nc[\n selectedNestedConditionCriteria as keyof Condition\n ] as PermissionCondition[]\n ).map((c, ncrIndex) => (\n <ComplexConditionRow\n key={`nested-condition-${nestedConditionIndex}-${ncrIndex}`}\n conditionRow={conditionRow}\n nestedConditionRow={nestedConditionRow}\n criteria={criteria}\n onRuleChange={onRuleChange}\n updateRules={updateRules}\n setErrors={setErrors}\n setRemoveAllClicked={setRemoveAllClicked}\n conditionRulesData={conditionRulesData}\n notConditionType={notConditionType}\n classes={classes}\n currentCondition={c}\n ruleIndex={ncrIndex}\n isNestedCondition\n nestedConditionIndex={nestedConditionIndex}\n activeNestedCriteria={\n selectedNestedConditionCriteria as 'allOf' | 'anyOf'\n }\n />\n ))}\n {selectedNestedConditionCriteria === criterias.not &&\n ((nc as ConditionsData).not as PermissionCondition)\n .resourceType && (\n <ConditionsFormRowFields\n oldCondition={\n (nc as ConditionsData).not ??\n getDefaultRule(selPluginResourceType)\n }\n onRuleChange={onRuleChange}\n conditionRow={conditionRow}\n criteria={criteria}\n conditionRulesData={conditionRulesData}\n setErrors={setErrors}\n optionDisabled={ruleOption =>\n ruleOptionDisabled(\n ruleOption,\n (nc as ConditionsData).not\n ? [(nc as ConditionsData).not as PermissionCondition]\n : undefined,\n )\n }\n setRemoveAllClicked={setRemoveAllClicked}\n nestedConditionRow={nestedConditionRow}\n nestedConditionCriteria={selectedNestedConditionCriteria}\n nestedConditionIndex={nestedConditionIndex}\n updateRules={updateRules}\n />\n )}\n {selectedNestedConditionCriteria !== criterias.not && (\n <Button\n className={classes.addRuleButton}\n size=\"small\"\n onClick={() =>\n handleAddRuleInNestedCondition(\n selectedNestedConditionCriteria,\n nestedConditionIndex,\n )\n }\n >\n <AddIcon fontSize=\"small\" />\n Add rule\n </Button>\n )}\n </Box>\n </Box>\n )\n );\n };\n\n return (\n <Box className={classes.conditionRow} data-testid=\"conditions-row\">\n <ToggleButtonGroup\n exclusive\n value={criteria}\n onChange={(_event, newCriteria) => handleCriteriaChange(newCriteria)}\n className={classes.criteriaButtonGroup}\n >\n {conditionButtons.map(({ val, label }) => (\n <CriteriaToggleButton\n key={`criteria-${val}`}\n val={val}\n label={label}\n selectedCriteria={criteria}\n theme={theme}\n />\n ))}\n </ToggleButtonGroup>\n <ConditionRule\n conditionRow={conditionRow}\n selPluginResourceType={selPluginResourceType}\n onRuleChange={onRuleChange}\n criteria={criteria}\n conditionRulesData={conditionRulesData}\n setErrors={setErrors}\n setRemoveAllClicked={setRemoveAllClicked}\n />\n {criteria !== criterias.condition && (\n <Box>\n {criteria !== criterias.not &&\n (conditionRow[criteria] as PermissionCondition[])?.map(\n (c, srIndex) => (\n <ComplexConditionRow\n key={`${criteria}-simple-condition-${srIndex}`}\n conditionRow={conditionRow}\n nestedConditionRow={nestedConditionRow}\n criteria={criteria}\n onRuleChange={onRuleChange}\n updateRules={updateRules}\n setErrors={setErrors}\n setRemoveAllClicked={setRemoveAllClicked}\n conditionRulesData={conditionRulesData}\n notConditionType={notConditionType}\n classes={classes}\n currentCondition={c}\n ruleIndex={srIndex}\n activeCriteria={criteria as 'allOf' | 'anyOf'}\n />\n ),\n )}\n {criteria === criterias.not && (\n <RadioGroup\n className={classes.radioGroup}\n value={notConditionType}\n onChange={(_event, value) =>\n handleNotConditionTypeChange(value as NotConditionType)\n }\n >\n <FormControlLabel\n value={NotConditionType.SimpleCondition}\n control={<Radio color=\"primary\" />}\n label=\"Add rule\"\n className={classes.radioLabel}\n />\n {notConditionType === NotConditionType.SimpleCondition && (\n <ConditionsFormRowFields\n oldCondition={\n conditionRow.not ?? getDefaultRule(selPluginResourceType)\n }\n onRuleChange={onRuleChange}\n conditionRow={conditionRow}\n criteria={criteria}\n conditionRulesData={conditionRulesData}\n setErrors={setErrors}\n optionDisabled={ruleOption =>\n ruleOptionDisabled(\n ruleOption,\n conditionRow.not\n ? [conditionRow.not as PermissionCondition]\n : undefined,\n )\n }\n setRemoveAllClicked={setRemoveAllClicked}\n />\n )}\n <FormControlLabel\n value={NotConditionType.NestedCondition}\n control={<Radio color=\"primary\" />}\n label={<AddNestedConditionButton />}\n className={classes.radioLabel}\n />\n </RadioGroup>\n )}\n <ComplexConditionRowButtons\n conditionRow={conditionRow}\n onRuleChange={onRuleChange}\n criteria={criteria}\n classes={classes}\n selPluginResourceType={selPluginResourceType}\n updateErrors={updateErrors}\n isNestedConditionRule={isNestedConditionRule}\n handleAddNestedCondition={handleAddNestedCondition}\n />\n {nestedConditionRow?.length > 0 &&\n nestedConditionRow.map((nc, nestedConditionIndex) =>\n renderNestedConditionRow(nc, nestedConditionIndex),\n )}\n </Box>\n )}\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|