@backstage-community/plugin-rbac 1.43.0 → 1.44.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.
Files changed (115) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/alpha.d.ts +179 -0
  3. package/dist/alpha.esm.js +3 -0
  4. package/dist/alpha.esm.js.map +1 -0
  5. package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js +13 -9
  6. package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js.map +1 -1
  7. package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js +3 -1
  8. package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js.map +1 -1
  9. package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js +5 -3
  10. package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js.map +1 -1
  11. package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js +5 -3
  12. package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js.map +1 -1
  13. package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js +7 -5
  14. package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js.map +1 -1
  15. package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js +4 -2
  16. package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js.map +1 -1
  17. package/dist/components/ConditionalAccess/const.esm.js +6 -12
  18. package/dist/components/ConditionalAccess/const.esm.js.map +1 -1
  19. package/dist/components/CreateRole/AddMembersForm.esm.js +25 -19
  20. package/dist/components/CreateRole/AddMembersForm.esm.js.map +1 -1
  21. package/dist/components/CreateRole/AddedMembersTable.esm.js +10 -4
  22. package/dist/components/CreateRole/AddedMembersTable.esm.js.map +1 -1
  23. package/dist/components/CreateRole/AddedMembersTableColumn.esm.js +30 -28
  24. package/dist/components/CreateRole/AddedMembersTableColumn.esm.js.map +1 -1
  25. package/dist/components/CreateRole/CancelDialog.esm.js +8 -9
  26. package/dist/components/CreateRole/CancelDialog.esm.js.map +1 -1
  27. package/dist/components/CreateRole/CreateRolePage.esm.js +8 -6
  28. package/dist/components/CreateRole/CreateRolePage.esm.js.map +1 -1
  29. package/dist/components/CreateRole/EditRolePage.esm.js +9 -7
  30. package/dist/components/CreateRole/EditRolePage.esm.js.map +1 -1
  31. package/dist/components/CreateRole/PermissionPoliciesForm.esm.js +9 -3
  32. package/dist/components/CreateRole/PermissionPoliciesForm.esm.js.map +1 -1
  33. package/dist/components/CreateRole/PermissionPoliciesFormNestedRow.esm.js +6 -2
  34. package/dist/components/CreateRole/PermissionPoliciesFormNestedRow.esm.js.map +1 -1
  35. package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js +8 -4
  36. package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js.map +1 -1
  37. package/dist/components/CreateRole/PermissionPoliciesFormTable.esm.js +11 -6
  38. package/dist/components/CreateRole/PermissionPoliciesFormTable.esm.js.map +1 -1
  39. package/dist/components/CreateRole/PluginsDropdown.esm.js +4 -2
  40. package/dist/components/CreateRole/PluginsDropdown.esm.js.map +1 -1
  41. package/dist/components/CreateRole/ReviewStep.esm.js +9 -7
  42. package/dist/components/CreateRole/ReviewStep.esm.js.map +1 -1
  43. package/dist/components/CreateRole/RoleDetailsForm.esm.js +8 -6
  44. package/dist/components/CreateRole/RoleDetailsForm.esm.js.map +1 -1
  45. package/dist/components/CreateRole/RoleForm.esm.js +27 -23
  46. package/dist/components/CreateRole/RoleForm.esm.js.map +1 -1
  47. package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js +24 -22
  48. package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js.map +1 -1
  49. package/dist/components/DownloadUserStatistics.esm.js +4 -2
  50. package/dist/components/DownloadUserStatistics.esm.js.map +1 -1
  51. package/dist/components/EditRole.esm.js +4 -2
  52. package/dist/components/EditRole.esm.js.map +1 -1
  53. package/dist/components/RbacPage.esm.js +4 -2
  54. package/dist/components/RbacPage.esm.js.map +1 -1
  55. package/dist/components/RoleOverview/AboutCard.esm.js +12 -8
  56. package/dist/components/RoleOverview/AboutCard.esm.js.map +1 -1
  57. package/dist/components/RoleOverview/MembersCard.esm.js +18 -9
  58. package/dist/components/RoleOverview/MembersCard.esm.js.map +1 -1
  59. package/dist/components/RoleOverview/MembersListColumns.esm.js +42 -40
  60. package/dist/components/RoleOverview/MembersListColumns.esm.js.map +1 -1
  61. package/dist/components/RoleOverview/PermissionsCard.esm.js +27 -10
  62. package/dist/components/RoleOverview/PermissionsCard.esm.js.map +1 -1
  63. package/dist/components/RoleOverview/PermissionsListColumns.esm.js +38 -36
  64. package/dist/components/RoleOverview/PermissionsListColumns.esm.js.map +1 -1
  65. package/dist/components/RoleOverview/RoleOverviewPage.esm.js +3 -1
  66. package/dist/components/RoleOverview/RoleOverviewPage.esm.js.map +1 -1
  67. package/dist/components/RolesList/DeleteRole.esm.js +4 -2
  68. package/dist/components/RolesList/DeleteRole.esm.js.map +1 -1
  69. package/dist/components/RolesList/DeleteRoleDialog.esm.js +23 -38
  70. package/dist/components/RolesList/DeleteRoleDialog.esm.js.map +1 -1
  71. package/dist/components/RolesList/RolesList.esm.js +19 -9
  72. package/dist/components/RolesList/RolesList.esm.js.map +1 -1
  73. package/dist/components/RolesList/RolesListColumns.esm.js +63 -61
  74. package/dist/components/RolesList/RolesListColumns.esm.js.map +1 -1
  75. package/dist/components/RolesList/RolesListToolbar.esm.js +20 -10
  76. package/dist/components/RolesList/RolesListToolbar.esm.js.map +1 -1
  77. package/dist/components/Router.esm.js +4 -2
  78. package/dist/components/Router.esm.js.map +1 -1
  79. package/dist/components/Trans.esm.js +22 -0
  80. package/dist/components/Trans.esm.js.map +1 -0
  81. package/dist/hooks/useActionPermissionTooltip.esm.js +10 -5
  82. package/dist/hooks/useActionPermissionTooltip.esm.js.map +1 -1
  83. package/dist/hooks/useLanguage.esm.js +7 -0
  84. package/dist/hooks/useLanguage.esm.js.map +1 -0
  85. package/dist/hooks/useMembers.esm.js +16 -8
  86. package/dist/hooks/useMembers.esm.js.map +1 -1
  87. package/dist/hooks/usePermissionPolicies.esm.js +20 -9
  88. package/dist/hooks/usePermissionPolicies.esm.js.map +1 -1
  89. package/dist/hooks/useTranslation.esm.js +8 -0
  90. package/dist/hooks/useTranslation.esm.js.map +1 -0
  91. package/dist/translations/de.esm.js +176 -0
  92. package/dist/translations/de.esm.js.map +1 -0
  93. package/dist/translations/es.esm.js +176 -0
  94. package/dist/translations/es.esm.js.map +1 -0
  95. package/dist/translations/fr.esm.js +176 -0
  96. package/dist/translations/fr.esm.js.map +1 -0
  97. package/dist/translations/index.esm.js +15 -0
  98. package/dist/translations/index.esm.js.map +1 -0
  99. package/dist/translations/it.esm.js +176 -0
  100. package/dist/translations/it.esm.js.map +1 -0
  101. package/dist/translations/ref.esm.js +215 -0
  102. package/dist/translations/ref.esm.js.map +1 -0
  103. package/dist/utils/conditional-access-utils.esm.js +4 -4
  104. package/dist/utils/conditional-access-utils.esm.js.map +1 -1
  105. package/dist/utils/create-role-utils.esm.js +11 -11
  106. package/dist/utils/create-role-utils.esm.js.map +1 -1
  107. package/dist/utils/filter-table-data.esm.js +4 -3
  108. package/dist/utils/filter-table-data.esm.js.map +1 -1
  109. package/dist/utils/rbac-utils.esm.js +23 -19
  110. package/dist/utils/rbac-utils.esm.js.map +1 -1
  111. package/dist/utils/role-form-utils.esm.js +17 -12
  112. package/dist/utils/role-form-utils.esm.js.map +1 -1
  113. package/dist/utils/string-utils.esm.js +2 -2
  114. package/dist/utils/string-utils.esm.js.map +1 -1
  115. package/package.json +27 -13
@@ -1 +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 { useState, useEffect } from 'react';\n\nimport { PermissionCondition } from '@backstage/plugin-permission-common';\n\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 FormControlLabel from '@mui/material/FormControlLabel';\nimport IconButton from '@mui/material/IconButton';\nimport Radio from '@mui/material/Radio';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport { useTheme } from '@mui/material/styles';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\n\nimport {\n extractNestedConditions,\n getDefaultRule,\n getNestedConditionSimpleRulesCount,\n getSimpleRulesCount,\n isNestedConditionRule,\n isSimpleRule,\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';\nimport Typography from '@mui/material/Typography';\n\nexport const ConditionsFormRow = ({\n conditionRulesData,\n conditionRow,\n selPluginResourceType,\n criteria,\n onRuleChange,\n setCriteria,\n setErrors,\n setRemoveAllClicked,\n}: ConditionFormRowProps) => {\n const theme = useTheme();\n const [nestedConditionRow, setNestedConditionRow] = useState<Condition[]>([]);\n const [notConditionType, setNotConditionType] = useState<NotConditionType>(\n NotConditionType.SimpleCondition,\n );\n\n 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 key={`nestedCondition-${nestedConditionIndex}`}\n sx={{\n padding: '20px',\n marginLeft: theme.spacing(3),\n border: `1px solid ${theme.palette.border}`,\n borderRadius: '4px',\n backgroundColor: theme.palette.background.default,\n '& input': {\n backgroundColor: `${theme.palette.background.paper}!important`,\n },\n }}\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 sx={{\n backgroundColor: theme.palette.background.paper,\n width: '60%',\n height: '100%',\n }}\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 sx={{\n color: theme.palette.grey[500],\n flexGrow: 0,\n alignSelf: 'baseline',\n }}\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 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 sx={{\n mt: 2,\n color: theme.palette.primary.light,\n }}\n size=\"small\"\n onClick={() =>\n handleAddRuleInNestedCondition(\n selectedNestedConditionCriteria,\n nestedConditionIndex,\n )\n }\n startIcon={<AddIcon fontSize=\"small\" />}\n >\n <Typography variant=\"body2\" component=\"span\">\n Add rule\n </Typography>\n </Button>\n )}\n </Box>\n </Box>\n )\n );\n };\n\n return (\n <Box\n sx={{\n padding: '20px',\n border: `1px solid ${theme.palette.border}`,\n borderRadius: '4px',\n backgroundColor: theme.palette.background.default,\n '& input': {\n color: `${theme.palette.textContrast}!important`,\n '&:-internal-autofill-selected, &:-webkit-autofill, &:-webkit-autofill:hover, &:-webkit-autofill:focus, &:-webkit-autofill:active':\n {\n WebkitBoxShadow: `0 0 0px 1000px ${theme.palette.background.paper} inset`,\n WebkitTextFillColor: `${theme.palette.textContrast}!important`,\n caretColor: `${theme.palette.textContrast}!important`,\n },\n },\n '& button': {\n textTransform: 'none',\n },\n }}\n data-testid=\"conditions-row\"\n >\n <ToggleButtonGroup\n exclusive\n value={criteria}\n onChange={(_event, newCriteria) => handleCriteriaChange(newCriteria)}\n sx={{\n backgroundColor: theme.palette.background.paper,\n width: '80%',\n }}\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 currentCondition={c}\n ruleIndex={srIndex}\n activeCriteria={criteria as 'allOf' | 'anyOf'}\n />\n ),\n )}\n {criteria === criterias.not && (\n <RadioGroup\n sx={{\n margin: theme.spacing(1),\n }}\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 sx={{\n marginTop: theme.spacing(1),\n }}\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 sx={{\n marginTop: theme.spacing(1),\n }}\n />\n </RadioGroup>\n )}\n <ComplexConditionRowButtons\n conditionRow={conditionRow}\n onRuleChange={onRuleChange}\n criteria={criteria}\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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"}
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 { useState, useEffect } from 'react';\n\nimport { PermissionCondition } from '@backstage/plugin-permission-common';\n\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 FormControlLabel from '@mui/material/FormControlLabel';\nimport IconButton from '@mui/material/IconButton';\nimport Radio from '@mui/material/Radio';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport { useTheme } from '@mui/material/styles';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\n\nimport {\n extractNestedConditions,\n getDefaultRule,\n getNestedConditionSimpleRulesCount,\n getSimpleRulesCount,\n isNestedConditionRule,\n isSimpleRule,\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 { getConditionButtons, criterias } from './const';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { CriteriaToggleButton } from './CriteriaToggleButton';\nimport {\n ComplexErrors,\n Condition,\n ConditionFormRowProps,\n ConditionsData,\n NestedCriteriaErrors,\n NotConditionType,\n} from './types';\nimport Typography from '@mui/material/Typography';\n\nexport const ConditionsFormRow = ({\n conditionRulesData,\n conditionRow,\n selPluginResourceType,\n criteria,\n onRuleChange,\n setCriteria,\n setErrors,\n setRemoveAllClicked,\n}: ConditionFormRowProps) => {\n const { t } = useTranslation();\n const theme = useTheme();\n const [nestedConditionRow, setNestedConditionRow] = useState<Condition[]>([]);\n const [notConditionType, setNotConditionType] = useState<NotConditionType>(\n NotConditionType.SimpleCondition,\n );\n\n 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 key={`nestedCondition-${nestedConditionIndex}`}\n sx={{\n padding: '20px',\n marginLeft: theme.spacing(3),\n border: `1px solid ${theme.palette.border}`,\n borderRadius: '4px',\n backgroundColor: theme.palette.background.default,\n '& input': {\n backgroundColor: `${theme.palette.background.paper}!important`,\n },\n }}\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 sx={{\n backgroundColor: theme.palette.background.paper,\n width: '60%',\n height: '100%',\n }}\n >\n {nestedConditionButtons(t).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={t('common.removeNestedCondition')}\n sx={{\n color: theme.palette.grey[500],\n flexGrow: 0,\n alignSelf: 'baseline',\n }}\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 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 sx={{\n mt: 2,\n color: theme.palette.primary.light,\n }}\n size=\"small\"\n onClick={() =>\n handleAddRuleInNestedCondition(\n selectedNestedConditionCriteria,\n nestedConditionIndex,\n )\n }\n startIcon={<AddIcon fontSize=\"small\" />}\n >\n <Typography variant=\"body2\" component=\"span\">\n Add rule\n </Typography>\n </Button>\n )}\n </Box>\n </Box>\n )\n );\n };\n\n return (\n <Box\n sx={{\n padding: '20px',\n border: `1px solid ${theme.palette.border}`,\n borderRadius: '4px',\n backgroundColor: theme.palette.background.default,\n '& input': {\n color: `${theme.palette.textContrast}!important`,\n '&:-internal-autofill-selected, &:-webkit-autofill, &:-webkit-autofill:hover, &:-webkit-autofill:focus, &:-webkit-autofill:active':\n {\n WebkitBoxShadow: `0 0 0px 1000px ${theme.palette.background.paper} inset`,\n WebkitTextFillColor: `${theme.palette.textContrast}!important`,\n caretColor: `${theme.palette.textContrast}!important`,\n },\n },\n '& button': {\n textTransform: 'none',\n },\n }}\n data-testid=\"conditions-row\"\n >\n <ToggleButtonGroup\n exclusive\n value={criteria}\n onChange={(_event, newCriteria) => handleCriteriaChange(newCriteria)}\n sx={{\n backgroundColor: theme.palette.background.paper,\n width: '80%',\n }}\n >\n {getConditionButtons(t).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 currentCondition={c}\n ruleIndex={srIndex}\n activeCriteria={criteria as 'allOf' | 'anyOf'}\n />\n ),\n )}\n {criteria === criterias.not && (\n <RadioGroup\n sx={{\n margin: theme.spacing(1),\n }}\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={t('common.addRule')}\n sx={{\n marginTop: theme.spacing(1),\n }}\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 sx={{\n marginTop: theme.spacing(1),\n }}\n />\n </RadioGroup>\n )}\n <ComplexConditionRowButtons\n conditionRow={conditionRow}\n onRuleChange={onRuleChange}\n criteria={criteria}\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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"}
@@ -11,6 +11,7 @@ import { isSimpleRule, setErrorMessage, getSimpleRuleErrors, getNestedRuleErrors
11
11
  import { criterias } from './const.esm.js';
12
12
  import { CustomArrayField } from './CustomArrayField.esm.js';
13
13
  import { RulesDropdownOption } from './RulesDropdownOption.esm.js';
14
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
14
15
 
15
16
  const makeConditionsFormRowFieldsStyles = makeStyles(() => ({
16
17
  leftInputFieldContainer: {
@@ -81,6 +82,7 @@ const ConditionsFormRowFields = ({
81
82
  nestedConditionRuleIndex,
82
83
  updateRules
83
84
  }) => {
85
+ const { t } = useTranslation();
84
86
  const isNotSimpleCondition = criteria === criterias.not && !nestedConditionCriteria;
85
87
  const theme = useTheme();
86
88
  const [hasError, setHasError] = useState(false);
@@ -274,9 +276,9 @@ const ConditionsFormRowFields = ({
274
276
  TextField,
275
277
  {
276
278
  ...params,
277
- label: "Rule",
279
+ label: t("common.rule"),
278
280
  variant: "outlined",
279
- placeholder: "Select a rule",
281
+ placeholder: t("common.selectRule"),
280
282
  required: true
281
283
  }
282
284
  )
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionsFormRowFields.esm.js","sources":["../../../src/components/ConditionalAccess/ConditionsFormRowFields.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 type { SetStateAction, Dispatch } from 'react';\nimport { useState } from 'react';\n\nimport { PermissionCondition } from '@backstage/plugin-permission-common';\n\nimport Autocomplete from '@mui/material/Autocomplete';\nimport Box from '@mui/material/Box';\nimport { Theme, useTheme } from '@mui/material/styles';\nimport TextField from '@mui/material/TextField';\nimport { makeStyles } from '@mui/styles';\nimport Form from '@rjsf/mui';\nimport {\n RegistryFieldsType,\n RJSFSchema,\n RJSFValidationError,\n UiSchema,\n} from '@rjsf/utils';\nimport validator from '@rjsf/validator-ajv8';\n\nimport {\n getNestedRuleErrors,\n getSimpleRuleErrors,\n isSimpleRule,\n setErrorMessage,\n} from '../../utils/conditional-access-utils';\nimport { criterias } from './const';\nimport { CustomArrayField } from './CustomArrayField';\nimport { RulesDropdownOption } from './RulesDropdownOption';\nimport {\n AccessConditionsErrors,\n ComplexErrors,\n Condition,\n ConditionsData,\n NestedCriteriaErrors,\n RulesData,\n} from './types';\n\ntype ConditionFormRowFieldsProps = {\n oldCondition: Condition;\n index?: number;\n criteria: string;\n onRuleChange: (newCondition: ConditionsData) => void;\n conditionRow: ConditionsData | Condition;\n conditionRulesData?: RulesData;\n setErrors: Dispatch<SetStateAction<AccessConditionsErrors | undefined>>;\n optionDisabled?: (ruleOption: string) => boolean;\n setRemoveAllClicked: Dispatch<SetStateAction<boolean>>;\n nestedConditionRow?: Condition[];\n nestedConditionCriteria?: string;\n nestedConditionIndex?: number;\n nestedConditionRuleIndex?: number;\n updateRules?: (newCondition: Condition[] | Condition) => void;\n};\n\ninterface StyleProps {\n isNotSimpleCondition: boolean;\n hasError: boolean;\n}\n\nconst makeConditionsFormRowFieldsStyles = makeStyles<Theme, StyleProps>(() => ({\n leftInputFieldContainer: {\n display: 'flex',\n flexFlow: 'row',\n gap: '1rem',\n flexGrow: 1,\n paddingLeft: 0,\n margin: ({ isNotSimpleCondition }) =>\n isNotSimpleCondition ? '-1.5rem 0 0 1.85rem' : '0',\n },\n rightInputFieldContainer: {\n width: '50%',\n '& span > h6': {\n display: ({ hasError }) => (hasError ? 'none' : 'block'),\n },\n },\n}));\n\nexport const getTextFieldStyles = (theme: Theme) => ({\n '& div[class*=\"MuiInputBase-root\"]': {\n backgroundColor: theme.palette.background.paper,\n },\n '& span': {\n color: theme.palette.textSubtle,\n },\n '& input': {\n color: theme.palette.textContrast,\n },\n '& fieldset.MuiOutlinedInput-notchedOutline': {\n borderColor: theme.palette.grey[500],\n },\n '& div.MuiOutlinedInput-root': {\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: theme.palette.primary.light,\n },\n '&.Mui-error .MuiOutlinedInput-notchedOutline': {\n borderColor: theme.palette.status.error,\n '&:hover': {\n borderColor: theme.palette.status.error,\n },\n },\n },\n '& label.MuiFormLabel-root.Mui-focused': {\n color: theme.palette.primary.light,\n },\n '& label.MuiFormLabel-root.Mui-error': {\n color: theme.palette.status.error,\n },\n '& div.MuiOutlinedInput-root:hover fieldset': {\n borderColor:\n theme.palette.mode === 'dark' ? theme.palette.textContrast : 'unset',\n },\n '& label': {\n color: theme.palette.textSubtle,\n },\n});\n\nexport const ConditionsFormRowFields = ({\n oldCondition,\n index,\n criteria,\n onRuleChange,\n conditionRow,\n conditionRulesData,\n setErrors,\n optionDisabled,\n setRemoveAllClicked,\n nestedConditionRow,\n nestedConditionCriteria,\n nestedConditionIndex,\n nestedConditionRuleIndex,\n updateRules,\n}: ConditionFormRowFieldsProps) => {\n const isNotSimpleCondition =\n criteria === criterias.not && !nestedConditionCriteria;\n const theme = useTheme();\n const [hasError, setHasError] = useState(false);\n const classes = makeConditionsFormRowFieldsStyles({\n isNotSimpleCondition,\n hasError,\n });\n\n const rules = conditionRulesData?.rules ?? [];\n const paramsSchema =\n conditionRulesData?.[(oldCondition as PermissionCondition).rule]?.schema;\n\n const schema: RJSFSchema = paramsSchema;\n\n const uiSchema: UiSchema = {\n 'ui:submitButtonOptions': {\n norender: true,\n },\n 'ui:classNames': `{\n '& div[class*=\"MuiInputBase-root\"]': {\n backgroundColor: theme.palette.background.paper,\n },\n '& span': {\n color: theme.palette.textSubtle,\n },\n '& input': {\n color: theme.palette.textContrast,\n },\n '& fieldset.MuiOutlinedInput-notchedOutline': {\n borderColor: theme.palette.grey[500],\n },\n '& div.MuiOutlinedInput-root': {\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: theme.palette.primary.light,\n },\n '&.Mui-error .MuiOutlinedInput-notchedOutline': {\n borderColor: theme.palette.status.error,\n '&:hover': {\n borderColor: theme.palette.status.error,\n },\n },\n },\n '& label.MuiFormLabel-root.Mui-focused': {\n color: theme.palette.primary.light,\n },\n '& label.MuiFormLabel-root.Mui-error': {\n color: theme.palette.status.error,\n },\n '& div.MuiOutlinedInput-root:hover fieldset': {\n borderColor:\n theme.palette.mode === 'dark' ? theme.palette.textContrast : 'unset',\n },\n '& label': {\n color: theme.palette.textSubtle,\n },\n }`,\n 'ui:field': 'array',\n };\n\n const customFields: RegistryFieldsType = { ArrayField: CustomArrayField };\n\n const handleConditionChange = (newCondition: PermissionCondition) => {\n setRemoveAllClicked(false);\n switch (criteria) {\n case criterias.condition: {\n onRuleChange({ condition: newCondition });\n break;\n }\n case criterias.allOf: {\n const updatedCriteria = (conditionRow as ConditionsData).allOf ?? [];\n updatedCriteria[index ?? 0] = newCondition;\n onRuleChange({ allOf: updatedCriteria });\n break;\n }\n case criterias.anyOf: {\n const updatedCriteria = (conditionRow as ConditionsData).anyOf ?? [];\n updatedCriteria[index ?? 0] = newCondition;\n onRuleChange({ anyOf: updatedCriteria });\n break;\n }\n case criterias.not: {\n onRuleChange({ not: newCondition });\n break;\n }\n default:\n }\n };\n\n const handleNestedConditionChange = (newCondition: PermissionCondition) => {\n if (\n !nestedConditionRow ||\n !nestedConditionCriteria ||\n nestedConditionIndex === undefined ||\n !updateRules\n ) {\n return;\n }\n const updatedNestedConditionRow: Condition[] = nestedConditionRow.map(\n (c, i) => {\n if (i === nestedConditionIndex) {\n if (nestedConditionCriteria === criterias.not) {\n return {\n [nestedConditionCriteria]: newCondition,\n };\n }\n const updatedNestedConditionRules = (\n (c[\n nestedConditionCriteria as keyof Condition\n ] as PermissionCondition[]) || []\n ).map((rule, rindex) => {\n return rindex === nestedConditionRuleIndex ? newCondition : rule;\n });\n\n return {\n [nestedConditionCriteria]: updatedNestedConditionRules,\n };\n }\n return c;\n },\n );\n\n updateRules(\n criteria === criterias.not\n ? updatedNestedConditionRow[0]\n : updatedNestedConditionRow,\n );\n };\n\n const handleTransformErrors = (errors: RJSFValidationError[]) => {\n if (errors.length > 0) {\n setHasError(true);\n } else {\n setHasError(false);\n }\n // criteria: condition or not simple-condition\n if (\n criteria === criterias.condition ||\n (criteria === criterias.not &&\n isSimpleRule(conditionRow[criteria as keyof Condition]))\n ) {\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n updatedErrors[criteria] = setErrorMessage(errors);\n\n return updatedErrors;\n });\n }\n\n // criteria: not nested-condition\n if (\n criteria === criterias.not &&\n nestedConditionCriteria &&\n !isSimpleRule(conditionRow[criteria as keyof Condition])\n ) {\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n const nestedErrors = (updatedErrors[criteria] as ComplexErrors)[\n nestedConditionCriteria as keyof Condition\n ] as NestedCriteriaErrors;\n\n // nestedCriteria: allOf or anyOf\n if (\n Array.isArray(nestedErrors) &&\n nestedConditionRuleIndex !== undefined\n ) {\n nestedErrors[nestedConditionRuleIndex] = setErrorMessage(errors);\n } else {\n // nestedCriteria: not\n updatedErrors[criteria] = {\n [nestedConditionCriteria]: setErrorMessage(errors),\n };\n }\n\n return updatedErrors;\n });\n }\n\n // criteria: allOf or anyOf\n if (criteria === criterias.allOf || criteria === criterias.anyOf) {\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n const simpleRuleErrors = getSimpleRuleErrors(\n updatedErrors[\n criteria as keyof AccessConditionsErrors\n ] as ComplexErrors[],\n );\n if (\n Array.isArray(simpleRuleErrors) &&\n simpleRuleErrors.length > 0 &&\n index !== undefined\n ) {\n simpleRuleErrors[index] = setErrorMessage(errors);\n }\n\n const nestedRuleErrors = getNestedRuleErrors(\n updatedErrors[\n criteria as keyof AccessConditionsErrors\n ] as ComplexErrors[],\n );\n\n // nestedCriteria: allOf or anyOf\n if (\n nestedConditionCriteria &&\n nestedConditionIndex !== undefined &&\n nestedConditionRuleIndex !== undefined\n ) {\n const nestedConditionRuleList =\n nestedRuleErrors[nestedConditionIndex][nestedConditionCriteria];\n\n if (Array.isArray(nestedConditionRuleList)) {\n nestedConditionRuleList[nestedConditionRuleIndex] =\n setErrorMessage(errors);\n }\n }\n\n // nestedCriteria: not\n if (\n Array.isArray(nestedRuleErrors) &&\n nestedRuleErrors.length > 0 &&\n nestedConditionCriteria === criterias.not &&\n nestedConditionIndex !== undefined\n ) {\n nestedRuleErrors[nestedConditionIndex][nestedConditionCriteria] =\n setErrorMessage(errors);\n }\n\n updatedErrors[criteria] = [...simpleRuleErrors, ...nestedRuleErrors];\n return updatedErrors;\n });\n }\n\n return errors;\n };\n\n const onConditionChange = (newCondition: PermissionCondition) => {\n if (nestedConditionRow) {\n handleNestedConditionChange(newCondition);\n } else {\n handleConditionChange(newCondition);\n }\n };\n\n return (\n <Box className={classes.leftInputFieldContainer}>\n <Autocomplete\n style={{ width: '50%', marginTop: '26px' }}\n sx={getTextFieldStyles(theme)}\n options={rules ?? []}\n value={(oldCondition as PermissionCondition)?.rule || null}\n getOptionDisabled={option =>\n optionDisabled ? optionDisabled(option) : false\n }\n onChange={(_event, ruleVal?: string | null) =>\n onConditionChange({\n ...oldCondition,\n rule: ruleVal ?? '',\n params: {},\n } as PermissionCondition)\n }\n renderOption={(props, option) => (\n <RulesDropdownOption\n props={props}\n label={option ?? ''}\n rulesData={conditionRulesData}\n />\n )}\n renderInput={(params: any) => (\n <TextField\n {...params}\n label=\"Rule\"\n variant=\"outlined\"\n placeholder=\"Select a rule\"\n required\n />\n )}\n />\n <Box className={classes.rightInputFieldContainer}>\n {schema ? (\n <Form\n schema={paramsSchema}\n formData={(oldCondition as PermissionCondition)?.params || {}}\n validator={validator}\n uiSchema={uiSchema}\n fields={customFields}\n onChange={data =>\n onConditionChange({\n ...oldCondition,\n params: data.formData || {},\n } as PermissionCondition)\n }\n transformErrors={handleTransformErrors}\n showErrorList={false}\n liveValidate\n />\n ) : (\n <TextField\n style={{ width: '100%', marginTop: '26px' }}\n sx={getTextFieldStyles(theme)}\n disabled\n label=\"string, string\"\n required\n variant=\"outlined\"\n />\n )}\n </Box>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;AA0EA,MAAM,iCAAA,GAAoC,WAA8B,OAAO;AAAA,EAC7E,uBAAyB,EAAA;AAAA,IACvB,OAAS,EAAA,MAAA;AAAA,IACT,QAAU,EAAA,KAAA;AAAA,IACV,GAAK,EAAA,MAAA;AAAA,IACL,QAAU,EAAA,CAAA;AAAA,IACV,WAAa,EAAA,CAAA;AAAA,IACb,QAAQ,CAAC,EAAE,oBAAqB,EAAA,KAC9B,uBAAuB,qBAAwB,GAAA;AAAA,GACnD;AAAA,EACA,wBAA0B,EAAA;AAAA,IACxB,KAAO,EAAA,KAAA;AAAA,IACP,aAAe,EAAA;AAAA,MACb,SAAS,CAAC,EAAE,QAAS,EAAA,KAAO,WAAW,MAAS,GAAA;AAAA;AAClD;AAEJ,CAAE,CAAA,CAAA;AAEW,MAAA,kBAAA,GAAqB,CAAC,KAAkB,MAAA;AAAA,EACnD,mCAAqC,EAAA;AAAA,IACnC,eAAA,EAAiB,KAAM,CAAA,OAAA,CAAQ,UAAW,CAAA;AAAA,GAC5C;AAAA,EACA,QAAU,EAAA;AAAA,IACR,KAAA,EAAO,MAAM,OAAQ,CAAA;AAAA,GACvB;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAA,EAAO,MAAM,OAAQ,CAAA;AAAA,GACvB;AAAA,EACA,4CAA8C,EAAA;AAAA,IAC5C,WAAa,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG;AAAA,GACrC;AAAA,EACA,6BAA+B,EAAA;AAAA,IAC7B,gDAAkD,EAAA;AAAA,MAChD,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,OAAQ,CAAA;AAAA,KACrC;AAAA,IACA,8CAAgD,EAAA;AAAA,MAC9C,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,MAAO,CAAA,KAAA;AAAA,MAClC,SAAW,EAAA;AAAA,QACT,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,MAAO,CAAA;AAAA;AACpC;AACF,GACF;AAAA,EACA,uCAAyC,EAAA;AAAA,IACvC,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,OAAQ,CAAA;AAAA,GAC/B;AAAA,EACA,qCAAuC,EAAA;AAAA,IACrC,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,MAAO,CAAA;AAAA,GAC9B;AAAA,EACA,4CAA8C,EAAA;AAAA,IAC5C,aACE,KAAM,CAAA,OAAA,CAAQ,SAAS,MAAS,GAAA,KAAA,CAAM,QAAQ,YAAe,GAAA;AAAA,GACjE;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAA,EAAO,MAAM,OAAQ,CAAA;AAAA;AAEzB,CAAA;AAEO,MAAM,0BAA0B,CAAC;AAAA,EACtC,YAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,uBAAA;AAAA,EACA,oBAAA;AAAA,EACA,wBAAA;AAAA,EACA;AACF,CAAmC,KAAA;AACjC,EAAA,MAAM,oBACJ,GAAA,QAAA,KAAa,SAAU,CAAA,GAAA,IAAO,CAAC,uBAAA;AACjC,EAAA,MAAM,QAAQ,QAAS,EAAA;AACvB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,UAAU,iCAAkC,CAAA;AAAA,IAChD,oBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAM,MAAA,KAAA,GAAQ,kBAAoB,EAAA,KAAA,IAAS,EAAC;AAC5C,EAAA,MAAM,YACJ,GAAA,kBAAA,GAAsB,YAAqC,CAAA,IAAI,CAAG,EAAA,MAAA;AAEpE,EAAA,MAAM,MAAqB,GAAA,YAAA;AAE3B,EAAA,MAAM,QAAqB,GAAA;AAAA,IACzB,wBAA0B,EAAA;AAAA,MACxB,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,eAAiB,EAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAA,CAAA;AAAA,IAsCjB,UAAY,EAAA;AAAA,GACd;AAEA,EAAM,MAAA,YAAA,GAAmC,EAAE,UAAA,EAAY,gBAAiB,EAAA;AAExE,EAAM,MAAA,qBAAA,GAAwB,CAAC,YAAsC,KAAA;AACnE,IAAA,mBAAA,CAAoB,KAAK,CAAA;AACzB,IAAA,QAAQ,QAAU;AAAA,MAChB,KAAK,UAAU,SAAW,EAAA;AACxB,QAAa,YAAA,CAAA,EAAE,SAAW,EAAA,YAAA,EAAc,CAAA;AACxC,QAAA;AAAA;AACF,MACA,KAAK,UAAU,KAAO,EAAA;AACpB,QAAM,MAAA,eAAA,GAAmB,YAAgC,CAAA,KAAA,IAAS,EAAC;AACnE,QAAgB,eAAA,CAAA,KAAA,IAAS,CAAC,CAAI,GAAA,YAAA;AAC9B,QAAa,YAAA,CAAA,EAAE,KAAO,EAAA,eAAA,EAAiB,CAAA;AACvC,QAAA;AAAA;AACF,MACA,KAAK,UAAU,KAAO,EAAA;AACpB,QAAM,MAAA,eAAA,GAAmB,YAAgC,CAAA,KAAA,IAAS,EAAC;AACnE,QAAgB,eAAA,CAAA,KAAA,IAAS,CAAC,CAAI,GAAA,YAAA;AAC9B,QAAa,YAAA,CAAA,EAAE,KAAO,EAAA,eAAA,EAAiB,CAAA;AACvC,QAAA;AAAA;AACF,MACA,KAAK,UAAU,GAAK,EAAA;AAClB,QAAa,YAAA,CAAA,EAAE,GAAK,EAAA,YAAA,EAAc,CAAA;AAClC,QAAA;AAAA;AAEF;AACF,GACF;AAEA,EAAM,MAAA,2BAAA,GAA8B,CAAC,YAAsC,KAAA;AACzE,IAAA,IACE,CAAC,kBACD,IAAA,CAAC,2BACD,oBAAyB,KAAA,SAAA,IACzB,CAAC,WACD,EAAA;AACA,MAAA;AAAA;AAEF,IAAA,MAAM,4BAAyC,kBAAmB,CAAA,GAAA;AAAA,MAChE,CAAC,GAAG,CAAM,KAAA;AACR,QAAA,IAAI,MAAM,oBAAsB,EAAA;AAC9B,UAAI,IAAA,uBAAA,KAA4B,UAAU,GAAK,EAAA;AAC7C,YAAO,OAAA;AAAA,cACL,CAAC,uBAAuB,GAAG;AAAA,aAC7B;AAAA;AAEF,UAAM,MAAA,2BAAA,GAAA,CACH,EACC,uBACF,CAAA,IAA+B,EAC/B,EAAA,GAAA,CAAI,CAAC,IAAA,EAAM,MAAW,KAAA;AACtB,YAAO,OAAA,MAAA,KAAW,2BAA2B,YAAe,GAAA,IAAA;AAAA,WAC7D,CAAA;AAED,UAAO,OAAA;AAAA,YACL,CAAC,uBAAuB,GAAG;AAAA,WAC7B;AAAA;AAEF,QAAO,OAAA,CAAA;AAAA;AACT,KACF;AAEA,IAAA,WAAA;AAAA,MACE,QAAa,KAAA,SAAA,CAAU,GACnB,GAAA,yBAAA,CAA0B,CAAC,CAC3B,GAAA;AAAA,KACN;AAAA,GACF;AAEA,EAAM,MAAA,qBAAA,GAAwB,CAAC,MAAkC,KAAA;AAC/D,IAAI,IAAA,MAAA,CAAO,SAAS,CAAG,EAAA;AACrB,MAAA,WAAA,CAAY,IAAI,CAAA;AAAA,KACX,MAAA;AACL,MAAA,WAAA,CAAY,KAAK,CAAA;AAAA;AAGnB,IACE,IAAA,QAAA,KAAa,SAAU,CAAA,SAAA,IACtB,QAAa,KAAA,SAAA,CAAU,OACtB,YAAa,CAAA,YAAA,CAAa,QAA2B,CAAC,CACxD,EAAA;AACA,MAAA,SAAA,CAAU,CAAc,UAAA,KAAA;AACtB,QAAM,MAAA,aAAA,GAAgB,EAAE,GAAG,UAAW,EAAA;AACtC,QAAc,aAAA,CAAA,QAAQ,CAAI,GAAA,eAAA,CAAgB,MAAM,CAAA;AAEhD,QAAO,OAAA,aAAA;AAAA,OACR,CAAA;AAAA;AAIH,IACE,IAAA,QAAA,KAAa,UAAU,GACvB,IAAA,uBAAA,IACA,CAAC,YAAa,CAAA,YAAA,CAAa,QAA2B,CAAC,CACvD,EAAA;AACA,MAAA,SAAA,CAAU,CAAc,UAAA,KAAA;AACtB,QAAM,MAAA,aAAA,GAAgB,EAAE,GAAG,UAAW,EAAA;AACtC,QAAA,MAAM,YAAgB,GAAA,aAAA,CAAc,QAAQ,CAAA,CAC1C,uBACF,CAAA;AAGA,QAAA,IACE,KAAM,CAAA,OAAA,CAAQ,YAAY,CAAA,IAC1B,6BAA6B,SAC7B,EAAA;AACA,UAAa,YAAA,CAAA,wBAAwB,CAAI,GAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,SAC1D,MAAA;AAEL,UAAA,aAAA,CAAc,QAAQ,CAAI,GAAA;AAAA,YACxB,CAAC,uBAAuB,GAAG,eAAA,CAAgB,MAAM;AAAA,WACnD;AAAA;AAGF,QAAO,OAAA,aAAA;AAAA,OACR,CAAA;AAAA;AAIH,IAAA,IAAI,QAAa,KAAA,SAAA,CAAU,KAAS,IAAA,QAAA,KAAa,UAAU,KAAO,EAAA;AAChE,MAAA,SAAA,CAAU,CAAc,UAAA,KAAA;AACtB,QAAM,MAAA,aAAA,GAAgB,EAAE,GAAG,UAAW,EAAA;AACtC,QAAA,MAAM,gBAAmB,GAAA,mBAAA;AAAA,UACvB,cACE,QACF;AAAA,SACF;AACA,QACE,IAAA,KAAA,CAAM,QAAQ,gBAAgB,CAAA,IAC9B,iBAAiB,MAAS,GAAA,CAAA,IAC1B,UAAU,SACV,EAAA;AACA,UAAiB,gBAAA,CAAA,KAAK,CAAI,GAAA,eAAA,CAAgB,MAAM,CAAA;AAAA;AAGlD,QAAA,MAAM,gBAAmB,GAAA,mBAAA;AAAA,UACvB,cACE,QACF;AAAA,SACF;AAGA,QAAA,IACE,uBACA,IAAA,oBAAA,KAAyB,SACzB,IAAA,wBAAA,KAA6B,SAC7B,EAAA;AACA,UAAA,MAAM,uBACJ,GAAA,gBAAA,CAAiB,oBAAoB,CAAA,CAAE,uBAAuB,CAAA;AAEhE,UAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,uBAAuB,CAAG,EAAA;AAC1C,YAAwB,uBAAA,CAAA,wBAAwB,CAC9C,GAAA,eAAA,CAAgB,MAAM,CAAA;AAAA;AAC1B;AAIF,QACE,IAAA,KAAA,CAAM,OAAQ,CAAA,gBAAgB,CAC9B,IAAA,gBAAA,CAAiB,MAAS,GAAA,CAAA,IAC1B,uBAA4B,KAAA,SAAA,CAAU,GACtC,IAAA,oBAAA,KAAyB,SACzB,EAAA;AACA,UAAA,gBAAA,CAAiB,oBAAoB,CAAA,CAAE,uBAAuB,CAAA,GAC5D,gBAAgB,MAAM,CAAA;AAAA;AAG1B,QAAA,aAAA,CAAc,QAAQ,CAAI,GAAA,CAAC,GAAG,gBAAA,EAAkB,GAAG,gBAAgB,CAAA;AACnE,QAAO,OAAA,aAAA;AAAA,OACR,CAAA;AAAA;AAGH,IAAO,OAAA,MAAA;AAAA,GACT;AAEA,EAAM,MAAA,iBAAA,GAAoB,CAAC,YAAsC,KAAA;AAC/D,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAA,2BAAA,CAA4B,YAAY,CAAA;AAAA,KACnC,MAAA;AACL,MAAA,qBAAA,CAAsB,YAAY,CAAA;AAAA;AACpC,GACF;AAEA,EAAA,uBACG,IAAA,CAAA,GAAA,EAAA,EAAI,SAAW,EAAA,OAAA,CAAQ,uBACtB,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,KAAO,EAAA,EAAE,KAAO,EAAA,KAAA,EAAO,WAAW,MAAO,EAAA;AAAA,QACzC,EAAA,EAAI,mBAAmB,KAAK,CAAA;AAAA,QAC5B,OAAA,EAAS,SAAS,EAAC;AAAA,QACnB,KAAA,EAAQ,cAAsC,IAAQ,IAAA,IAAA;AAAA,QACtD,iBAAmB,EAAA,CAAA,MAAA,KACjB,cAAiB,GAAA,cAAA,CAAe,MAAM,CAAI,GAAA,KAAA;AAAA,QAE5C,QAAU,EAAA,CAAC,MAAQ,EAAA,OAAA,KACjB,iBAAkB,CAAA;AAAA,UAChB,GAAG,YAAA;AAAA,UACH,MAAM,OAAW,IAAA,EAAA;AAAA,UACjB,QAAQ;AAAC,SACa,CAAA;AAAA,QAE1B,YAAA,EAAc,CAAC,KAAA,EAAO,MACpB,qBAAA,GAAA;AAAA,UAAC,mBAAA;AAAA,UAAA;AAAA,YACC,KAAA;AAAA,YACA,OAAO,MAAU,IAAA,EAAA;AAAA,YACjB,SAAW,EAAA;AAAA;AAAA,SACb;AAAA,QAEF,WAAA,EAAa,CAAC,MACZ,qBAAA,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACE,GAAG,MAAA;AAAA,YACJ,KAAM,EAAA,MAAA;AAAA,YACN,OAAQ,EAAA,UAAA;AAAA,YACR,WAAY,EAAA,eAAA;AAAA,YACZ,QAAQ,EAAA;AAAA;AAAA;AACV;AAAA,KAEJ;AAAA,oBACC,GAAA,CAAA,GAAA,EAAA,EAAI,SAAW,EAAA,OAAA,CAAQ,0BACrB,QACC,EAAA,MAAA,mBAAA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,MAAQ,EAAA,YAAA;AAAA,QACR,QAAA,EAAW,YAAsC,EAAA,MAAA,IAAU,EAAC;AAAA,QAC5D,SAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAQ,EAAA,YAAA;AAAA,QACR,QAAA,EAAU,UACR,iBAAkB,CAAA;AAAA,UAChB,GAAG,YAAA;AAAA,UACH,MAAA,EAAQ,IAAK,CAAA,QAAA,IAAY;AAAC,SACJ,CAAA;AAAA,QAE1B,eAAiB,EAAA,qBAAA;AAAA,QACjB,aAAe,EAAA,KAAA;AAAA,QACf,YAAY,EAAA;AAAA;AAAA,KAGd,mBAAA,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,KAAO,EAAA,EAAE,KAAO,EAAA,MAAA,EAAQ,WAAW,MAAO,EAAA;AAAA,QAC1C,EAAA,EAAI,mBAAmB,KAAK,CAAA;AAAA,QAC5B,QAAQ,EAAA,IAAA;AAAA,QACR,KAAM,EAAA,gBAAA;AAAA,QACN,QAAQ,EAAA,IAAA;AAAA,QACR,OAAQ,EAAA;AAAA;AAAA,KAGd,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ConditionsFormRowFields.esm.js","sources":["../../../src/components/ConditionalAccess/ConditionsFormRowFields.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 type { SetStateAction, Dispatch } from 'react';\nimport { useState } from 'react';\n\nimport { PermissionCondition } from '@backstage/plugin-permission-common';\n\nimport Autocomplete from '@mui/material/Autocomplete';\nimport Box from '@mui/material/Box';\nimport { Theme, useTheme } from '@mui/material/styles';\nimport TextField from '@mui/material/TextField';\nimport { makeStyles } from '@mui/styles';\nimport Form from '@rjsf/mui';\nimport {\n RegistryFieldsType,\n RJSFSchema,\n RJSFValidationError,\n UiSchema,\n} from '@rjsf/utils';\nimport validator from '@rjsf/validator-ajv8';\n\nimport {\n getNestedRuleErrors,\n getSimpleRuleErrors,\n isSimpleRule,\n setErrorMessage,\n} from '../../utils/conditional-access-utils';\nimport { criterias } from './const';\nimport { CustomArrayField } from './CustomArrayField';\nimport { RulesDropdownOption } from './RulesDropdownOption';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport {\n AccessConditionsErrors,\n ComplexErrors,\n Condition,\n ConditionsData,\n NestedCriteriaErrors,\n RulesData,\n} from './types';\n\ntype ConditionFormRowFieldsProps = {\n oldCondition: Condition;\n index?: number;\n criteria: string;\n onRuleChange: (newCondition: ConditionsData) => void;\n conditionRow: ConditionsData | Condition;\n conditionRulesData?: RulesData;\n setErrors: Dispatch<SetStateAction<AccessConditionsErrors | undefined>>;\n optionDisabled?: (ruleOption: string) => boolean;\n setRemoveAllClicked: Dispatch<SetStateAction<boolean>>;\n nestedConditionRow?: Condition[];\n nestedConditionCriteria?: string;\n nestedConditionIndex?: number;\n nestedConditionRuleIndex?: number;\n updateRules?: (newCondition: Condition[] | Condition) => void;\n};\n\ninterface StyleProps {\n isNotSimpleCondition: boolean;\n hasError: boolean;\n}\n\nconst makeConditionsFormRowFieldsStyles = makeStyles<Theme, StyleProps>(() => ({\n leftInputFieldContainer: {\n display: 'flex',\n flexFlow: 'row',\n gap: '1rem',\n flexGrow: 1,\n paddingLeft: 0,\n margin: ({ isNotSimpleCondition }) =>\n isNotSimpleCondition ? '-1.5rem 0 0 1.85rem' : '0',\n },\n rightInputFieldContainer: {\n width: '50%',\n '& span > h6': {\n display: ({ hasError }) => (hasError ? 'none' : 'block'),\n },\n },\n}));\n\nexport const getTextFieldStyles = (theme: Theme) => ({\n '& div[class*=\"MuiInputBase-root\"]': {\n backgroundColor: theme.palette.background.paper,\n },\n '& span': {\n color: theme.palette.textSubtle,\n },\n '& input': {\n color: theme.palette.textContrast,\n },\n '& fieldset.MuiOutlinedInput-notchedOutline': {\n borderColor: theme.palette.grey[500],\n },\n '& div.MuiOutlinedInput-root': {\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: theme.palette.primary.light,\n },\n '&.Mui-error .MuiOutlinedInput-notchedOutline': {\n borderColor: theme.palette.status.error,\n '&:hover': {\n borderColor: theme.palette.status.error,\n },\n },\n },\n '& label.MuiFormLabel-root.Mui-focused': {\n color: theme.palette.primary.light,\n },\n '& label.MuiFormLabel-root.Mui-error': {\n color: theme.palette.status.error,\n },\n '& div.MuiOutlinedInput-root:hover fieldset': {\n borderColor:\n theme.palette.mode === 'dark' ? theme.palette.textContrast : 'unset',\n },\n '& label': {\n color: theme.palette.textSubtle,\n },\n});\n\nexport const ConditionsFormRowFields = ({\n oldCondition,\n index,\n criteria,\n onRuleChange,\n conditionRow,\n conditionRulesData,\n setErrors,\n optionDisabled,\n setRemoveAllClicked,\n nestedConditionRow,\n nestedConditionCriteria,\n nestedConditionIndex,\n nestedConditionRuleIndex,\n updateRules,\n}: ConditionFormRowFieldsProps) => {\n const { t } = useTranslation();\n const isNotSimpleCondition =\n criteria === criterias.not && !nestedConditionCriteria;\n const theme = useTheme();\n const [hasError, setHasError] = useState(false);\n const classes = makeConditionsFormRowFieldsStyles({\n isNotSimpleCondition,\n hasError,\n });\n\n const rules = conditionRulesData?.rules ?? [];\n const paramsSchema =\n conditionRulesData?.[(oldCondition as PermissionCondition).rule]?.schema;\n\n const schema: RJSFSchema = paramsSchema;\n\n const uiSchema: UiSchema = {\n 'ui:submitButtonOptions': {\n norender: true,\n },\n 'ui:classNames': `{\n '& div[class*=\"MuiInputBase-root\"]': {\n backgroundColor: theme.palette.background.paper,\n },\n '& span': {\n color: theme.palette.textSubtle,\n },\n '& input': {\n color: theme.palette.textContrast,\n },\n '& fieldset.MuiOutlinedInput-notchedOutline': {\n borderColor: theme.palette.grey[500],\n },\n '& div.MuiOutlinedInput-root': {\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: theme.palette.primary.light,\n },\n '&.Mui-error .MuiOutlinedInput-notchedOutline': {\n borderColor: theme.palette.status.error,\n '&:hover': {\n borderColor: theme.palette.status.error,\n },\n },\n },\n '& label.MuiFormLabel-root.Mui-focused': {\n color: theme.palette.primary.light,\n },\n '& label.MuiFormLabel-root.Mui-error': {\n color: theme.palette.status.error,\n },\n '& div.MuiOutlinedInput-root:hover fieldset': {\n borderColor:\n theme.palette.mode === 'dark' ? theme.palette.textContrast : 'unset',\n },\n '& label': {\n color: theme.palette.textSubtle,\n },\n }`,\n 'ui:field': 'array',\n };\n\n const customFields: RegistryFieldsType = { ArrayField: CustomArrayField };\n\n const handleConditionChange = (newCondition: PermissionCondition) => {\n setRemoveAllClicked(false);\n switch (criteria) {\n case criterias.condition: {\n onRuleChange({ condition: newCondition });\n break;\n }\n case criterias.allOf: {\n const updatedCriteria = (conditionRow as ConditionsData).allOf ?? [];\n updatedCriteria[index ?? 0] = newCondition;\n onRuleChange({ allOf: updatedCriteria });\n break;\n }\n case criterias.anyOf: {\n const updatedCriteria = (conditionRow as ConditionsData).anyOf ?? [];\n updatedCriteria[index ?? 0] = newCondition;\n onRuleChange({ anyOf: updatedCriteria });\n break;\n }\n case criterias.not: {\n onRuleChange({ not: newCondition });\n break;\n }\n default:\n }\n };\n\n const handleNestedConditionChange = (newCondition: PermissionCondition) => {\n if (\n !nestedConditionRow ||\n !nestedConditionCriteria ||\n nestedConditionIndex === undefined ||\n !updateRules\n ) {\n return;\n }\n const updatedNestedConditionRow: Condition[] = nestedConditionRow.map(\n (c, i) => {\n if (i === nestedConditionIndex) {\n if (nestedConditionCriteria === criterias.not) {\n return {\n [nestedConditionCriteria]: newCondition,\n };\n }\n const updatedNestedConditionRules = (\n (c[\n nestedConditionCriteria as keyof Condition\n ] as PermissionCondition[]) || []\n ).map((rule, rindex) => {\n return rindex === nestedConditionRuleIndex ? newCondition : rule;\n });\n\n return {\n [nestedConditionCriteria]: updatedNestedConditionRules,\n };\n }\n return c;\n },\n );\n\n updateRules(\n criteria === criterias.not\n ? updatedNestedConditionRow[0]\n : updatedNestedConditionRow,\n );\n };\n\n const handleTransformErrors = (errors: RJSFValidationError[]) => {\n if (errors.length > 0) {\n setHasError(true);\n } else {\n setHasError(false);\n }\n // criteria: condition or not simple-condition\n if (\n criteria === criterias.condition ||\n (criteria === criterias.not &&\n isSimpleRule(conditionRow[criteria as keyof Condition]))\n ) {\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n updatedErrors[criteria] = setErrorMessage(errors);\n\n return updatedErrors;\n });\n }\n\n // criteria: not nested-condition\n if (\n criteria === criterias.not &&\n nestedConditionCriteria &&\n !isSimpleRule(conditionRow[criteria as keyof Condition])\n ) {\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n const nestedErrors = (updatedErrors[criteria] as ComplexErrors)[\n nestedConditionCriteria as keyof Condition\n ] as NestedCriteriaErrors;\n\n // nestedCriteria: allOf or anyOf\n if (\n Array.isArray(nestedErrors) &&\n nestedConditionRuleIndex !== undefined\n ) {\n nestedErrors[nestedConditionRuleIndex] = setErrorMessage(errors);\n } else {\n // nestedCriteria: not\n updatedErrors[criteria] = {\n [nestedConditionCriteria]: setErrorMessage(errors),\n };\n }\n\n return updatedErrors;\n });\n }\n\n // criteria: allOf or anyOf\n if (criteria === criterias.allOf || criteria === criterias.anyOf) {\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n const simpleRuleErrors = getSimpleRuleErrors(\n updatedErrors[\n criteria as keyof AccessConditionsErrors\n ] as ComplexErrors[],\n );\n if (\n Array.isArray(simpleRuleErrors) &&\n simpleRuleErrors.length > 0 &&\n index !== undefined\n ) {\n simpleRuleErrors[index] = setErrorMessage(errors);\n }\n\n const nestedRuleErrors = getNestedRuleErrors(\n updatedErrors[\n criteria as keyof AccessConditionsErrors\n ] as ComplexErrors[],\n );\n\n // nestedCriteria: allOf or anyOf\n if (\n nestedConditionCriteria &&\n nestedConditionIndex !== undefined &&\n nestedConditionRuleIndex !== undefined\n ) {\n const nestedConditionRuleList =\n nestedRuleErrors[nestedConditionIndex][nestedConditionCriteria];\n\n if (Array.isArray(nestedConditionRuleList)) {\n nestedConditionRuleList[nestedConditionRuleIndex] =\n setErrorMessage(errors);\n }\n }\n\n // nestedCriteria: not\n if (\n Array.isArray(nestedRuleErrors) &&\n nestedRuleErrors.length > 0 &&\n nestedConditionCriteria === criterias.not &&\n nestedConditionIndex !== undefined\n ) {\n nestedRuleErrors[nestedConditionIndex][nestedConditionCriteria] =\n setErrorMessage(errors);\n }\n\n updatedErrors[criteria] = [...simpleRuleErrors, ...nestedRuleErrors];\n return updatedErrors;\n });\n }\n\n return errors;\n };\n\n const onConditionChange = (newCondition: PermissionCondition) => {\n if (nestedConditionRow) {\n handleNestedConditionChange(newCondition);\n } else {\n handleConditionChange(newCondition);\n }\n };\n\n return (\n <Box className={classes.leftInputFieldContainer}>\n <Autocomplete\n style={{ width: '50%', marginTop: '26px' }}\n sx={getTextFieldStyles(theme)}\n options={rules ?? []}\n value={(oldCondition as PermissionCondition)?.rule || null}\n getOptionDisabled={option =>\n optionDisabled ? optionDisabled(option) : false\n }\n onChange={(_event, ruleVal?: string | null) =>\n onConditionChange({\n ...oldCondition,\n rule: ruleVal ?? '',\n params: {},\n } as PermissionCondition)\n }\n renderOption={(props, option) => (\n <RulesDropdownOption\n props={props}\n label={option ?? ''}\n rulesData={conditionRulesData}\n />\n )}\n renderInput={(params: any) => (\n <TextField\n {...params}\n label={t('common.rule')}\n variant=\"outlined\"\n placeholder={t('common.selectRule')}\n required\n />\n )}\n />\n <Box className={classes.rightInputFieldContainer}>\n {schema ? (\n <Form\n schema={paramsSchema}\n formData={(oldCondition as PermissionCondition)?.params || {}}\n validator={validator}\n uiSchema={uiSchema}\n fields={customFields}\n onChange={data =>\n onConditionChange({\n ...oldCondition,\n params: data.formData || {},\n } as PermissionCondition)\n }\n transformErrors={handleTransformErrors}\n showErrorList={false}\n liveValidate\n />\n ) : (\n <TextField\n style={{ width: '100%', marginTop: '26px' }}\n sx={getTextFieldStyles(theme)}\n disabled\n label=\"string, string\"\n required\n variant=\"outlined\"\n />\n )}\n </Box>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AA2EA,MAAM,iCAAA,GAAoC,WAA8B,OAAO;AAAA,EAC7E,uBAAyB,EAAA;AAAA,IACvB,OAAS,EAAA,MAAA;AAAA,IACT,QAAU,EAAA,KAAA;AAAA,IACV,GAAK,EAAA,MAAA;AAAA,IACL,QAAU,EAAA,CAAA;AAAA,IACV,WAAa,EAAA,CAAA;AAAA,IACb,QAAQ,CAAC,EAAE,oBAAqB,EAAA,KAC9B,uBAAuB,qBAAwB,GAAA;AAAA,GACnD;AAAA,EACA,wBAA0B,EAAA;AAAA,IACxB,KAAO,EAAA,KAAA;AAAA,IACP,aAAe,EAAA;AAAA,MACb,SAAS,CAAC,EAAE,QAAS,EAAA,KAAO,WAAW,MAAS,GAAA;AAAA;AAClD;AAEJ,CAAE,CAAA,CAAA;AAEW,MAAA,kBAAA,GAAqB,CAAC,KAAkB,MAAA;AAAA,EACnD,mCAAqC,EAAA;AAAA,IACnC,eAAA,EAAiB,KAAM,CAAA,OAAA,CAAQ,UAAW,CAAA;AAAA,GAC5C;AAAA,EACA,QAAU,EAAA;AAAA,IACR,KAAA,EAAO,MAAM,OAAQ,CAAA;AAAA,GACvB;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAA,EAAO,MAAM,OAAQ,CAAA;AAAA,GACvB;AAAA,EACA,4CAA8C,EAAA;AAAA,IAC5C,WAAa,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG;AAAA,GACrC;AAAA,EACA,6BAA+B,EAAA;AAAA,IAC7B,gDAAkD,EAAA;AAAA,MAChD,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,OAAQ,CAAA;AAAA,KACrC;AAAA,IACA,8CAAgD,EAAA;AAAA,MAC9C,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,MAAO,CAAA,KAAA;AAAA,MAClC,SAAW,EAAA;AAAA,QACT,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,MAAO,CAAA;AAAA;AACpC;AACF,GACF;AAAA,EACA,uCAAyC,EAAA;AAAA,IACvC,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,OAAQ,CAAA;AAAA,GAC/B;AAAA,EACA,qCAAuC,EAAA;AAAA,IACrC,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,MAAO,CAAA;AAAA,GAC9B;AAAA,EACA,4CAA8C,EAAA;AAAA,IAC5C,aACE,KAAM,CAAA,OAAA,CAAQ,SAAS,MAAS,GAAA,KAAA,CAAM,QAAQ,YAAe,GAAA;AAAA,GACjE;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAA,EAAO,MAAM,OAAQ,CAAA;AAAA;AAEzB,CAAA;AAEO,MAAM,0BAA0B,CAAC;AAAA,EACtC,YAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,uBAAA;AAAA,EACA,oBAAA;AAAA,EACA,wBAAA;AAAA,EACA;AACF,CAAmC,KAAA;AACjC,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAC7B,EAAA,MAAM,oBACJ,GAAA,QAAA,KAAa,SAAU,CAAA,GAAA,IAAO,CAAC,uBAAA;AACjC,EAAA,MAAM,QAAQ,QAAS,EAAA;AACvB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,UAAU,iCAAkC,CAAA;AAAA,IAChD,oBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAM,MAAA,KAAA,GAAQ,kBAAoB,EAAA,KAAA,IAAS,EAAC;AAC5C,EAAA,MAAM,YACJ,GAAA,kBAAA,GAAsB,YAAqC,CAAA,IAAI,CAAG,EAAA,MAAA;AAEpE,EAAA,MAAM,MAAqB,GAAA,YAAA;AAE3B,EAAA,MAAM,QAAqB,GAAA;AAAA,IACzB,wBAA0B,EAAA;AAAA,MACxB,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,eAAiB,EAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAA,CAAA;AAAA,IAsCjB,UAAY,EAAA;AAAA,GACd;AAEA,EAAM,MAAA,YAAA,GAAmC,EAAE,UAAA,EAAY,gBAAiB,EAAA;AAExE,EAAM,MAAA,qBAAA,GAAwB,CAAC,YAAsC,KAAA;AACnE,IAAA,mBAAA,CAAoB,KAAK,CAAA;AACzB,IAAA,QAAQ,QAAU;AAAA,MAChB,KAAK,UAAU,SAAW,EAAA;AACxB,QAAa,YAAA,CAAA,EAAE,SAAW,EAAA,YAAA,EAAc,CAAA;AACxC,QAAA;AAAA;AACF,MACA,KAAK,UAAU,KAAO,EAAA;AACpB,QAAM,MAAA,eAAA,GAAmB,YAAgC,CAAA,KAAA,IAAS,EAAC;AACnE,QAAgB,eAAA,CAAA,KAAA,IAAS,CAAC,CAAI,GAAA,YAAA;AAC9B,QAAa,YAAA,CAAA,EAAE,KAAO,EAAA,eAAA,EAAiB,CAAA;AACvC,QAAA;AAAA;AACF,MACA,KAAK,UAAU,KAAO,EAAA;AACpB,QAAM,MAAA,eAAA,GAAmB,YAAgC,CAAA,KAAA,IAAS,EAAC;AACnE,QAAgB,eAAA,CAAA,KAAA,IAAS,CAAC,CAAI,GAAA,YAAA;AAC9B,QAAa,YAAA,CAAA,EAAE,KAAO,EAAA,eAAA,EAAiB,CAAA;AACvC,QAAA;AAAA;AACF,MACA,KAAK,UAAU,GAAK,EAAA;AAClB,QAAa,YAAA,CAAA,EAAE,GAAK,EAAA,YAAA,EAAc,CAAA;AAClC,QAAA;AAAA;AAEF;AACF,GACF;AAEA,EAAM,MAAA,2BAAA,GAA8B,CAAC,YAAsC,KAAA;AACzE,IAAA,IACE,CAAC,kBACD,IAAA,CAAC,2BACD,oBAAyB,KAAA,SAAA,IACzB,CAAC,WACD,EAAA;AACA,MAAA;AAAA;AAEF,IAAA,MAAM,4BAAyC,kBAAmB,CAAA,GAAA;AAAA,MAChE,CAAC,GAAG,CAAM,KAAA;AACR,QAAA,IAAI,MAAM,oBAAsB,EAAA;AAC9B,UAAI,IAAA,uBAAA,KAA4B,UAAU,GAAK,EAAA;AAC7C,YAAO,OAAA;AAAA,cACL,CAAC,uBAAuB,GAAG;AAAA,aAC7B;AAAA;AAEF,UAAM,MAAA,2BAAA,GAAA,CACH,EACC,uBACF,CAAA,IAA+B,EAC/B,EAAA,GAAA,CAAI,CAAC,IAAA,EAAM,MAAW,KAAA;AACtB,YAAO,OAAA,MAAA,KAAW,2BAA2B,YAAe,GAAA,IAAA;AAAA,WAC7D,CAAA;AAED,UAAO,OAAA;AAAA,YACL,CAAC,uBAAuB,GAAG;AAAA,WAC7B;AAAA;AAEF,QAAO,OAAA,CAAA;AAAA;AACT,KACF;AAEA,IAAA,WAAA;AAAA,MACE,QAAa,KAAA,SAAA,CAAU,GACnB,GAAA,yBAAA,CAA0B,CAAC,CAC3B,GAAA;AAAA,KACN;AAAA,GACF;AAEA,EAAM,MAAA,qBAAA,GAAwB,CAAC,MAAkC,KAAA;AAC/D,IAAI,IAAA,MAAA,CAAO,SAAS,CAAG,EAAA;AACrB,MAAA,WAAA,CAAY,IAAI,CAAA;AAAA,KACX,MAAA;AACL,MAAA,WAAA,CAAY,KAAK,CAAA;AAAA;AAGnB,IACE,IAAA,QAAA,KAAa,SAAU,CAAA,SAAA,IACtB,QAAa,KAAA,SAAA,CAAU,OACtB,YAAa,CAAA,YAAA,CAAa,QAA2B,CAAC,CACxD,EAAA;AACA,MAAA,SAAA,CAAU,CAAc,UAAA,KAAA;AACtB,QAAM,MAAA,aAAA,GAAgB,EAAE,GAAG,UAAW,EAAA;AACtC,QAAc,aAAA,CAAA,QAAQ,CAAI,GAAA,eAAA,CAAgB,MAAM,CAAA;AAEhD,QAAO,OAAA,aAAA;AAAA,OACR,CAAA;AAAA;AAIH,IACE,IAAA,QAAA,KAAa,UAAU,GACvB,IAAA,uBAAA,IACA,CAAC,YAAa,CAAA,YAAA,CAAa,QAA2B,CAAC,CACvD,EAAA;AACA,MAAA,SAAA,CAAU,CAAc,UAAA,KAAA;AACtB,QAAM,MAAA,aAAA,GAAgB,EAAE,GAAG,UAAW,EAAA;AACtC,QAAA,MAAM,YAAgB,GAAA,aAAA,CAAc,QAAQ,CAAA,CAC1C,uBACF,CAAA;AAGA,QAAA,IACE,KAAM,CAAA,OAAA,CAAQ,YAAY,CAAA,IAC1B,6BAA6B,SAC7B,EAAA;AACA,UAAa,YAAA,CAAA,wBAAwB,CAAI,GAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,SAC1D,MAAA;AAEL,UAAA,aAAA,CAAc,QAAQ,CAAI,GAAA;AAAA,YACxB,CAAC,uBAAuB,GAAG,eAAA,CAAgB,MAAM;AAAA,WACnD;AAAA;AAGF,QAAO,OAAA,aAAA;AAAA,OACR,CAAA;AAAA;AAIH,IAAA,IAAI,QAAa,KAAA,SAAA,CAAU,KAAS,IAAA,QAAA,KAAa,UAAU,KAAO,EAAA;AAChE,MAAA,SAAA,CAAU,CAAc,UAAA,KAAA;AACtB,QAAM,MAAA,aAAA,GAAgB,EAAE,GAAG,UAAW,EAAA;AACtC,QAAA,MAAM,gBAAmB,GAAA,mBAAA;AAAA,UACvB,cACE,QACF;AAAA,SACF;AACA,QACE,IAAA,KAAA,CAAM,QAAQ,gBAAgB,CAAA,IAC9B,iBAAiB,MAAS,GAAA,CAAA,IAC1B,UAAU,SACV,EAAA;AACA,UAAiB,gBAAA,CAAA,KAAK,CAAI,GAAA,eAAA,CAAgB,MAAM,CAAA;AAAA;AAGlD,QAAA,MAAM,gBAAmB,GAAA,mBAAA;AAAA,UACvB,cACE,QACF;AAAA,SACF;AAGA,QAAA,IACE,uBACA,IAAA,oBAAA,KAAyB,SACzB,IAAA,wBAAA,KAA6B,SAC7B,EAAA;AACA,UAAA,MAAM,uBACJ,GAAA,gBAAA,CAAiB,oBAAoB,CAAA,CAAE,uBAAuB,CAAA;AAEhE,UAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,uBAAuB,CAAG,EAAA;AAC1C,YAAwB,uBAAA,CAAA,wBAAwB,CAC9C,GAAA,eAAA,CAAgB,MAAM,CAAA;AAAA;AAC1B;AAIF,QACE,IAAA,KAAA,CAAM,OAAQ,CAAA,gBAAgB,CAC9B,IAAA,gBAAA,CAAiB,MAAS,GAAA,CAAA,IAC1B,uBAA4B,KAAA,SAAA,CAAU,GACtC,IAAA,oBAAA,KAAyB,SACzB,EAAA;AACA,UAAA,gBAAA,CAAiB,oBAAoB,CAAA,CAAE,uBAAuB,CAAA,GAC5D,gBAAgB,MAAM,CAAA;AAAA;AAG1B,QAAA,aAAA,CAAc,QAAQ,CAAI,GAAA,CAAC,GAAG,gBAAA,EAAkB,GAAG,gBAAgB,CAAA;AACnE,QAAO,OAAA,aAAA;AAAA,OACR,CAAA;AAAA;AAGH,IAAO,OAAA,MAAA;AAAA,GACT;AAEA,EAAM,MAAA,iBAAA,GAAoB,CAAC,YAAsC,KAAA;AAC/D,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAA,2BAAA,CAA4B,YAAY,CAAA;AAAA,KACnC,MAAA;AACL,MAAA,qBAAA,CAAsB,YAAY,CAAA;AAAA;AACpC,GACF;AAEA,EAAA,uBACG,IAAA,CAAA,GAAA,EAAA,EAAI,SAAW,EAAA,OAAA,CAAQ,uBACtB,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,KAAO,EAAA,EAAE,KAAO,EAAA,KAAA,EAAO,WAAW,MAAO,EAAA;AAAA,QACzC,EAAA,EAAI,mBAAmB,KAAK,CAAA;AAAA,QAC5B,OAAA,EAAS,SAAS,EAAC;AAAA,QACnB,KAAA,EAAQ,cAAsC,IAAQ,IAAA,IAAA;AAAA,QACtD,iBAAmB,EAAA,CAAA,MAAA,KACjB,cAAiB,GAAA,cAAA,CAAe,MAAM,CAAI,GAAA,KAAA;AAAA,QAE5C,QAAU,EAAA,CAAC,MAAQ,EAAA,OAAA,KACjB,iBAAkB,CAAA;AAAA,UAChB,GAAG,YAAA;AAAA,UACH,MAAM,OAAW,IAAA,EAAA;AAAA,UACjB,QAAQ;AAAC,SACa,CAAA;AAAA,QAE1B,YAAA,EAAc,CAAC,KAAA,EAAO,MACpB,qBAAA,GAAA;AAAA,UAAC,mBAAA;AAAA,UAAA;AAAA,YACC,KAAA;AAAA,YACA,OAAO,MAAU,IAAA,EAAA;AAAA,YACjB,SAAW,EAAA;AAAA;AAAA,SACb;AAAA,QAEF,WAAA,EAAa,CAAC,MACZ,qBAAA,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACE,GAAG,MAAA;AAAA,YACJ,KAAA,EAAO,EAAE,aAAa,CAAA;AAAA,YACtB,OAAQ,EAAA,UAAA;AAAA,YACR,WAAA,EAAa,EAAE,mBAAmB,CAAA;AAAA,YAClC,QAAQ,EAAA;AAAA;AAAA;AACV;AAAA,KAEJ;AAAA,oBACC,GAAA,CAAA,GAAA,EAAA,EAAI,SAAW,EAAA,OAAA,CAAQ,0BACrB,QACC,EAAA,MAAA,mBAAA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,MAAQ,EAAA,YAAA;AAAA,QACR,QAAA,EAAW,YAAsC,EAAA,MAAA,IAAU,EAAC;AAAA,QAC5D,SAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAQ,EAAA,YAAA;AAAA,QACR,QAAA,EAAU,UACR,iBAAkB,CAAA;AAAA,UAChB,GAAG,YAAA;AAAA,UACH,MAAA,EAAQ,IAAK,CAAA,QAAA,IAAY;AAAC,SACJ,CAAA;AAAA,QAE1B,eAAiB,EAAA,qBAAA;AAAA,QACjB,aAAe,EAAA,KAAA;AAAA,QACf,YAAY,EAAA;AAAA;AAAA,KAGd,mBAAA,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,KAAO,EAAA,EAAE,KAAO,EAAA,MAAA,EAAQ,WAAW,MAAO,EAAA;AAAA,QAC1C,EAAA,EAAI,mBAAmB,KAAK,CAAA;AAAA,QAC5B,QAAQ,EAAA,IAAA;AAAA,QACR,KAAM,EAAA,gBAAA;AAAA,QACN,QAAQ,EAAA,IAAA;AAAA,QACR,OAAQ,EAAA;AAAA;AAAA,KAGd,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
@@ -4,18 +4,12 @@ const criterias = {
4
4
  allOf: "allOf",
5
5
  not: "not"
6
6
  };
7
- const criteriasLabels = {
8
- [criterias.condition]: "Condition",
9
- [criterias.allOf]: "AllOf",
10
- [criterias.anyOf]: "AnyOf",
11
- [criterias.not]: "Not"
12
- };
13
- const conditionButtons = [
14
- { val: criterias.condition, label: criteriasLabels[criterias.condition] },
15
- { val: criterias.allOf, label: criteriasLabels[criterias.allOf] },
16
- { val: criterias.anyOf, label: criteriasLabels[criterias.anyOf] },
17
- { val: criterias.not, label: criteriasLabels[criterias.not] }
7
+ const getConditionButtons = (t) => [
8
+ { val: criterias.condition, label: t("conditionalAccess.condition") },
9
+ { val: criterias.allOf, label: t("conditionalAccess.allOf") },
10
+ { val: criterias.anyOf, label: t("conditionalAccess.anyOf") },
11
+ { val: criterias.not, label: t("conditionalAccess.not") }
18
12
  ];
19
13
 
20
- export { conditionButtons, criterias, criteriasLabels };
14
+ export { criterias, getConditionButtons };
21
15
  //# sourceMappingURL=const.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"const.esm.js","sources":["../../../src/components/ConditionalAccess/const.ts"],"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 { ConditionsData } from './types';\n\nexport const criterias = {\n condition: 'condition' as keyof ConditionsData,\n anyOf: 'anyOf' as keyof ConditionsData,\n allOf: 'allOf' as keyof ConditionsData,\n not: 'not' as keyof ConditionsData,\n};\n\nexport const criteriasLabels = {\n [criterias.condition]: 'Condition',\n [criterias.allOf]: 'AllOf',\n [criterias.anyOf]: 'AnyOf',\n [criterias.not]: 'Not',\n};\n\nexport const conditionButtons = [\n { val: criterias.condition, label: criteriasLabels[criterias.condition] },\n { val: criterias.allOf, label: criteriasLabels[criterias.allOf] },\n { val: criterias.anyOf, label: criteriasLabels[criterias.anyOf] },\n { val: criterias.not, label: criteriasLabels[criterias.not] },\n];\n"],"names":[],"mappings":"AAiBO,MAAM,SAAY,GAAA;AAAA,EACvB,SAAW,EAAA,WAAA;AAAA,EACX,KAAO,EAAA,OAAA;AAAA,EACP,KAAO,EAAA,OAAA;AAAA,EACP,GAAK,EAAA;AACP;AAEO,MAAM,eAAkB,GAAA;AAAA,EAC7B,CAAC,SAAU,CAAA,SAAS,GAAG,WAAA;AAAA,EACvB,CAAC,SAAU,CAAA,KAAK,GAAG,OAAA;AAAA,EACnB,CAAC,SAAU,CAAA,KAAK,GAAG,OAAA;AAAA,EACnB,CAAC,SAAU,CAAA,GAAG,GAAG;AACnB;AAEO,MAAM,gBAAmB,GAAA;AAAA,EAC9B,EAAE,KAAK,SAAU,CAAA,SAAA,EAAW,OAAO,eAAgB,CAAA,SAAA,CAAU,SAAS,CAAE,EAAA;AAAA,EACxE,EAAE,KAAK,SAAU,CAAA,KAAA,EAAO,OAAO,eAAgB,CAAA,SAAA,CAAU,KAAK,CAAE,EAAA;AAAA,EAChE,EAAE,KAAK,SAAU,CAAA,KAAA,EAAO,OAAO,eAAgB,CAAA,SAAA,CAAU,KAAK,CAAE,EAAA;AAAA,EAChE,EAAE,KAAK,SAAU,CAAA,GAAA,EAAK,OAAO,eAAgB,CAAA,SAAA,CAAU,GAAG,CAAE;AAC9D;;;;"}
1
+ {"version":3,"file":"const.esm.js","sources":["../../../src/components/ConditionalAccess/const.ts"],"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 { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { ConditionsData } from './types';\nimport { rbacTranslationRef } from '../../translations';\n\nexport const criterias = {\n condition: 'condition' as keyof ConditionsData,\n anyOf: 'anyOf' as keyof ConditionsData,\n allOf: 'allOf' as keyof ConditionsData,\n not: 'not' as keyof ConditionsData,\n};\n\nexport const getCriteriasLabels = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => ({\n [criterias.condition]: t('conditionalAccess.condition'),\n [criterias.allOf]: t('conditionalAccess.allOf'),\n [criterias.anyOf]: t('conditionalAccess.anyOf'),\n [criterias.not]: t('conditionalAccess.not'),\n});\n\nexport const getConditionButtons = (\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => [\n { val: criterias.condition, label: t('conditionalAccess.condition') },\n { val: criterias.allOf, label: t('conditionalAccess.allOf') },\n { val: criterias.anyOf, label: t('conditionalAccess.anyOf') },\n { val: criterias.not, label: t('conditionalAccess.not') },\n];\n"],"names":[],"mappings":"AAmBO,MAAM,SAAY,GAAA;AAAA,EACvB,SAAW,EAAA,WAAA;AAAA,EACX,KAAO,EAAA,OAAA;AAAA,EACP,KAAO,EAAA,OAAA;AAAA,EACP,GAAK,EAAA;AACP;AAWa,MAAA,mBAAA,GAAsB,CACjC,CACG,KAAA;AAAA,EACH,EAAE,GAAK,EAAA,SAAA,CAAU,WAAW,KAAO,EAAA,CAAA,CAAE,6BAA6B,CAAE,EAAA;AAAA,EACpE,EAAE,GAAK,EAAA,SAAA,CAAU,OAAO,KAAO,EAAA,CAAA,CAAE,yBAAyB,CAAE,EAAA;AAAA,EAC5D,EAAE,GAAK,EAAA,SAAA,CAAU,OAAO,KAAO,EAAA,CAAA,CAAE,yBAAyB,CAAE,EAAA;AAAA,EAC5D,EAAE,GAAK,EAAA,SAAA,CAAU,KAAK,KAAO,EAAA,CAAA,CAAE,uBAAuB,CAAE;AAC1D;;;;"}
@@ -7,37 +7,41 @@ import LinearProgress from '@mui/material/LinearProgress';
7
7
  import TextField from '@mui/material/TextField';
8
8
  import HighlightOffIcon from '@mui/icons-material/HighlightOff';
9
9
  import IconButton from '@mui/material/IconButton';
10
+ import { useLanguage } from '../../hooks/useLanguage.esm.js';
10
11
  import { getMembersCount, getParentGroupsCount, getChildGroupsCount } from '../../utils/create-role-utils.esm.js';
11
12
  import { MembersDropdownOption } from './MembersDropdownOption.esm.js';
13
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
12
14
 
15
+ const getDescription = (member, t) => {
16
+ const memberCount = getMembersCount(member);
17
+ const parentCount = getParentGroupsCount(member);
18
+ const childCount = getChildGroupsCount(member);
19
+ return member.kind === "Group" ? [
20
+ memberCount > 0 ? t("common.membersCount", { count: memberCount }) : "",
21
+ parentCount > 0 ? t("common.parentGroupCount", { count: parentCount }) : "",
22
+ childCount > 0 ? t("common.childGroupsCount", { count: childCount }) : ""
23
+ ].filter(Boolean).join(", ") : undefined;
24
+ };
13
25
  const AddMembersForm = ({
14
26
  selectedMembers,
15
27
  selectedMembersError,
16
28
  setFieldValue,
17
29
  membersData
18
30
  }) => {
31
+ const locale = useLanguage();
32
+ const { t } = useTranslation();
19
33
  const [search, setSearch] = useState("");
20
34
  const [selectedMember, setSelectedMember] = useState(selectedMembers);
21
35
  useEffect(() => {
22
36
  setSelectedMember(selectedMembers);
23
37
  }, [selectedMembers]);
24
- const getDescription = (member) => {
25
- const memberCount = getMembersCount(member);
26
- const parentCount = getParentGroupsCount(member);
27
- const childCount = getChildGroupsCount(member);
28
- return member.kind === "Group" ? [
29
- memberCount > 0 ? `${memberCount} members` : "",
30
- parentCount > 0 ? `${parentCount} parent group` : "",
31
- childCount > 0 ? `${childCount} child groups` : ""
32
- ].filter(Boolean).join(", ") : undefined;
33
- };
34
38
  const membersOptions = useMemo(() => {
35
39
  return membersData.members ? membersData.members.map((member, index) => {
36
40
  const tag = member.metadata.etag ?? `${member.metadata.name}-${member.kind}-${index}`;
37
41
  return {
38
42
  id: tag,
39
43
  label: member.spec?.profile?.displayName ?? member.metadata.name,
40
- description: getDescription(member),
44
+ description: getDescription(member, t),
41
45
  etag: tag,
42
46
  type: member.kind,
43
47
  namespace: member.metadata.namespace,
@@ -45,18 +49,18 @@ const AddMembersForm = ({
45
49
  ref: stringifyEntityRef(member)
46
50
  };
47
51
  }) : [];
48
- }, [membersData.members]);
52
+ }, [membersData.members, t]);
49
53
  const filteredMembers = useMemo(() => {
50
54
  if (search) {
51
55
  return membersOptions.filter(
52
- (m) => m.label.toLocaleLowerCase("en-US").includes(search.toLocaleLowerCase("en-US"))
56
+ (m) => m.label.toLocaleLowerCase(locale).includes(search.toLocaleLowerCase(locale))
53
57
  ).slice(0, 99);
54
58
  }
55
59
  return membersOptions.slice(0, 99);
56
- }, [membersOptions, search]);
60
+ }, [membersOptions, search, locale]);
57
61
  const handleIsOptionEqualToValue = (option, value) => value.etag ? option.etag === value.etag : selectedMember?.[0].etag === value.etag;
58
62
  return /* @__PURE__ */ jsxs(Fragment, { children: [
59
- /* @__PURE__ */ jsx(FormHelperText, { children: "Search and select users and groups to be added. Selected users and groups will appear in the table below." }),
63
+ /* @__PURE__ */ jsx(FormHelperText, { children: t("common.searchAndSelectUsersGroups") }),
60
64
  /* @__PURE__ */ jsx("br", {}),
61
65
  /* @__PURE__ */ jsx(
62
66
  Autocomplete,
@@ -80,7 +84,7 @@ const AddMembersForm = ({
80
84
  inputValue: search,
81
85
  onInputChange: (_e, newSearch, reason) => reason === "input" && setSearch(newSearch),
82
86
  renderOption: (props, option, state) => /* @__PURE__ */ jsx(MembersDropdownOption, { props, option, state }),
83
- noOptionsText: "No users and groups found.",
87
+ noOptionsText: t("common.noUsersAndGroupsFound"),
84
88
  clearOnEscape: true,
85
89
  renderInput: (params) => /* @__PURE__ */ jsx(
86
90
  TextField,
@@ -89,7 +93,7 @@ const AddMembersForm = ({
89
93
  ...params,
90
94
  name: "add-users-and-groups",
91
95
  variant: "outlined",
92
- label: "Select users and groups",
96
+ label: t("common.selectUsersAndGroups"),
93
97
  error: !!selectedMembersError,
94
98
  helperText: selectedMembersError ?? "",
95
99
  required: true,
@@ -108,7 +112,7 @@ const AddMembersForm = ({
108
112
  onClick: () => {
109
113
  setSearch("");
110
114
  },
111
- "aria-label": "clear search",
115
+ "aria-label": t("common.clearSearch"),
112
116
  children: /* @__PURE__ */ jsx(HighlightOffIcon, { fontSize: "small" })
113
117
  }
114
118
  ),
@@ -120,7 +124,9 @@ const AddMembersForm = ({
120
124
  }
121
125
  ),
122
126
  /* @__PURE__ */ jsx("br", {}),
123
- membersData.error?.message && /* @__PURE__ */ jsx(FormHelperText, { error: !!membersData.error, children: `Error fetching user and groups: ${membersData.error.message}` })
127
+ membersData.error?.message && /* @__PURE__ */ jsx(FormHelperText, { error: !!membersData.error, children: t("common.errorFetchingUserGroups", {
128
+ error: membersData.error.message
129
+ }) })
124
130
  ] });
125
131
  };
126
132
 
@@ -1 +1 @@
1
- {"version":3,"file":"AddMembersForm.esm.js","sources":["../../../src/components/CreateRole/AddMembersForm.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 { useState, useEffect, useMemo } from 'react';\n\nimport { stringifyEntityRef } from '@backstage/catalog-model';\n\nimport Autocomplete from '@mui/material/Autocomplete';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport TextField from '@mui/material/TextField';\nimport HighlightOffIcon from '@mui/icons-material/HighlightOff';\nimport IconButton from '@mui/material/IconButton';\nimport { FormikErrors } from 'formik';\n\nimport { MemberEntity } from '../../types';\nimport {\n getChildGroupsCount,\n getMembersCount,\n getParentGroupsCount,\n} from '../../utils/create-role-utils';\nimport { MembersDropdownOption } from './MembersDropdownOption';\nimport { RoleFormValues, SelectedMember } from './types';\n\ntype AddMembersFormProps = {\n selectedMembers: SelectedMember[];\n selectedMembersError?: string;\n membersData: { members: MemberEntity[]; loading: boolean; error: Error };\n setFieldValue: (\n field: string,\n value: any,\n shouldValidate?: boolean,\n ) => Promise<FormikErrors<RoleFormValues>> | Promise<void>;\n};\n\nexport const AddMembersForm = ({\n selectedMembers,\n selectedMembersError,\n setFieldValue,\n membersData,\n}: AddMembersFormProps) => {\n const [search, setSearch] = useState<string>('');\n const [selectedMember, setSelectedMember] =\n useState<SelectedMember[]>(selectedMembers);\n useEffect(() => {\n setSelectedMember(selectedMembers);\n }, [selectedMembers]);\n\n const getDescription = (member: MemberEntity) => {\n const memberCount = getMembersCount(member);\n const parentCount = getParentGroupsCount(member);\n const childCount = getChildGroupsCount(member);\n\n return member.kind === 'Group'\n ? [\n memberCount > 0 ? `${memberCount} members` : '',\n parentCount > 0 ? `${parentCount} parent group` : '',\n childCount > 0 ? `${childCount} child groups` : '',\n ]\n .filter(Boolean) // Remove any empty strings\n .join(', ')\n : undefined;\n };\n\n const membersOptions: SelectedMember[] = useMemo(() => {\n return membersData.members\n ? membersData.members.map((member: MemberEntity, index: number) => {\n const tag =\n member.metadata.etag ??\n `${member.metadata.name}-${member.kind}-${index}`;\n return {\n id: tag,\n label: member.spec?.profile?.displayName ?? member.metadata.name,\n description: getDescription(member),\n etag: tag,\n type: member.kind,\n namespace: member.metadata.namespace,\n members: getMembersCount(member),\n ref: stringifyEntityRef(member),\n };\n })\n : ([] as SelectedMember[]);\n }, [membersData.members]);\n\n const filteredMembers = useMemo(() => {\n if (search) {\n return membersOptions\n .filter(m =>\n m.label\n .toLocaleLowerCase('en-US')\n .includes(search.toLocaleLowerCase('en-US')),\n )\n .slice(0, 99);\n }\n\n return membersOptions.slice(0, 99);\n }, [membersOptions, search]);\n\n const handleIsOptionEqualToValue = (\n option: SelectedMember,\n value: SelectedMember,\n ) =>\n value.etag\n ? option.etag === value.etag\n : selectedMember?.[0].etag === value.etag;\n\n return (\n <>\n <FormHelperText>\n Search and select users and groups to be added. Selected users and\n groups will appear in the table below.\n </FormHelperText>\n <br />\n <Autocomplete\n disableCloseOnSelect\n data-testid=\"users-and-groups-autocomplete\"\n sx={{ width: '30%' }}\n multiple\n options={filteredMembers || []}\n getOptionLabel={(option: SelectedMember) => option.label ?? ''}\n isOptionEqualToValue={handleIsOptionEqualToValue}\n loading={membersData.loading}\n loadingText={<LinearProgress />}\n disableClearable\n value={selectedMember}\n onChange={(_e, value: SelectedMember[]) => {\n setSelectedMember(value);\n setFieldValue('selectedMembers', value);\n }}\n renderTags={() => ''}\n inputValue={search}\n onInputChange={(_e, newSearch: string, reason) =>\n reason === 'input' && setSearch(newSearch)\n }\n renderOption={(props, option: SelectedMember, state) => (\n <MembersDropdownOption props={props} option={option} state={state} />\n )}\n noOptionsText=\"No users and groups found.\"\n clearOnEscape\n renderInput={params => (\n <TextField\n data-testid=\"users-and-groups-text-field\"\n {...params}\n name=\"add-users-and-groups\"\n variant=\"outlined\"\n label=\"Select users and groups\"\n error={!!selectedMembersError}\n helperText={selectedMembersError ?? ''}\n required\n onKeyDown={event => {\n if (event.key === 'Backspace' && params.inputProps.value === '') {\n event.stopPropagation();\n }\n }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <>\n {search && (\n <IconButton\n size=\"small\"\n onClick={() => {\n setSearch('');\n }}\n aria-label=\"clear search\"\n >\n <HighlightOffIcon fontSize=\"small\" />\n </IconButton>\n )}\n {params.InputProps.endAdornment}\n </>\n ),\n }}\n />\n )}\n />\n <br />\n {membersData.error?.message && (\n <FormHelperText error={!!membersData.error}>\n {`Error fetching user and groups: ${membersData.error.message}`}\n </FormHelperText>\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AddMembersForm.esm.js","sources":["../../../src/components/CreateRole/AddMembersForm.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 { useState, useEffect, useMemo } from 'react';\n\nimport { stringifyEntityRef } from '@backstage/catalog-model';\n\nimport Autocomplete from '@mui/material/Autocomplete';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport TextField from '@mui/material/TextField';\nimport HighlightOffIcon from '@mui/icons-material/HighlightOff';\nimport IconButton from '@mui/material/IconButton';\nimport { FormikErrors } from 'formik';\n\nimport { MemberEntity } from '../../types';\nimport { useLanguage } from '../../hooks/useLanguage';\nimport {\n getChildGroupsCount,\n getMembersCount,\n getParentGroupsCount,\n} from '../../utils/create-role-utils';\nimport { MembersDropdownOption } from './MembersDropdownOption';\nimport { RoleFormValues, SelectedMember } from './types';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { rbacTranslationRef } from '../../translations';\n\ntype AddMembersFormProps = {\n selectedMembers: SelectedMember[];\n selectedMembersError?: string;\n membersData: { members: MemberEntity[]; loading: boolean; error: Error };\n setFieldValue: (\n field: string,\n value: any,\n shouldValidate?: boolean,\n ) => Promise<FormikErrors<RoleFormValues>> | Promise<void>;\n};\n\nconst getDescription = (\n member: MemberEntity,\n t: TranslationFunction<typeof rbacTranslationRef.T>,\n) => {\n const memberCount = getMembersCount(member);\n const parentCount = getParentGroupsCount(member);\n const childCount = getChildGroupsCount(member);\n\n return member.kind === 'Group'\n ? [\n memberCount > 0\n ? t('common.membersCount' as any, { count: memberCount })\n : '',\n parentCount > 0\n ? t('common.parentGroupCount' as any, { count: parentCount })\n : '',\n childCount > 0\n ? t('common.childGroupsCount' as any, { count: childCount })\n : '',\n ]\n .filter(Boolean) // Remove any empty strings\n .join(', ')\n : undefined;\n};\n\nexport const AddMembersForm = ({\n selectedMembers,\n selectedMembersError,\n setFieldValue,\n membersData,\n}: AddMembersFormProps) => {\n const locale = useLanguage();\n const { t } = useTranslation();\n const [search, setSearch] = useState<string>('');\n const [selectedMember, setSelectedMember] =\n useState<SelectedMember[]>(selectedMembers);\n useEffect(() => {\n setSelectedMember(selectedMembers);\n }, [selectedMembers]);\n\n const membersOptions: SelectedMember[] = useMemo(() => {\n return membersData.members\n ? membersData.members.map((member: MemberEntity, index: number) => {\n const tag =\n member.metadata.etag ??\n `${member.metadata.name}-${member.kind}-${index}`;\n return {\n id: tag,\n label: member.spec?.profile?.displayName ?? member.metadata.name,\n description: getDescription(member, t),\n etag: tag,\n type: member.kind,\n namespace: member.metadata.namespace,\n members: getMembersCount(member),\n ref: stringifyEntityRef(member),\n };\n })\n : ([] as SelectedMember[]);\n }, [membersData.members, t]);\n\n const filteredMembers = useMemo(() => {\n if (search) {\n return membersOptions\n .filter(m =>\n m.label\n .toLocaleLowerCase(locale)\n .includes(search.toLocaleLowerCase(locale)),\n )\n .slice(0, 99);\n }\n\n return membersOptions.slice(0, 99);\n }, [membersOptions, search, locale]);\n\n const handleIsOptionEqualToValue = (\n option: SelectedMember,\n value: SelectedMember,\n ) =>\n value.etag\n ? option.etag === value.etag\n : selectedMember?.[0].etag === value.etag;\n\n return (\n <>\n <FormHelperText>{t('common.searchAndSelectUsersGroups')}</FormHelperText>\n <br />\n <Autocomplete\n disableCloseOnSelect\n data-testid=\"users-and-groups-autocomplete\"\n sx={{ width: '30%' }}\n multiple\n options={filteredMembers || []}\n getOptionLabel={(option: SelectedMember) => option.label ?? ''}\n isOptionEqualToValue={handleIsOptionEqualToValue}\n loading={membersData.loading}\n loadingText={<LinearProgress />}\n disableClearable\n value={selectedMember}\n onChange={(_e, value: SelectedMember[]) => {\n setSelectedMember(value);\n setFieldValue('selectedMembers', value);\n }}\n renderTags={() => ''}\n inputValue={search}\n onInputChange={(_e, newSearch: string, reason) =>\n reason === 'input' && setSearch(newSearch)\n }\n renderOption={(props, option: SelectedMember, state) => (\n <MembersDropdownOption props={props} option={option} state={state} />\n )}\n noOptionsText={t('common.noUsersAndGroupsFound')}\n clearOnEscape\n renderInput={params => (\n <TextField\n data-testid=\"users-and-groups-text-field\"\n {...params}\n name=\"add-users-and-groups\"\n variant=\"outlined\"\n label={t('common.selectUsersAndGroups')}\n error={!!selectedMembersError}\n helperText={selectedMembersError ?? ''}\n required\n onKeyDown={event => {\n if (event.key === 'Backspace' && params.inputProps.value === '') {\n event.stopPropagation();\n }\n }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <>\n {search && (\n <IconButton\n size=\"small\"\n onClick={() => {\n setSearch('');\n }}\n aria-label={t('common.clearSearch')}\n >\n <HighlightOffIcon fontSize=\"small\" />\n </IconButton>\n )}\n {params.InputProps.endAdornment}\n </>\n ),\n }}\n />\n )}\n />\n <br />\n {membersData.error?.message && (\n <FormHelperText error={!!membersData.error}>\n {t('common.errorFetchingUserGroups' as any, {\n error: membersData.error.message,\n })}\n </FormHelperText>\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -3,19 +3,25 @@ import { Table } from '@backstage/core-components';
3
3
  import Box from '@mui/material/Box';
4
4
  import { getMembers } from '../../utils/rbac-utils.esm.js';
5
5
  import { selectedMembersColumns } from './AddedMembersTableColumn.esm.js';
6
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
6
7
 
7
8
  const AddedMembersTable = ({
8
9
  selectedMembers,
9
10
  setFieldValue
10
11
  }) => {
12
+ const { t } = useTranslation();
11
13
  return /* @__PURE__ */ jsx(
12
14
  Table,
13
15
  {
14
- title: selectedMembers.length > 0 ? `${getMembers(selectedMembers)}` : "No users and groups selected",
16
+ title: selectedMembers.length > 0 ? `${getMembers(selectedMembers, t)}` : t("common.noUsersAndGroupsSelected"),
15
17
  data: selectedMembers,
16
- columns: selectedMembersColumns(selectedMembers, setFieldValue),
17
- emptyContent: /* @__PURE__ */ jsx(Box, { sx: { display: "flex", justifyContent: "center", p: 2 }, children: "Selected users and groups appear here." }),
18
- options: { emptyRowsWhenPaging: false }
18
+ columns: selectedMembersColumns(selectedMembers, setFieldValue, t),
19
+ emptyContent: /* @__PURE__ */ jsx(Box, { sx: { display: "flex", justifyContent: "center", p: 2 }, children: t("common.selectedUsersAndGroupsAppearHere") }),
20
+ options: { emptyRowsWhenPaging: false },
21
+ localization: {
22
+ toolbar: { searchPlaceholder: t("table.searchPlaceholder") },
23
+ pagination: { labelRowsSelect: t("table.labelRowsSelect") }
24
+ }
19
25
  }
20
26
  );
21
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AddedMembersTable.esm.js","sources":["../../../src/components/CreateRole/AddedMembersTable.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 { Table } from '@backstage/core-components';\n\nimport Box from '@mui/material/Box';\nimport { FormikErrors } from 'formik';\n\nimport { getMembers } from '../../utils/rbac-utils';\nimport { selectedMembersColumns } from './AddedMembersTableColumn';\nimport { RoleFormValues, SelectedMember } from './types';\n\ntype AddedMembersTableProps = {\n selectedMembers: SelectedMember[];\n setFieldValue: (\n field: string,\n value: any,\n shouldValidate?: boolean,\n ) => Promise<FormikErrors<RoleFormValues>> | Promise<void>;\n};\n\nexport const AddedMembersTable = ({\n selectedMembers,\n setFieldValue,\n}: AddedMembersTableProps) => {\n return (\n <Table\n title={\n selectedMembers.length > 0\n ? `${getMembers(selectedMembers)}`\n : 'No users and groups selected'\n }\n data={selectedMembers}\n columns={selectedMembersColumns(selectedMembers, setFieldValue)}\n emptyContent={\n <Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>\n Selected users and groups appear here.\n </Box>\n }\n options={{ emptyRowsWhenPaging: false }}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;AAiCO,MAAM,oBAAoB,CAAC;AAAA,EAChC,eAAA;AAAA,EACA;AACF,CAA8B,KAAA;AAC5B,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EACE,gBAAgB,MAAS,GAAA,CAAA,GACrB,GAAG,UAAW,CAAA,eAAe,CAAC,CAC9B,CAAA,GAAA,8BAAA;AAAA,MAEN,IAAM,EAAA,eAAA;AAAA,MACN,OAAA,EAAS,sBAAuB,CAAA,eAAA,EAAiB,aAAa,CAAA;AAAA,MAC9D,YACE,kBAAA,GAAA,CAAC,GAAI,EAAA,EAAA,EAAA,EAAI,EAAE,OAAA,EAAS,MAAQ,EAAA,cAAA,EAAgB,QAAU,EAAA,CAAA,EAAG,CAAE,EAAA,EAAG,QAE9D,EAAA,wCAAA,EAAA,CAAA;AAAA,MAEF,OAAA,EAAS,EAAE,mBAAA,EAAqB,KAAM;AAAA;AAAA,GACxC;AAEJ;;;;"}
1
+ {"version":3,"file":"AddedMembersTable.esm.js","sources":["../../../src/components/CreateRole/AddedMembersTable.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 { Table } from '@backstage/core-components';\n\nimport Box from '@mui/material/Box';\nimport { FormikErrors } from 'formik';\n\nimport { getMembers } from '../../utils/rbac-utils';\nimport { selectedMembersColumns } from './AddedMembersTableColumn';\nimport { RoleFormValues, SelectedMember } from './types';\nimport { useTranslation } from '../../hooks/useTranslation';\n\ntype AddedMembersTableProps = {\n selectedMembers: SelectedMember[];\n setFieldValue: (\n field: string,\n value: any,\n shouldValidate?: boolean,\n ) => Promise<FormikErrors<RoleFormValues>> | Promise<void>;\n};\n\nexport const AddedMembersTable = ({\n selectedMembers,\n setFieldValue,\n}: AddedMembersTableProps) => {\n const { t } = useTranslation();\n\n return (\n <Table\n title={\n selectedMembers.length > 0\n ? `${getMembers(selectedMembers, t)}`\n : t('common.noUsersAndGroupsSelected')\n }\n data={selectedMembers}\n columns={selectedMembersColumns(selectedMembers, setFieldValue, t)}\n emptyContent={\n <Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>\n {t('common.selectedUsersAndGroupsAppearHere')}\n </Box>\n }\n options={{ emptyRowsWhenPaging: false }}\n localization={{\n toolbar: { searchPlaceholder: t('table.searchPlaceholder') },\n pagination: { labelRowsSelect: t('table.labelRowsSelect') },\n }}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;AAkCO,MAAM,oBAAoB,CAAC;AAAA,EAChC,eAAA;AAAA,EACA;AACF,CAA8B,KAAA;AAC5B,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAE7B,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EACE,eAAgB,CAAA,MAAA,GAAS,CACrB,GAAA,CAAA,EAAG,UAAW,CAAA,eAAA,EAAiB,CAAC,CAAC,CACjC,CAAA,GAAA,CAAA,CAAE,iCAAiC,CAAA;AAAA,MAEzC,IAAM,EAAA,eAAA;AAAA,MACN,OAAS,EAAA,sBAAA,CAAuB,eAAiB,EAAA,aAAA,EAAe,CAAC,CAAA;AAAA,MACjE,YACE,kBAAA,GAAA,CAAC,GAAI,EAAA,EAAA,EAAA,EAAI,EAAE,OAAS,EAAA,MAAA,EAAQ,cAAgB,EAAA,QAAA,EAAU,CAAG,EAAA,CAAA,EACtD,EAAA,QAAA,EAAA,CAAA,CAAE,yCAAyC,CAC9C,EAAA,CAAA;AAAA,MAEF,OAAA,EAAS,EAAE,mBAAA,EAAqB,KAAM,EAAA;AAAA,MACtC,YAAc,EAAA;AAAA,QACZ,OAAS,EAAA,EAAE,iBAAmB,EAAA,CAAA,CAAE,yBAAyB,CAAE,EAAA;AAAA,QAC3D,UAAY,EAAA,EAAE,eAAiB,EAAA,CAAA,CAAE,uBAAuB,CAAE;AAAA;AAC5D;AAAA,GACF;AAEJ;;;;"}