@backstage-community/plugin-rbac 1.35.0 → 1.37.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 (108) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/components/Administration.esm.js +2 -2
  3. package/dist/components/Administration.esm.js.map +1 -1
  4. package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js +5 -5
  5. package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js.map +1 -1
  6. package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js +5 -5
  7. package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js.map +1 -1
  8. package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js +7 -7
  9. package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js.map +1 -1
  10. package/dist/components/ConditionalAccess/ConditionRule.esm.js +2 -2
  11. package/dist/components/ConditionalAccess/ConditionRule.esm.js.map +1 -1
  12. package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js +9 -9
  13. package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js.map +1 -1
  14. package/dist/components/ConditionalAccess/ConditionsForm.esm.js +14 -14
  15. package/dist/components/ConditionalAccess/ConditionsForm.esm.js.map +1 -1
  16. package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js +27 -27
  17. package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js.map +1 -1
  18. package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js +6 -6
  19. package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js.map +1 -1
  20. package/dist/components/ConditionalAccess/CriteriaToggleButton.esm.js +2 -2
  21. package/dist/components/ConditionalAccess/CriteriaToggleButton.esm.js.map +1 -1
  22. package/dist/components/ConditionalAccess/CustomArrayField.esm.js +5 -5
  23. package/dist/components/ConditionalAccess/CustomArrayField.esm.js.map +1 -1
  24. package/dist/components/ConditionalAccess/RulesDropdownOption.esm.js +4 -4
  25. package/dist/components/ConditionalAccess/RulesDropdownOption.esm.js.map +1 -1
  26. package/dist/components/CreateRole/AddMembersForm.esm.js +13 -13
  27. package/dist/components/CreateRole/AddMembersForm.esm.js.map +1 -1
  28. package/dist/components/CreateRole/AddedMembersTable.esm.js +3 -3
  29. package/dist/components/CreateRole/AddedMembersTable.esm.js.map +1 -1
  30. package/dist/components/CreateRole/AddedMembersTableColumn.esm.js +4 -4
  31. package/dist/components/CreateRole/AddedMembersTableColumn.esm.js.map +1 -1
  32. package/dist/components/CreateRole/CancelDialog.esm.js +90 -0
  33. package/dist/components/CreateRole/CancelDialog.esm.js.map +1 -0
  34. package/dist/components/CreateRole/CreateRolePage.esm.js +6 -6
  35. package/dist/components/CreateRole/CreateRolePage.esm.js.map +1 -1
  36. package/dist/components/CreateRole/EditRolePage.esm.js +9 -5
  37. package/dist/components/CreateRole/EditRolePage.esm.js.map +1 -1
  38. package/dist/components/CreateRole/MembersDropdownOption.esm.js +4 -4
  39. package/dist/components/CreateRole/MembersDropdownOption.esm.js.map +1 -1
  40. package/dist/components/CreateRole/PermissionPoliciesForm.esm.js +98 -104
  41. package/dist/components/CreateRole/PermissionPoliciesForm.esm.js.map +1 -1
  42. package/dist/components/CreateRole/PermissionPoliciesFormNestedRow.esm.js +124 -0
  43. package/dist/components/CreateRole/PermissionPoliciesFormNestedRow.esm.js.map +1 -0
  44. package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js +104 -153
  45. package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js.map +1 -1
  46. package/dist/components/CreateRole/PermissionPoliciesFormTable.esm.js +174 -0
  47. package/dist/components/CreateRole/PermissionPoliciesFormTable.esm.js.map +1 -0
  48. package/dist/components/CreateRole/PluginsDropdown.esm.js +66 -0
  49. package/dist/components/CreateRole/PluginsDropdown.esm.js.map +1 -0
  50. package/dist/components/CreateRole/PluginsDropdownOption.esm.js +52 -0
  51. package/dist/components/CreateRole/PluginsDropdownOption.esm.js.map +1 -0
  52. package/dist/components/CreateRole/ReviewStep.esm.js +5 -5
  53. package/dist/components/CreateRole/ReviewStep.esm.js.map +1 -1
  54. package/dist/components/CreateRole/ReviewStepTable.esm.js +4 -4
  55. package/dist/components/CreateRole/ReviewStepTable.esm.js.map +1 -1
  56. package/dist/components/CreateRole/RoleDetailsForm.esm.js +4 -4
  57. package/dist/components/CreateRole/RoleDetailsForm.esm.js.map +1 -1
  58. package/dist/components/CreateRole/RoleForm.esm.js +30 -37
  59. package/dist/components/CreateRole/RoleForm.esm.js.map +1 -1
  60. package/dist/components/DownloadUserStatistics.esm.js +2 -2
  61. package/dist/components/DownloadUserStatistics.esm.js.map +1 -1
  62. package/dist/components/EditRole.esm.js +3 -3
  63. package/dist/components/EditRole.esm.js.map +1 -1
  64. package/dist/components/RbacPage.esm.js +3 -3
  65. package/dist/components/RbacPage.esm.js.map +1 -1
  66. package/dist/components/RoleOverview/AboutCard.esm.js +9 -9
  67. package/dist/components/RoleOverview/AboutCard.esm.js.map +1 -1
  68. package/dist/components/RoleOverview/MembersCard.esm.js +8 -8
  69. package/dist/components/RoleOverview/MembersCard.esm.js.map +1 -1
  70. package/dist/components/RoleOverview/MembersListColumns.esm.js +2 -2
  71. package/dist/components/RoleOverview/MembersListColumns.esm.js.map +1 -1
  72. package/dist/components/RoleOverview/PermissionsCard.esm.js +8 -8
  73. package/dist/components/RoleOverview/PermissionsCard.esm.js.map +1 -1
  74. package/dist/components/RoleOverview/RoleOverviewPage.esm.js +5 -5
  75. package/dist/components/RoleOverview/RoleOverviewPage.esm.js.map +1 -1
  76. package/dist/components/RolesList/DeleteRole.esm.js +3 -3
  77. package/dist/components/RolesList/DeleteRole.esm.js.map +1 -1
  78. package/dist/components/RolesList/DeleteRoleDialog.esm.js +15 -15
  79. package/dist/components/RolesList/DeleteRoleDialog.esm.js.map +1 -1
  80. package/dist/components/RolesList/RolesList.esm.js +9 -9
  81. package/dist/components/RolesList/RolesList.esm.js.map +1 -1
  82. package/dist/components/RolesList/RolesListColumns.esm.js +5 -5
  83. package/dist/components/RolesList/RolesListColumns.esm.js.map +1 -1
  84. package/dist/components/RolesList/RolesListToolbar.esm.js +5 -5
  85. package/dist/components/RolesList/RolesListToolbar.esm.js.map +1 -1
  86. package/dist/components/Router.esm.js +8 -8
  87. package/dist/components/Router.esm.js.map +1 -1
  88. package/dist/components/SnackbarAlert.esm.js +3 -3
  89. package/dist/components/SnackbarAlert.esm.js.map +1 -1
  90. package/dist/components/ToastContext.esm.js +4 -4
  91. package/dist/components/ToastContext.esm.js.map +1 -1
  92. package/dist/hooks/useMembers.esm.js +2 -2
  93. package/dist/hooks/useMembers.esm.js.map +1 -1
  94. package/dist/hooks/usePermissionPolicies.esm.js +9 -5
  95. package/dist/hooks/usePermissionPolicies.esm.js.map +1 -1
  96. package/dist/hooks/useRoles.esm.js +7 -9
  97. package/dist/hooks/useRoles.esm.js.map +1 -1
  98. package/dist/utils/create-role-utils.esm.js +14 -9
  99. package/dist/utils/create-role-utils.esm.js.map +1 -1
  100. package/dist/utils/rbac-utils.esm.js +21 -10
  101. package/dist/utils/rbac-utils.esm.js.map +1 -1
  102. package/dist/utils/role-form-utils.esm.js +17 -1
  103. package/dist/utils/role-form-utils.esm.js.map +1 -1
  104. package/package.json +1 -1
  105. package/dist/components/CreateRole/PoliciesCheckboxGroup.esm.js +0 -76
  106. package/dist/components/CreateRole/PoliciesCheckboxGroup.esm.js.map +0 -1
  107. package/dist/components/CreateRole/const.esm.js +0 -14
  108. package/dist/components/CreateRole/const.esm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteRoleDialog.esm.js","sources":["../../../src/components/RolesList/DeleteRoleDialog.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\n\nimport { RoleBasedPolicy } from '@backstage-community/plugin-rbac-common';\n\nimport { rbacApiRef } from '../../api/RBACBackendClient';\nimport { getMembers } from '../../utils/rbac-utils';\nimport {\n removeConditions,\n removePermissions,\n} from '../../utils/role-form-utils';\nimport { useToast } from '../ToastContext';\n\ntype DeleteRoleDialogProps = {\n open: boolean;\n closeDialog: () => void;\n roleName: string;\n propOptions: {\n memberRefs: string[];\n permissions: number;\n };\n};\n\nconst DeleteRoleDialog = ({\n open,\n closeDialog,\n roleName,\n propOptions,\n}: DeleteRoleDialogProps) => {\n const { setToastMessage } = useToast();\n const [deleteRoleValue, setDeleteRoleValue] = React.useState<string>();\n const [disableDelete, setDisableDelete] = React.useState(false);\n const [error, setError] = React.useState<string>('');\n\n const rbacApi = useApi(rbacApiRef);\n\n const dialogBackgroundColor = (theme: { palette: { mode: string } }) =>\n theme.palette.mode === 'dark' ? '#1b1d21' : '#fff';\n\n const deleteRole = async () => {\n try {\n const policies = await rbacApi.getAssociatedPolicies(roleName);\n const conditionalPolicies = await rbacApi.getRoleConditions(roleName);\n\n if (Array.isArray(policies)) {\n const allowedPolicies = policies.filter(\n (policy: RoleBasedPolicy) => policy.effect !== 'deny',\n );\n await removePermissions(roleName, allowedPolicies, rbacApi);\n }\n\n if (Array.isArray(conditionalPolicies)) {\n const conditionalPoliciesIds = conditionalPolicies.map(cp => cp.id);\n await removeConditions(conditionalPoliciesIds, rbacApi);\n }\n\n const response = await rbacApi.deleteRole(roleName);\n if (response.status === 200 || response.status === 204) {\n setToastMessage(`Role ${roleName} deleted successfully`);\n closeDialog();\n } else {\n setError(`Unable to delete the role. ${response.statusText}`);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : `${err}`);\n }\n };\n\n const onTextInput = (value: string) => {\n setDeleteRoleValue(value);\n if (value === '') {\n setDisableDelete(true);\n } else if (value === roleName) {\n setDisableDelete(false);\n } else {\n setDisableDelete(true);\n }\n };\n\n return (\n <Dialog maxWidth=\"md\" open={open} onClose={closeDialog}>\n <DialogTitle\n id=\"delete-role\"\n title=\"Delete Role\"\n sx={{\n marginBottom: '0 !important',\n backgroundColor: dialogBackgroundColor,\n }}\n >\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: theme => theme.spacing(1),\n }}\n >\n <Typography component=\"span\" sx={{ fontWeight: 'bold' }}>\n <ErrorIcon\n style={{\n color: 'red',\n alignContent: 'center',\n marginTop: '7px',\n marginRight: '5px',\n marginBottom: '-3px',\n }}\n fontSize=\"small\"\n />{' '}\n Delete this role?\n </Typography>\n\n <IconButton\n aria-label=\"close\"\n sx={{\n padding: '8px !important',\n color: theme => theme.palette.grey[500],\n borderRadius: '50%',\n '&:hover': { borderRadius: '50%' },\n }}\n onClick={closeDialog}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent sx={{ backgroundColor: dialogBackgroundColor }}>\n Are you sure you want to delete the role{' '}\n <Typography component=\"span\" sx={{ fontWeight: 'bold' }}>\n {roleName}\n </Typography>{' '}\n ?\n <br />\n <br />\n Deleting this role is irreversible and will remove its functionality\n from the system. Proceed with caution.\n <br />\n <br />\n The{' '}\n <Typography component=\"span\" sx={{ fontWeight: 'bold' }}>{`${getMembers(\n propOptions.memberRefs,\n ).toLocaleLowerCase('en-US')}`}</Typography>{' '}\n associated with this role will lose access to all the{' '}\n <Typography\n component=\"span\"\n sx={{ fontWeight: 'bold' }}\n >{`${propOptions.permissions} permission policies`}</Typography>{' '}\n specified in this role.\n <br />\n <TextField\n name=\"delete-role\"\n data-testid=\"delete-role\"\n sx={{\n marginTop: '24px',\n backgroundColor: `${dialogBackgroundColor} !important`,\n }}\n required\n variant=\"outlined\"\n label=\"Role name\"\n defaultValue={deleteRoleValue}\n helperText=\"Type the name of the role to confirm\"\n onChange={({ target: { value } }) => onTextInput(value)}\n onBlur={({ target: { value } }) => onTextInput(value)}\n />\n </DialogContent>\n {error && (\n <Box maxWidth=\"650px\" marginLeft=\"20px\">\n <Alert severity=\"error\">{error}</Alert>\n </Box>\n )}\n <DialogActions\n sx={{\n paddingLeft: '25px',\n paddingBottom: '30px',\n justifyContent: 'left',\n paddingTop: '16px',\n backgroundColor: dialogBackgroundColor,\n }}\n >\n <Button\n variant=\"contained\"\n style={\n disableDelete || !deleteRoleValue\n ? {}\n : { background: 'red', color: 'white' }\n }\n onClick={deleteRole}\n disabled={disableDelete || !deleteRoleValue}\n >\n Delete\n </Button>\n <Button variant=\"outlined\" onClick={closeDialog}>\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default DeleteRoleDialog;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DeleteRoleDialog.esm.js","sources":["../../../src/components/RolesList/DeleteRoleDialog.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\n\nimport { RoleBasedPolicy } from '@backstage-community/plugin-rbac-common';\n\nimport { rbacApiRef } from '../../api/RBACBackendClient';\nimport { getMembers } from '../../utils/rbac-utils';\nimport {\n removeConditions,\n removePermissions,\n} from '../../utils/role-form-utils';\nimport { useToast } from '../ToastContext';\n\ntype DeleteRoleDialogProps = {\n open: boolean;\n closeDialog: () => void;\n roleName: string;\n propOptions: {\n memberRefs: string[];\n permissions: number;\n };\n};\n\nconst DeleteRoleDialog = ({\n open,\n closeDialog,\n roleName,\n propOptions,\n}: DeleteRoleDialogProps) => {\n const { setToastMessage } = useToast();\n const [deleteRoleValue, setDeleteRoleValue] = React.useState<string>();\n const [disableDelete, setDisableDelete] = React.useState(false);\n const [error, setError] = React.useState<string>('');\n\n const rbacApi = useApi(rbacApiRef);\n\n const dialogBackgroundColor = (theme: { palette: { mode: string } }) =>\n theme.palette.mode === 'dark' ? '#1b1d21' : '#fff';\n\n const deleteRole = async () => {\n try {\n const policies = await rbacApi.getAssociatedPolicies(roleName);\n const conditionalPolicies = await rbacApi.getRoleConditions(roleName);\n\n if (Array.isArray(policies)) {\n const allowedPolicies = policies.filter(\n (policy: RoleBasedPolicy) => policy.effect !== 'deny',\n );\n await removePermissions(roleName, allowedPolicies, rbacApi);\n }\n\n if (Array.isArray(conditionalPolicies)) {\n const conditionalPoliciesIds = conditionalPolicies.map(cp => cp.id);\n await removeConditions(conditionalPoliciesIds, rbacApi);\n }\n\n const response = await rbacApi.deleteRole(roleName);\n if (response.status === 200 || response.status === 204) {\n setToastMessage(`Role ${roleName} deleted successfully`);\n closeDialog();\n } else {\n setError(`Unable to delete the role. ${response.statusText}`);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : `${err}`);\n }\n };\n\n const onTextInput = (value: string) => {\n setDeleteRoleValue(value);\n if (value === '') {\n setDisableDelete(true);\n } else if (value === roleName) {\n setDisableDelete(false);\n } else {\n setDisableDelete(true);\n }\n };\n\n return (\n <Dialog maxWidth=\"md\" open={open} onClose={closeDialog}>\n <DialogTitle\n id=\"delete-role\"\n title=\"Delete Role\"\n sx={{\n marginBottom: '0 !important',\n backgroundColor: dialogBackgroundColor,\n }}\n >\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: theme => theme.spacing(1),\n }}\n >\n <Typography component=\"span\" sx={{ fontWeight: 'bold' }}>\n <ErrorIcon\n style={{\n color: 'red',\n alignContent: 'center',\n marginTop: '7px',\n marginRight: '5px',\n marginBottom: '-3px',\n }}\n fontSize=\"small\"\n />{' '}\n Delete this role?\n </Typography>\n\n <IconButton\n aria-label=\"close\"\n sx={{\n padding: '8px !important',\n color: theme => theme.palette.grey[500],\n borderRadius: '50%',\n '&:hover': { borderRadius: '50%' },\n }}\n onClick={closeDialog}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent sx={{ backgroundColor: dialogBackgroundColor }}>\n Are you sure you want to delete the role{' '}\n <Typography component=\"span\" sx={{ fontWeight: 'bold' }}>\n {roleName}\n </Typography>{' '}\n ?\n <br />\n <br />\n Deleting this role is irreversible and will remove its functionality\n from the system. Proceed with caution.\n <br />\n <br />\n The{' '}\n <Typography component=\"span\" sx={{ fontWeight: 'bold' }}>{`${getMembers(\n propOptions.memberRefs,\n ).toLocaleLowerCase('en-US')}`}</Typography>{' '}\n associated with this role will lose access to all the{' '}\n <Typography\n component=\"span\"\n sx={{ fontWeight: 'bold' }}\n >{`${propOptions.permissions} permission policies`}</Typography>{' '}\n specified in this role.\n <br />\n <TextField\n name=\"delete-role\"\n data-testid=\"delete-role\"\n sx={{\n marginTop: '24px',\n backgroundColor: `${dialogBackgroundColor} !important`,\n }}\n required\n variant=\"outlined\"\n label=\"Role name\"\n defaultValue={deleteRoleValue}\n helperText=\"Type the name of the role to confirm\"\n onChange={({ target: { value } }) => onTextInput(value)}\n onBlur={({ target: { value } }) => onTextInput(value)}\n />\n </DialogContent>\n {error && (\n <Box maxWidth=\"650px\" marginLeft=\"20px\">\n <Alert severity=\"error\">{error}</Alert>\n </Box>\n )}\n <DialogActions\n sx={{\n paddingLeft: '25px',\n paddingBottom: '30px',\n justifyContent: 'left',\n paddingTop: '16px',\n backgroundColor: dialogBackgroundColor,\n }}\n >\n <Button\n variant=\"contained\"\n style={\n disableDelete || !deleteRoleValue\n ? {}\n : { background: 'red', color: 'white' }\n }\n onClick={deleteRole}\n disabled={disableDelete || !deleteRoleValue}\n >\n Delete\n </Button>\n <Button variant=\"outlined\" onClick={closeDialog}>\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default DeleteRoleDialog;\n"],"names":["React"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React__default from 'react';
2
2
  import { Progress, WarningPanel, Table } from '@backstage/core-components';
3
3
  import { useDeleteDialog } from '@janus-idp/shared-react';
4
4
  import Box from '@mui/material/Box';
@@ -17,7 +17,7 @@ const RolesList = () => {
17
17
  const { toastMessage, setToastMessage } = useToast();
18
18
  const { openDialog, setOpenDialog, deleteComponent } = useDeleteDialog();
19
19
  useLocationToast(setToastMessage);
20
- const [searchText, setSearchText] = React.useState();
20
+ const [searchText, setSearchText] = React__default.useState();
21
21
  const { loading, data, retry, createRoleAllowed, createRoleLoading, error } = useRoles();
22
22
  const closeDialog = () => {
23
23
  setOpenDialog(false);
@@ -27,7 +27,7 @@ const RolesList = () => {
27
27
  const onAlertClose = () => {
28
28
  setToastMessage("");
29
29
  };
30
- const filteredRoles = React.useMemo(
30
+ const filteredRoles = React__default.useMemo(
31
31
  () => filterTableData({ data, columns, searchText }),
32
32
  [data, searchText]
33
33
  );
@@ -52,22 +52,22 @@ const RolesList = () => {
52
52
  const errorWarning = getErrorWarning();
53
53
  const isLicensePluginEnabled = useCheckIfLicensePluginEnabled();
54
54
  if (isLicensePluginEnabled.loading) {
55
- return /* @__PURE__ */ React.createElement(Progress, null);
55
+ return /* @__PURE__ */ React__default.createElement(Progress, null);
56
56
  }
57
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(SnackbarAlert, { toastMessage, onAlertClose }), /* @__PURE__ */ React.createElement(
57
+ return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(SnackbarAlert, { toastMessage, onAlertClose }), /* @__PURE__ */ React__default.createElement(
58
58
  RolesListToolbar,
59
59
  {
60
60
  createRoleAllowed,
61
61
  createRoleLoading
62
62
  }
63
- ), errorWarning.message && /* @__PURE__ */ React.createElement("div", { style: { paddingBottom: "16px" } }, /* @__PURE__ */ React.createElement(
63
+ ), errorWarning.message && /* @__PURE__ */ React__default.createElement("div", { style: { paddingBottom: "16px" } }, /* @__PURE__ */ React__default.createElement(
64
64
  WarningPanel,
65
65
  {
66
66
  message: errorWarning.message,
67
67
  title: errorWarning.title,
68
68
  severity: "error"
69
69
  }
70
- )), /* @__PURE__ */ React.createElement(
70
+ )), /* @__PURE__ */ React__default.createElement(
71
71
  Table,
72
72
  {
73
73
  title: !loading && data?.length ? `All roles (${filteredRoles.length})` : `All roles`,
@@ -75,7 +75,7 @@ const RolesList = () => {
75
75
  data,
76
76
  isLoading: loading,
77
77
  columns,
78
- emptyContent: /* @__PURE__ */ React.createElement(
78
+ emptyContent: /* @__PURE__ */ React__default.createElement(
79
79
  Box,
80
80
  {
81
81
  "data-testid": "roles-table-empty",
@@ -85,7 +85,7 @@ const RolesList = () => {
85
85
  ),
86
86
  onSearchChange: setSearchText
87
87
  }
88
- ), isLicensePluginEnabled.isEnabled && /* @__PURE__ */ React.createElement(DownloadCSVLink, null), openDialog && /* @__PURE__ */ React.createElement(
88
+ ), isLicensePluginEnabled.isEnabled && /* @__PURE__ */ React__default.createElement(DownloadCSVLink, null), openDialog && /* @__PURE__ */ React__default.createElement(
89
89
  DeleteRoleDialog,
90
90
  {
91
91
  open: openDialog,
@@ -1 +1 @@
1
- {"version":3,"file":"RolesList.esm.js","sources":["../../../src/components/RolesList/RolesList.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { Progress, Table, WarningPanel } from '@backstage/core-components';\n\nimport { useDeleteDialog } from '@janus-idp/shared-react';\nimport Box from '@mui/material/Box';\n\nimport { useCheckIfLicensePluginEnabled } from '../../hooks/useCheckIfLicensePluginEnabled';\nimport { useLocationToast } from '../../hooks/useLocationToast';\nimport { useRoles } from '../../hooks/useRoles';\nimport { filterTableData } from '../../utils/filter-table-data';\nimport DownloadCSVLink from '../DownloadUserStatistics';\nimport { SnackbarAlert } from '../SnackbarAlert';\nimport { useToast } from '../ToastContext';\nimport DeleteRoleDialog from './DeleteRoleDialog';\nimport { columns } from './RolesListColumns';\nimport { RolesListToolbar } from './RolesListToolbar';\n\nexport const RolesList = () => {\n const { toastMessage, setToastMessage } = useToast();\n const { openDialog, setOpenDialog, deleteComponent } = useDeleteDialog();\n useLocationToast(setToastMessage);\n const [searchText, setSearchText] = React.useState<string>();\n const { loading, data, retry, createRoleAllowed, createRoleLoading, error } =\n useRoles();\n\n const closeDialog = () => {\n setOpenDialog(false);\n retry.roleRetry();\n retry.policiesRetry();\n };\n\n const onAlertClose = () => {\n setToastMessage('');\n };\n const filteredRoles = React.useMemo(\n () => filterTableData({ data, columns, searchText }),\n [data, searchText],\n );\n\n const getErrorWarning = () => {\n const errorTitleBase = 'Something went wrong while fetching the';\n const errorWarningArr = [\n { message: error?.rolesError, title: `${errorTitleBase} roles` },\n {\n message: error?.policiesError,\n title: `${errorTitleBase} permission policies`,\n },\n {\n message: error?.roleConditionError,\n title: `${errorTitleBase} role conditions`,\n },\n ];\n\n return (\n errorWarningArr.find(({ message }) => message) || {\n message: '',\n title: '',\n }\n );\n };\n\n const errorWarning = getErrorWarning();\n\n const isLicensePluginEnabled = useCheckIfLicensePluginEnabled();\n if (isLicensePluginEnabled.loading) {\n return <Progress />;\n }\n\n return (\n <>\n <SnackbarAlert toastMessage={toastMessage} onAlertClose={onAlertClose} />\n <RolesListToolbar\n createRoleAllowed={createRoleAllowed}\n createRoleLoading={createRoleLoading}\n />\n {errorWarning.message && (\n <div style={{ paddingBottom: '16px' }}>\n <WarningPanel\n message={errorWarning.message}\n title={errorWarning.title}\n severity=\"error\"\n />\n </div>\n )}\n <Table\n title={\n !loading && data?.length\n ? `All roles (${filteredRoles.length})`\n : `All roles`\n }\n options={{ padding: 'default', search: true, paging: true }}\n data={data}\n isLoading={loading}\n columns={columns}\n emptyContent={\n <Box\n data-testid=\"roles-table-empty\"\n sx={{ display: 'flex', justifyContent: 'center', p: 2 }}\n >\n No records found\n </Box>\n }\n onSearchChange={setSearchText}\n />\n {isLicensePluginEnabled.isEnabled && <DownloadCSVLink />}\n {openDialog && (\n <DeleteRoleDialog\n open={openDialog}\n closeDialog={closeDialog}\n roleName={deleteComponent.roleName}\n propOptions={{\n memberRefs:\n data.find(d => d.name === deleteComponent.roleName)?.members ||\n [],\n permissions:\n data.find(d => d.name === deleteComponent.roleName)\n ?.permissions || 0,\n }}\n />\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RolesList.esm.js","sources":["../../../src/components/RolesList/RolesList.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { Progress, Table, WarningPanel } from '@backstage/core-components';\n\nimport { useDeleteDialog } from '@janus-idp/shared-react';\nimport Box from '@mui/material/Box';\n\nimport { useCheckIfLicensePluginEnabled } from '../../hooks/useCheckIfLicensePluginEnabled';\nimport { useLocationToast } from '../../hooks/useLocationToast';\nimport { useRoles } from '../../hooks/useRoles';\nimport { filterTableData } from '../../utils/filter-table-data';\nimport DownloadCSVLink from '../DownloadUserStatistics';\nimport { SnackbarAlert } from '../SnackbarAlert';\nimport { useToast } from '../ToastContext';\nimport DeleteRoleDialog from './DeleteRoleDialog';\nimport { columns } from './RolesListColumns';\nimport { RolesListToolbar } from './RolesListToolbar';\n\nexport const RolesList = () => {\n const { toastMessage, setToastMessage } = useToast();\n const { openDialog, setOpenDialog, deleteComponent } = useDeleteDialog();\n useLocationToast(setToastMessage);\n const [searchText, setSearchText] = React.useState<string>();\n const { loading, data, retry, createRoleAllowed, createRoleLoading, error } =\n useRoles();\n\n const closeDialog = () => {\n setOpenDialog(false);\n retry.roleRetry();\n retry.policiesRetry();\n };\n\n const onAlertClose = () => {\n setToastMessage('');\n };\n const filteredRoles = React.useMemo(\n () => filterTableData({ data, columns, searchText }),\n [data, searchText],\n );\n\n const getErrorWarning = () => {\n const errorTitleBase = 'Something went wrong while fetching the';\n const errorWarningArr = [\n { message: error?.rolesError, title: `${errorTitleBase} roles` },\n {\n message: error?.policiesError,\n title: `${errorTitleBase} permission policies`,\n },\n {\n message: error?.roleConditionError,\n title: `${errorTitleBase} role conditions`,\n },\n ];\n\n return (\n errorWarningArr.find(({ message }) => message) || {\n message: '',\n title: '',\n }\n );\n };\n\n const errorWarning = getErrorWarning();\n\n const isLicensePluginEnabled = useCheckIfLicensePluginEnabled();\n if (isLicensePluginEnabled.loading) {\n return <Progress />;\n }\n\n return (\n <>\n <SnackbarAlert toastMessage={toastMessage} onAlertClose={onAlertClose} />\n <RolesListToolbar\n createRoleAllowed={createRoleAllowed}\n createRoleLoading={createRoleLoading}\n />\n {errorWarning.message && (\n <div style={{ paddingBottom: '16px' }}>\n <WarningPanel\n message={errorWarning.message}\n title={errorWarning.title}\n severity=\"error\"\n />\n </div>\n )}\n <Table\n title={\n !loading && data?.length\n ? `All roles (${filteredRoles.length})`\n : `All roles`\n }\n options={{ padding: 'default', search: true, paging: true }}\n data={data}\n isLoading={loading}\n columns={columns}\n emptyContent={\n <Box\n data-testid=\"roles-table-empty\"\n sx={{ display: 'flex', justifyContent: 'center', p: 2 }}\n >\n No records found\n </Box>\n }\n onSearchChange={setSearchText}\n />\n {isLicensePluginEnabled.isEnabled && <DownloadCSVLink />}\n {openDialog && (\n <DeleteRoleDialog\n open={openDialog}\n closeDialog={closeDialog}\n roleName={deleteComponent.roleName}\n propOptions={{\n memberRefs:\n data.find(d => d.name === deleteComponent.roleName)?.members ||\n [],\n permissions:\n data.find(d => d.name === deleteComponent.roleName)\n ?.permissions || 0,\n }}\n />\n )}\n </>\n );\n};\n"],"names":["React"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React__default from 'react';
2
2
  import { parseEntityRef } from '@backstage/catalog-model';
3
3
  import { Link } from '@backstage/core-components';
4
4
  import Tooltip from '@mui/material/Tooltip';
@@ -14,7 +14,7 @@ const columns = [
14
14
  type: "string",
15
15
  render: (props) => {
16
16
  const { kind, namespace, name } = parseEntityRef(props.name);
17
- return /* @__PURE__ */ React.createElement(Link, { to: `roles/${kind}/${namespace}/${name}` }, props.name);
17
+ return /* @__PURE__ */ React__default.createElement(Link, { to: `roles/${kind}/${namespace}/${name}` }, props.name);
18
18
  }
19
19
  },
20
20
  {
@@ -47,13 +47,13 @@ const columns = [
47
47
  );
48
48
  const plsTooltip = pls.join(", ");
49
49
  const plsOverflowCount = pls.length > 2 ? `+ ${pls.length - 2}` : "";
50
- return pls.length > 0 ? /* @__PURE__ */ React.createElement(Tooltip, { title: plsTooltip || "", placement: "top-start" }, /* @__PURE__ */ React.createElement(Typography, null, pls.length === 1 ? `${pls[0]}` : `${pls[0]}, ${pls[1]} ${plsOverflowCount}`)) : "-";
50
+ return pls.length > 0 ? /* @__PURE__ */ React__default.createElement(Tooltip, { title: plsTooltip || "", placement: "top-start" }, /* @__PURE__ */ React__default.createElement(Typography, null, pls.length === 1 ? `${pls[0]}` : `${pls[0]}, ${pls[1]} ${plsOverflowCount}`)) : "-";
51
51
  }
52
52
  },
53
53
  {
54
54
  title: "Actions",
55
55
  sorting: false,
56
- render: (props) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
56
+ render: (props) => /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(
57
57
  EditRole,
58
58
  {
59
59
  dataTestId: !props.actionsPermissionResults.edit.allowed ? `disable-update-role-${props.name}` : `update-role-${props.name}`,
@@ -61,7 +61,7 @@ const columns = [
61
61
  disable: !props.actionsPermissionResults.edit.allowed,
62
62
  tooltip: !props.actionsPermissionResults.edit.allowed ? "Unauthorized to edit" : ""
63
63
  }
64
- ), /* @__PURE__ */ React.createElement(
64
+ ), /* @__PURE__ */ React__default.createElement(
65
65
  DeleteRole,
66
66
  {
67
67
  dataTestId: !props.actionsPermissionResults.delete.allowed ? `disable-delete-role-${props.name}` : `delete-role-${props.name}`,
@@ -1 +1 @@
1
- {"version":3,"file":"RolesListColumns.esm.js","sources":["../../../src/components/RolesList/RolesListColumns.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { Link, TableColumn } from '@backstage/core-components';\n\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\n\nimport { RolesData } from '../../types';\nimport { getMembers } from '../../utils/rbac-utils';\nimport EditRole from '../EditRole';\nimport DeleteRole from './DeleteRole';\n\nexport const columns: TableColumn<RolesData>[] = [\n {\n title: 'Name',\n field: 'name',\n type: 'string',\n render: (props: RolesData) => {\n const { kind, namespace, name } = parseEntityRef(props.name);\n return (\n <Link to={`roles/${kind}/${namespace}/${name}`}>{props.name}</Link>\n );\n },\n },\n {\n title: 'Users and groups',\n field: 'members',\n type: 'string',\n align: 'left',\n render: props => getMembers(props.members),\n customSort: (a, b) => {\n if (a.members.length === 0) {\n return -1;\n }\n if (b.members.length === 0) {\n return 1;\n }\n if (a.members.length === b.members.length) {\n return 0;\n }\n return a.members.length < b.members.length ? -1 : 1;\n },\n },\n {\n title: 'Accessible plugins',\n field: 'accessiblePlugins',\n type: 'string',\n align: 'left',\n render: (props: RolesData) => {\n const pls = props.accessiblePlugins.map(\n p => p[0].toLocaleUpperCase('en-US') + p.slice(1),\n );\n const plsTooltip = pls.join(', ');\n const plsOverflowCount = pls.length > 2 ? `+ ${pls.length - 2}` : '';\n\n return pls.length > 0 ? (\n <Tooltip title={plsTooltip || ''} placement=\"top-start\">\n <Typography>\n {pls.length === 1\n ? `${pls[0]}`\n : `${pls[0]}, ${pls[1]} ${plsOverflowCount}`}\n </Typography>\n </Tooltip>\n ) : (\n '-'\n );\n },\n },\n {\n title: 'Actions',\n sorting: false,\n render: (props: RolesData) => (\n <>\n <EditRole\n dataTestId={\n !props.actionsPermissionResults.edit.allowed\n ? `disable-update-role-${props.name}`\n : `update-role-${props.name}`\n }\n roleName={props.name}\n disable={!props.actionsPermissionResults.edit.allowed}\n tooltip={\n !props.actionsPermissionResults.edit.allowed\n ? 'Unauthorized to edit'\n : ''\n }\n />\n <DeleteRole\n dataTestId={\n !props.actionsPermissionResults.delete.allowed\n ? `disable-delete-role-${props.name}`\n : `delete-role-${props.name}`\n }\n roleName={props.name}\n disable={!props.actionsPermissionResults.delete.allowed}\n tooltip={\n !props.actionsPermissionResults.delete.allowed\n ? 'Role cannot be deleted'\n : ''\n }\n />\n </>\n ),\n },\n];\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RolesListColumns.esm.js","sources":["../../../src/components/RolesList/RolesListColumns.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { Link, TableColumn } from '@backstage/core-components';\n\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\n\nimport { RolesData } from '../../types';\nimport { getMembers } from '../../utils/rbac-utils';\nimport EditRole from '../EditRole';\nimport DeleteRole from './DeleteRole';\n\nexport const columns: TableColumn<RolesData>[] = [\n {\n title: 'Name',\n field: 'name',\n type: 'string',\n render: (props: RolesData) => {\n const { kind, namespace, name } = parseEntityRef(props.name);\n return (\n <Link to={`roles/${kind}/${namespace}/${name}`}>{props.name}</Link>\n );\n },\n },\n {\n title: 'Users and groups',\n field: 'members',\n type: 'string',\n align: 'left',\n render: props => getMembers(props.members),\n customSort: (a, b) => {\n if (a.members.length === 0) {\n return -1;\n }\n if (b.members.length === 0) {\n return 1;\n }\n if (a.members.length === b.members.length) {\n return 0;\n }\n return a.members.length < b.members.length ? -1 : 1;\n },\n },\n {\n title: 'Accessible plugins',\n field: 'accessiblePlugins',\n type: 'string',\n align: 'left',\n render: (props: RolesData) => {\n const pls = props.accessiblePlugins.map(\n p => p[0].toLocaleUpperCase('en-US') + p.slice(1),\n );\n const plsTooltip = pls.join(', ');\n const plsOverflowCount = pls.length > 2 ? `+ ${pls.length - 2}` : '';\n\n return pls.length > 0 ? (\n <Tooltip title={plsTooltip || ''} placement=\"top-start\">\n <Typography>\n {pls.length === 1\n ? `${pls[0]}`\n : `${pls[0]}, ${pls[1]} ${plsOverflowCount}`}\n </Typography>\n </Tooltip>\n ) : (\n '-'\n );\n },\n },\n {\n title: 'Actions',\n sorting: false,\n render: (props: RolesData) => (\n <>\n <EditRole\n dataTestId={\n !props.actionsPermissionResults.edit.allowed\n ? `disable-update-role-${props.name}`\n : `update-role-${props.name}`\n }\n roleName={props.name}\n disable={!props.actionsPermissionResults.edit.allowed}\n tooltip={\n !props.actionsPermissionResults.edit.allowed\n ? 'Unauthorized to edit'\n : ''\n }\n />\n <DeleteRole\n dataTestId={\n !props.actionsPermissionResults.delete.allowed\n ? `disable-delete-role-${props.name}`\n : `delete-role-${props.name}`\n }\n roleName={props.name}\n disable={!props.actionsPermissionResults.delete.allowed}\n tooltip={\n !props.actionsPermissionResults.delete.allowed\n ? 'Role cannot be deleted'\n : ''\n }\n />\n </>\n ),\n },\n];\n"],"names":["React"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React__default from 'react';
2
2
  import { Link, LinkButton } from '@backstage/core-components';
3
3
  import Alert from '@mui/material/Alert';
4
4
  import AlertTitle from '@mui/material/AlertTitle';
@@ -8,7 +8,7 @@ const RolesListToolbar = ({
8
8
  createRoleAllowed,
9
9
  createRoleLoading
10
10
  }) => {
11
- return /* @__PURE__ */ React.createElement("div", null, !createRoleLoading && !createRoleAllowed && /* @__PURE__ */ React.createElement(Alert, { severity: "warning", "data-testid": "create-role-warning" }, /* @__PURE__ */ React.createElement(
11
+ return /* @__PURE__ */ React__default.createElement("div", null, !createRoleLoading && !createRoleAllowed && /* @__PURE__ */ React__default.createElement(Alert, { severity: "warning", "data-testid": "create-role-warning" }, /* @__PURE__ */ React__default.createElement(
12
12
  AlertTitle,
13
13
  {
14
14
  sx: {
@@ -16,14 +16,14 @@ const RolesListToolbar = ({
16
16
  }
17
17
  },
18
18
  "Unable to create role."
19
- ), "To enable create/edit role button, make sure required users/groups are available in catalog as a role cannot be created without users/groups and also the role associated with your user should have the permission policies mentioned", " ", /* @__PURE__ */ React.createElement(
19
+ ), "To enable create/edit role button, make sure required users/groups are available in catalog as a role cannot be created without users/groups and also the role associated with your user should have the permission policies mentioned", " ", /* @__PURE__ */ React__default.createElement(
20
20
  Link,
21
21
  {
22
22
  to: "https://github.com/backstage/community-plugins/tree/main/workspaces/rbac/plugins/rbac#prerequisites",
23
23
  target: "_blank"
24
24
  },
25
25
  "here"
26
- ), /* @__PURE__ */ React.createElement(Typography, { sx: { mt: 1 }, fontSize: "small" }, /* @__PURE__ */ React.createElement(Typography, { component: "span", fontWeight: "bold", fontSize: "small" }, "Note"), ": Even after ingesting users/groups in catalog and applying above permissions if the create/edit button is still disabled then please contact your administrator as you might be conditionally restricted from accessing the create/edit button.")), /* @__PURE__ */ React.createElement("br", null), /* @__PURE__ */ React.createElement(
26
+ ), /* @__PURE__ */ React__default.createElement(Typography, { sx: { mt: 1 }, fontSize: "small" }, /* @__PURE__ */ React__default.createElement(Typography, { component: "span", fontWeight: "bold", fontSize: "small" }, "Note"), ": Even after ingesting users/groups in catalog and applying above permissions if the create/edit button is still disabled then please contact your administrator as you might be conditionally restricted from accessing the create/edit button.")), /* @__PURE__ */ React__default.createElement("br", null), /* @__PURE__ */ React__default.createElement(
27
27
  Typography,
28
28
  {
29
29
  component: "span",
@@ -33,7 +33,7 @@ const RolesListToolbar = ({
33
33
  marginBottom: "24px !important"
34
34
  }
35
35
  },
36
- /* @__PURE__ */ React.createElement(
36
+ /* @__PURE__ */ React__default.createElement(
37
37
  LinkButton,
38
38
  {
39
39
  to: "role/new",
@@ -1 +1 @@
1
- {"version":3,"file":"RolesListToolbar.esm.js","sources":["../../../src/components/RolesList/RolesListToolbar.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { Link, LinkButton } from '@backstage/core-components';\n\nimport Alert from '@mui/material/Alert';\nimport AlertTitle from '@mui/material/AlertTitle';\nimport Typography from '@mui/material/Typography';\n\nexport const RolesListToolbar = ({\n createRoleAllowed,\n createRoleLoading,\n}: {\n createRoleAllowed: boolean;\n createRoleLoading: boolean;\n}) => {\n return (\n <div>\n {!createRoleLoading && !createRoleAllowed && (\n <Alert severity=\"warning\" data-testid=\"create-role-warning\">\n <AlertTitle\n sx={{\n fontWeight: 'bold',\n }}\n >\n Unable to create role.\n </AlertTitle>\n To enable create/edit role button, make sure required users/groups are\n available in catalog as a role cannot be created without users/groups\n and also the role associated with your user should have the permission\n policies mentioned{' '}\n <Link\n to=\"https://github.com/backstage/community-plugins/tree/main/workspaces/rbac/plugins/rbac#prerequisites\"\n target=\"_blank\"\n >\n here\n </Link>\n <Typography sx={{ mt: 1 }} fontSize=\"small\">\n <Typography component=\"span\" fontWeight=\"bold\" fontSize=\"small\">\n Note\n </Typography>\n : Even after ingesting users/groups in catalog and applying above\n permissions if the create/edit button is still disabled then please\n contact your administrator as you might be conditionally restricted\n from accessing the create/edit button.\n </Typography>\n </Alert>\n )}\n <br />\n <Typography\n component=\"span\"\n sx={{\n display: 'flex',\n justifyContent: 'end',\n marginBottom: '24px !important',\n }}\n >\n <LinkButton\n to=\"role/new\"\n color=\"primary\"\n variant=\"contained\"\n disabled={!createRoleAllowed}\n data-testid=\"create-role\"\n >\n Create\n </LinkButton>\n </Typography>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;AAuBO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,iBAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,KACE,EAAA,IAAA,EAAA,CAAC,iBAAqB,IAAA,CAAC,iBACtB,oBAAA,KAAA,CAAA,aAAA,CAAC,KAAM,EAAA,EAAA,QAAA,EAAS,SAAU,EAAA,aAAA,EAAY,qBACpC,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,EAAI,EAAA;AAAA,QACF,UAAY,EAAA;AAAA;AACd,KAAA;AAAA,IACD;AAAA,GAED,EAAa,0OAIM,GACnB,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,EAAG,EAAA,qGAAA;AAAA,MACH,MAAO,EAAA;AAAA,KAAA;AAAA,IACR;AAAA,GAED,kBACC,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,EAAI,EAAA,EAAE,IAAI,CAAE,EAAA,EAAG,QAAS,EAAA,OAAA,EAAA,kBACjC,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,WAAU,MAAO,EAAA,UAAA,EAAW,MAAO,EAAA,QAAA,EAAS,OAAQ,EAAA,EAAA,MAEhE,CAAa,EAAA,kPAKf,CACF,CAAA,kBAED,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAG,CACJ,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,MAAA;AAAA,MACV,EAAI,EAAA;AAAA,QACF,OAAS,EAAA,MAAA;AAAA,QACT,cAAgB,EAAA,KAAA;AAAA,QAChB,YAAc,EAAA;AAAA;AAChB,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,EAAG,EAAA,UAAA;AAAA,QACH,KAAM,EAAA,SAAA;AAAA,QACN,OAAQ,EAAA,WAAA;AAAA,QACR,UAAU,CAAC,iBAAA;AAAA,QACX,aAAY,EAAA;AAAA,OAAA;AAAA,MACb;AAAA;AAED,GAEJ,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RolesListToolbar.esm.js","sources":["../../../src/components/RolesList/RolesListToolbar.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { Link, LinkButton } from '@backstage/core-components';\n\nimport Alert from '@mui/material/Alert';\nimport AlertTitle from '@mui/material/AlertTitle';\nimport Typography from '@mui/material/Typography';\n\nexport const RolesListToolbar = ({\n createRoleAllowed,\n createRoleLoading,\n}: {\n createRoleAllowed: boolean;\n createRoleLoading: boolean;\n}) => {\n return (\n <div>\n {!createRoleLoading && !createRoleAllowed && (\n <Alert severity=\"warning\" data-testid=\"create-role-warning\">\n <AlertTitle\n sx={{\n fontWeight: 'bold',\n }}\n >\n Unable to create role.\n </AlertTitle>\n To enable create/edit role button, make sure required users/groups are\n available in catalog as a role cannot be created without users/groups\n and also the role associated with your user should have the permission\n policies mentioned{' '}\n <Link\n to=\"https://github.com/backstage/community-plugins/tree/main/workspaces/rbac/plugins/rbac#prerequisites\"\n target=\"_blank\"\n >\n here\n </Link>\n <Typography sx={{ mt: 1 }} fontSize=\"small\">\n <Typography component=\"span\" fontWeight=\"bold\" fontSize=\"small\">\n Note\n </Typography>\n : Even after ingesting users/groups in catalog and applying above\n permissions if the create/edit button is still disabled then please\n contact your administrator as you might be conditionally restricted\n from accessing the create/edit button.\n </Typography>\n </Alert>\n )}\n <br />\n <Typography\n component=\"span\"\n sx={{\n display: 'flex',\n justifyContent: 'end',\n marginBottom: '24px !important',\n }}\n >\n <LinkButton\n to=\"role/new\"\n color=\"primary\"\n variant=\"contained\"\n disabled={!createRoleAllowed}\n data-testid=\"create-role\"\n >\n Create\n </LinkButton>\n </Typography>\n </div>\n );\n};\n"],"names":["React"],"mappings":";;;;;;AAuBO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,iBAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,KACE,EAAA,IAAA,EAAA,CAAC,iBAAqB,IAAA,CAAC,iBACtB,oBAAAA,cAAA,CAAA,aAAA,CAAC,KAAM,EAAA,EAAA,QAAA,EAAS,SAAU,EAAA,aAAA,EAAY,qBACpC,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,EAAI,EAAA;AAAA,QACF,UAAY,EAAA;AAAA;AACd,KAAA;AAAA,IACD;AAAA,GAED,EAAa,0OAIM,GACnB,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,EAAG,EAAA,qGAAA;AAAA,MACH,MAAO,EAAA;AAAA,KAAA;AAAA,IACR;AAAA,GAED,kBACCA,cAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,EAAI,EAAA,EAAE,IAAI,CAAE,EAAA,EAAG,QAAS,EAAA,OAAA,EAAA,kBACjCA,cAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,WAAU,MAAO,EAAA,UAAA,EAAW,MAAO,EAAA,QAAA,EAAS,OAAQ,EAAA,EAAA,MAEhE,CAAa,EAAA,kPAKf,CACF,CAAA,kBAEDA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAG,CACJ,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,MAAA;AAAA,MACV,EAAI,EAAA;AAAA,QACF,OAAS,EAAA,MAAA;AAAA,QACT,cAAgB,EAAA,KAAA;AAAA,QAChB,YAAc,EAAA;AAAA;AAChB,KAAA;AAAA,oBAEAA,cAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,EAAG,EAAA,UAAA;AAAA,QACH,KAAM,EAAA,SAAA;AAAA,QACN,OAAQ,EAAA,WAAA;AAAA,QACR,UAAU,CAAC,iBAAA;AAAA,QACX,aAAY,EAAA;AAAA,OAAA;AAAA,MACb;AAAA;AAED,GAEJ,CAAA;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React__default from 'react';
2
2
  import { Routes, Route } from 'react-router-dom';
3
3
  import { ErrorPage } from '@backstage/core-components';
4
4
  import { useApi, configApiRef } from '@backstage/core-plugin-api';
@@ -15,7 +15,7 @@ const Router = ({ useHeader = true }) => {
15
15
  const config = useApi(configApiRef);
16
16
  const isRBACPluginEnabled = config.getOptionalBoolean("permission.enabled");
17
17
  if (!isRBACPluginEnabled) {
18
- return /* @__PURE__ */ React.createElement(
18
+ return /* @__PURE__ */ React__default.createElement(
19
19
  ErrorPage,
20
20
  {
21
21
  status: "404",
@@ -24,30 +24,30 @@ const Router = ({ useHeader = true }) => {
24
24
  }
25
25
  );
26
26
  }
27
- return /* @__PURE__ */ React.createElement(ToastContextProvider, null, /* @__PURE__ */ React.createElement(Routes, null, /* @__PURE__ */ React.createElement(Route, { path: "/", element: /* @__PURE__ */ React.createElement(RbacPage, { useHeader }) }), /* @__PURE__ */ React.createElement(Route, { path: roleRouteRef.path, element: /* @__PURE__ */ React.createElement(RoleOverviewPage, null) }), /* @__PURE__ */ React.createElement(
27
+ return /* @__PURE__ */ React__default.createElement(ToastContextProvider, null, /* @__PURE__ */ React__default.createElement(Routes, null, /* @__PURE__ */ React__default.createElement(Route, { path: "/", element: /* @__PURE__ */ React__default.createElement(RbacPage, { useHeader }) }), /* @__PURE__ */ React__default.createElement(Route, { path: roleRouteRef.path, element: /* @__PURE__ */ React__default.createElement(RoleOverviewPage, null) }), /* @__PURE__ */ React__default.createElement(
28
28
  Route,
29
29
  {
30
30
  path: createRoleRouteRef.path,
31
- element: /* @__PURE__ */ React.createElement(
31
+ element: /* @__PURE__ */ React__default.createElement(
32
32
  RequirePermission,
33
33
  {
34
34
  permission: policyEntityCreatePermission,
35
35
  resourceRef: policyEntityCreatePermission.resourceType
36
36
  },
37
- /* @__PURE__ */ React.createElement(CreateRolePage, null)
37
+ /* @__PURE__ */ React__default.createElement(CreateRolePage, null)
38
38
  )
39
39
  }
40
- ), /* @__PURE__ */ React.createElement(
40
+ ), /* @__PURE__ */ React__default.createElement(
41
41
  Route,
42
42
  {
43
43
  path: editRoleRouteRef.path,
44
- element: /* @__PURE__ */ React.createElement(
44
+ element: /* @__PURE__ */ React__default.createElement(
45
45
  RequirePermission,
46
46
  {
47
47
  permission: policyEntityUpdatePermission,
48
48
  resourceRef: policyEntityUpdatePermission.resourceType
49
49
  },
50
- /* @__PURE__ */ React.createElement(EditRolePage, null)
50
+ /* @__PURE__ */ React__default.createElement(EditRolePage, null)
51
51
  )
52
52
  }
53
53
  )));
@@ -1 +1 @@
1
- {"version":3,"file":"Router.esm.js","sources":["../../src/components/Router.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { Route, Routes } from 'react-router-dom';\n\nimport { ErrorPage } from '@backstage/core-components';\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\n\nimport {\n policyEntityCreatePermission,\n policyEntityUpdatePermission,\n} from '@backstage-community/plugin-rbac-common';\n\nimport { createRoleRouteRef, editRoleRouteRef, roleRouteRef } from '../routes';\nimport { CreateRolePage } from './CreateRole/CreateRolePage';\nimport { EditRolePage } from './CreateRole/EditRolePage';\nimport { RbacPage } from './RbacPage';\nimport { RoleOverviewPage } from './RoleOverview/RoleOverviewPage';\nimport { ToastContextProvider } from './ToastContext';\n\n/**\n *\n * @public\n */\nexport const Router = ({ useHeader = true }: { useHeader?: boolean }) => {\n const config = useApi(configApiRef);\n const isRBACPluginEnabled = config.getOptionalBoolean('permission.enabled');\n\n if (!isRBACPluginEnabled) {\n return (\n <ErrorPage\n status=\"404\"\n statusMessage=\"Enable the RBAC backend plugin to use this feature.\"\n additionalInfo=\"To enable RBAC, set `permission.enabled` to `true` in the app-config file.\"\n />\n );\n }\n\n return (\n <ToastContextProvider>\n <Routes>\n <Route path=\"/\" element={<RbacPage useHeader={useHeader} />} />\n <Route path={roleRouteRef.path} element={<RoleOverviewPage />} />\n <Route\n path={createRoleRouteRef.path}\n element={\n <RequirePermission\n permission={policyEntityCreatePermission}\n resourceRef={policyEntityCreatePermission.resourceType}\n >\n <CreateRolePage />\n </RequirePermission>\n }\n />\n <Route\n path={editRoleRouteRef.path}\n element={\n <RequirePermission\n permission={policyEntityUpdatePermission}\n resourceRef={policyEntityUpdatePermission.resourceType}\n >\n <EditRolePage />\n </RequirePermission>\n }\n />\n </Routes>\n </ToastContextProvider>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;AAsCO,MAAM,MAAS,GAAA,CAAC,EAAE,SAAA,GAAY,MAAoC,KAAA;AACvE,EAAM,MAAA,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,EAAM,MAAA,mBAAA,GAAsB,MAAO,CAAA,kBAAA,CAAmB,oBAAoB,CAAA;AAE1E,EAAA,IAAI,CAAC,mBAAqB,EAAA;AACxB,IACE,uBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,MAAO,EAAA,KAAA;AAAA,QACP,aAAc,EAAA,qDAAA;AAAA,QACd,cAAe,EAAA;AAAA;AAAA,KACjB;AAAA;AAIJ,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,4CACE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,sCACE,KAAM,EAAA,EAAA,IAAA,EAAK,GAAI,EAAA,OAAA,kBAAU,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAS,WAAsB,CAAI,EAAA,CAAA,kBAC5D,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAM,IAAM,EAAA,YAAA,CAAa,MAAM,OAAS,kBAAA,KAAA,CAAA,aAAA,CAAC,gBAAiB,EAAA,IAAA,CAAA,EAAI,CAC/D,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,MAAM,kBAAmB,CAAA,IAAA;AAAA,MACzB,OACE,kBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,UAAY,EAAA,4BAAA;AAAA,UACZ,aAAa,4BAA6B,CAAA;AAAA,SAAA;AAAA,4CAEzC,cAAe,EAAA,IAAA;AAAA;AAClB;AAAA,GAGJ,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,MAAM,gBAAiB,CAAA,IAAA;AAAA,MACvB,OACE,kBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,UAAY,EAAA,4BAAA;AAAA,UACZ,aAAa,4BAA6B,CAAA;AAAA,SAAA;AAAA,4CAEzC,YAAa,EAAA,IAAA;AAAA;AAChB;AAAA,GAGN,CACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"Router.esm.js","sources":["../../src/components/Router.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { Route, Routes } from 'react-router-dom';\n\nimport { ErrorPage } from '@backstage/core-components';\nimport { configApiRef, useApi } from '@backstage/core-plugin-api';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\n\nimport {\n policyEntityCreatePermission,\n policyEntityUpdatePermission,\n} from '@backstage-community/plugin-rbac-common';\n\nimport { createRoleRouteRef, editRoleRouteRef, roleRouteRef } from '../routes';\nimport { CreateRolePage } from './CreateRole/CreateRolePage';\nimport { EditRolePage } from './CreateRole/EditRolePage';\nimport { RbacPage } from './RbacPage';\nimport { RoleOverviewPage } from './RoleOverview/RoleOverviewPage';\nimport { ToastContextProvider } from './ToastContext';\n\n/**\n *\n * @public\n */\nexport const Router = ({ useHeader = true }: { useHeader?: boolean }) => {\n const config = useApi(configApiRef);\n const isRBACPluginEnabled = config.getOptionalBoolean('permission.enabled');\n\n if (!isRBACPluginEnabled) {\n return (\n <ErrorPage\n status=\"404\"\n statusMessage=\"Enable the RBAC backend plugin to use this feature.\"\n additionalInfo=\"To enable RBAC, set `permission.enabled` to `true` in the app-config file.\"\n />\n );\n }\n\n return (\n <ToastContextProvider>\n <Routes>\n <Route path=\"/\" element={<RbacPage useHeader={useHeader} />} />\n <Route path={roleRouteRef.path} element={<RoleOverviewPage />} />\n <Route\n path={createRoleRouteRef.path}\n element={\n <RequirePermission\n permission={policyEntityCreatePermission}\n resourceRef={policyEntityCreatePermission.resourceType}\n >\n <CreateRolePage />\n </RequirePermission>\n }\n />\n <Route\n path={editRoleRouteRef.path}\n element={\n <RequirePermission\n permission={policyEntityUpdatePermission}\n resourceRef={policyEntityUpdatePermission.resourceType}\n >\n <EditRolePage />\n </RequirePermission>\n }\n />\n </Routes>\n </ToastContextProvider>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;;;;;;AAsCO,MAAM,MAAS,GAAA,CAAC,EAAE,SAAA,GAAY,MAAoC,KAAA;AACvE,EAAM,MAAA,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,EAAM,MAAA,mBAAA,GAAsB,MAAO,CAAA,kBAAA,CAAmB,oBAAoB,CAAA;AAE1E,EAAA,IAAI,CAAC,mBAAqB,EAAA;AACxB,IACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,MAAO,EAAA,KAAA;AAAA,QACP,aAAc,EAAA,qDAAA;AAAA,QACd,cAAe,EAAA;AAAA;AAAA,KACjB;AAAA;AAIJ,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,4CACEA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,+CACE,KAAM,EAAA,EAAA,IAAA,EAAK,GAAI,EAAA,OAAA,kBAAUA,cAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAS,WAAsB,CAAI,EAAA,CAAA,kBAC5DA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAM,IAAM,EAAA,YAAA,CAAa,MAAM,OAAS,kBAAAA,cAAA,CAAA,aAAA,CAAC,gBAAiB,EAAA,IAAA,CAAA,EAAI,CAC/D,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,MAAM,kBAAmB,CAAA,IAAA;AAAA,MACzB,OACE,kBAAAA,cAAA,CAAA,aAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,UAAY,EAAA,4BAAA;AAAA,UACZ,aAAa,4BAA6B,CAAA;AAAA,SAAA;AAAA,qDAEzC,cAAe,EAAA,IAAA;AAAA;AAClB;AAAA,GAGJ,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,MAAM,gBAAiB,CAAA,IAAA;AAAA,MACvB,OACE,kBAAAA,cAAA,CAAA,aAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,UAAY,EAAA,4BAAA;AAAA,UACZ,aAAa,4BAA6B,CAAA;AAAA,SAAA;AAAA,qDAEzC,YAAa,EAAA,IAAA;AAAA;AAChB;AAAA,GAGN,CACF,CAAA;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React__default from 'react';
2
2
  import Alert from '@mui/material/Alert';
3
3
  import Snackbar from '@mui/material/Snackbar';
4
4
 
@@ -6,7 +6,7 @@ const SnackbarAlert = ({
6
6
  toastMessage,
7
7
  onAlertClose
8
8
  }) => {
9
- return /* @__PURE__ */ React.createElement(
9
+ return /* @__PURE__ */ React__default.createElement(
10
10
  Snackbar,
11
11
  {
12
12
  open: toastMessage !== "",
@@ -15,7 +15,7 @@ const SnackbarAlert = ({
15
15
  style: { top: "100px", left: "0px", justifyContent: "center" },
16
16
  onClose: onAlertClose
17
17
  },
18
- /* @__PURE__ */ React.createElement(Alert, { onClose: onAlertClose, severity: "success" }, toastMessage)
18
+ /* @__PURE__ */ React__default.createElement(Alert, { onClose: onAlertClose, severity: "success" }, toastMessage)
19
19
  );
20
20
  };
21
21
 
@@ -1 +1 @@
1
- {"version":3,"file":"SnackbarAlert.esm.js","sources":["../../src/components/SnackbarAlert.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport Alert from '@mui/material/Alert';\nimport Snackbar from '@mui/material/Snackbar';\n\nexport const SnackbarAlert = ({\n toastMessage,\n onAlertClose,\n}: {\n toastMessage: string;\n onAlertClose: () => void;\n}) => {\n return (\n <Snackbar\n open={toastMessage !== ''}\n autoHideDuration={10000}\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\n style={{ top: '100px', left: '0px', justifyContent: 'center' }}\n onClose={onAlertClose}\n >\n <Alert onClose={onAlertClose} severity=\"success\">\n {toastMessage}\n </Alert>\n </Snackbar>\n );\n};\n"],"names":[],"mappings":";;;;AAoBO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,YAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,MAAM,YAAiB,KAAA,EAAA;AAAA,MACvB,gBAAkB,EAAA,GAAA;AAAA,MAClB,YAAc,EAAA,EAAE,QAAU,EAAA,KAAA,EAAO,YAAY,OAAQ,EAAA;AAAA,MACrD,OAAO,EAAE,GAAA,EAAK,SAAS,IAAM,EAAA,KAAA,EAAO,gBAAgB,QAAS,EAAA;AAAA,MAC7D,OAAS,EAAA;AAAA,KAAA;AAAA,wCAER,KAAM,EAAA,EAAA,OAAA,EAAS,YAAc,EAAA,QAAA,EAAS,aACpC,YACH;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"SnackbarAlert.esm.js","sources":["../../src/components/SnackbarAlert.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport Alert from '@mui/material/Alert';\nimport Snackbar from '@mui/material/Snackbar';\n\nexport const SnackbarAlert = ({\n toastMessage,\n onAlertClose,\n}: {\n toastMessage: string;\n onAlertClose: () => void;\n}) => {\n return (\n <Snackbar\n open={toastMessage !== ''}\n autoHideDuration={10000}\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\n style={{ top: '100px', left: '0px', justifyContent: 'center' }}\n onClose={onAlertClose}\n >\n <Alert onClose={onAlertClose} severity=\"success\">\n {toastMessage}\n </Alert>\n </Snackbar>\n );\n};\n"],"names":["React"],"mappings":";;;;AAoBO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,YAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,MAAM,YAAiB,KAAA,EAAA;AAAA,MACvB,gBAAkB,EAAA,GAAA;AAAA,MAClB,YAAc,EAAA,EAAE,QAAU,EAAA,KAAA,EAAO,YAAY,OAAQ,EAAA;AAAA,MACrD,OAAO,EAAE,GAAA,EAAK,SAAS,IAAM,EAAA,KAAA,EAAO,gBAAgB,QAAS,EAAA;AAAA,MAC7D,OAAS,EAAA;AAAA,KAAA;AAAA,iDAER,KAAM,EAAA,EAAA,OAAA,EAAS,YAAc,EAAA,QAAA,EAAS,aACpC,YACH;AAAA,GACF;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- import React, { createContext, useContext } from 'react';
1
+ import React__default, { createContext, useContext } from 'react';
2
2
 
3
3
  const ToastContext = createContext({
4
4
  toastMessage: "",
@@ -6,12 +6,12 @@ const ToastContext = createContext({
6
6
  }
7
7
  });
8
8
  const ToastContextProvider = (props) => {
9
- const [toastMessage, setToastMessage] = React.useState("");
10
- const toastContextProviderValue = React.useMemo(
9
+ const [toastMessage, setToastMessage] = React__default.useState("");
10
+ const toastContextProviderValue = React__default.useMemo(
11
11
  () => ({ setToastMessage, toastMessage }),
12
12
  [setToastMessage, toastMessage]
13
13
  );
14
- return /* @__PURE__ */ React.createElement(ToastContext.Provider, { value: toastContextProviderValue }, props.children);
14
+ return /* @__PURE__ */ React__default.createElement(ToastContext.Provider, { value: toastContextProviderValue }, props.children);
15
15
  };
16
16
  const useToast = () => useContext(ToastContext);
17
17
 
@@ -1 +1 @@
1
- {"version":3,"file":"ToastContext.esm.js","sources":["../../src/components/ToastContext.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { createContext, useContext } from 'react';\n\ntype ToastContextType = {\n toastMessage: string;\n setToastMessage: (message: string) => void;\n};\n\nexport const ToastContext = createContext<ToastContextType>({\n toastMessage: '',\n setToastMessage: () => {},\n});\n\nexport const ToastContextProvider = (props: any) => {\n const [toastMessage, setToastMessage] = React.useState('');\n const toastContextProviderValue = React.useMemo(\n () => ({ setToastMessage, toastMessage }),\n [setToastMessage, toastMessage],\n );\n return (\n <ToastContext.Provider value={toastContextProviderValue}>\n {props.children}\n </ToastContext.Provider>\n );\n};\nexport const useToast = () => useContext(ToastContext);\n"],"names":[],"mappings":";;AAsBO,MAAM,eAAe,aAAgC,CAAA;AAAA,EAC1D,YAAc,EAAA,EAAA;AAAA,EACd,iBAAiB,MAAM;AAAA;AACzB,CAAC;AAEY,MAAA,oBAAA,GAAuB,CAAC,KAAe,KAAA;AAClD,EAAA,MAAM,CAAC,YAAc,EAAA,eAAe,CAAI,GAAA,KAAA,CAAM,SAAS,EAAE,CAAA;AACzD,EAAA,MAAM,4BAA4B,KAAM,CAAA,OAAA;AAAA,IACtC,OAAO,EAAE,eAAA,EAAiB,YAAa,EAAA,CAAA;AAAA,IACvC,CAAC,iBAAiB,YAAY;AAAA,GAChC;AACA,EAAA,2CACG,YAAa,CAAA,QAAA,EAAb,EAAsB,KAAO,EAAA,yBAAA,EAAA,EAC3B,MAAM,QACT,CAAA;AAEJ;AACa,MAAA,QAAA,GAAW,MAAM,UAAA,CAAW,YAAY;;;;"}
1
+ {"version":3,"file":"ToastContext.esm.js","sources":["../../src/components/ToastContext.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { createContext, useContext } from 'react';\n\ntype ToastContextType = {\n toastMessage: string;\n setToastMessage: (message: string) => void;\n};\n\nexport const ToastContext = createContext<ToastContextType>({\n toastMessage: '',\n setToastMessage: () => {},\n});\n\nexport const ToastContextProvider = (props: any) => {\n const [toastMessage, setToastMessage] = React.useState('');\n const toastContextProviderValue = React.useMemo(\n () => ({ setToastMessage, toastMessage }),\n [setToastMessage, toastMessage],\n );\n return (\n <ToastContext.Provider value={toastContextProviderValue}>\n {props.children}\n </ToastContext.Provider>\n );\n};\nexport const useToast = () => useContext(ToastContext);\n"],"names":["React"],"mappings":";;AAsBO,MAAM,eAAe,aAAgC,CAAA;AAAA,EAC1D,YAAc,EAAA,EAAA;AAAA,EACd,iBAAiB,MAAM;AAAA;AACzB,CAAC;AAEY,MAAA,oBAAA,GAAuB,CAAC,KAAe,KAAA;AAClD,EAAA,MAAM,CAAC,YAAc,EAAA,eAAe,CAAI,GAAAA,cAAA,CAAM,SAAS,EAAE,CAAA;AACzD,EAAA,MAAM,4BAA4BA,cAAM,CAAA,OAAA;AAAA,IACtC,OAAO,EAAE,eAAA,EAAiB,YAAa,EAAA,CAAA;AAAA,IACvC,CAAC,iBAAiB,YAAY;AAAA,GAChC;AACA,EAAA,oDACG,YAAa,CAAA,QAAA,EAAb,EAAsB,KAAO,EAAA,yBAAA,EAAA,EAC3B,MAAM,QACT,CAAA;AAEJ;AACa,MAAA,QAAA,GAAW,MAAM,UAAA,CAAW,YAAY;;;;"}
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React__default from 'react';
2
2
  import { useAsyncRetry, useInterval } from 'react-use';
3
3
  import { stringifyEntityRef, parseEntityRef } from '@backstage/catalog-model';
4
4
  import { useApi } from '@backstage/core-plugin-api';
@@ -61,7 +61,7 @@ const useMembers = (roleName, pollInterval) => {
61
61
  });
62
62
  const canReadUsersAndGroups = !membersError && Array.isArray(members) && members.length > 0;
63
63
  const loading = !roleError && !membersError && !role && !members;
64
- data = React.useMemo(
64
+ data = React__default.useMemo(
65
65
  () => Array.isArray(role) ? role[0].memberReferences.reduce((acc, ref) => {
66
66
  const memberResource = Array.isArray(
67
67
  members
@@ -1 +1 @@
1
- {"version":3,"file":"useMembers.esm.js","sources":["../../src/hooks/useMembers.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 React from 'react';\nimport { useAsyncRetry, useInterval } from 'react-use';\n\nimport { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { rbacApiRef } from '../api/RBACBackendClient';\nimport { MemberEntity, MembersData } from '../types';\nimport { getMembersFromGroup } from '../utils/rbac-utils';\n\nexport type MembersInfo = {\n loading: boolean;\n data: MembersData[];\n retry: { roleRetry: () => void; membersRetry: () => void };\n error?: { message: string };\n canReadUsersAndGroups: boolean;\n};\n\nconst getErrorText = (\n role: any,\n members: any,\n): { message: string } | undefined => {\n if (!Array.isArray(role) && (role as Response)?.statusText) {\n return {\n message: `Unable to fetch role: ${(role as Response).statusText}`,\n };\n } else if (!Array.isArray(members) && (members as Response)?.statusText) {\n return {\n message: `Unable to fetch members: ${(members as Response).statusText}`,\n };\n }\n return undefined;\n};\n\nconst getMemberData = (\n memberResource: MemberEntity | undefined,\n ref: string,\n) => {\n if (memberResource) {\n return {\n name:\n memberResource.spec.profile?.displayName ??\n memberResource.metadata.name,\n type: memberResource.kind,\n ref: {\n namespace: memberResource.metadata.namespace as string,\n kind: memberResource.kind.toLocaleLowerCase('en-US'),\n name: memberResource.metadata.name,\n },\n members:\n memberResource.kind === 'Group'\n ? getMembersFromGroup(memberResource)\n : 0,\n };\n }\n const { kind, namespace, name } = parseEntityRef(ref);\n return {\n name,\n type: kind === 'user' ? 'User' : ('Group' as 'User' | 'Group'),\n ref: {\n namespace,\n kind,\n name,\n },\n members: 0,\n };\n};\n\nexport const useMembers = (\n roleName: string,\n pollInterval?: number,\n): MembersInfo => {\n const rbacApi = useApi(rbacApiRef);\n let data: MembersData[] = [];\n const {\n value: role,\n retry: roleRetry,\n error: roleError,\n } = useAsyncRetry(async () => {\n return await rbacApi.getRole(roleName);\n });\n\n const {\n value: members,\n retry: membersRetry,\n error: membersError,\n } = useAsyncRetry(async () => {\n return await rbacApi.getMembers();\n });\n\n const canReadUsersAndGroups =\n !membersError && Array.isArray(members) && members.length > 0;\n\n const loading = !roleError && !membersError && !role && !members;\n\n data = React.useMemo(\n () =>\n Array.isArray(role)\n ? role[0].memberReferences.reduce((acc: MembersData[], ref: string) => {\n const memberResource: MemberEntity | undefined = Array.isArray(\n members,\n )\n ? members.find(member => stringifyEntityRef(member) === ref)\n : undefined;\n const memberData = getMemberData(memberResource, ref);\n acc.push(memberData);\n return acc;\n }, [])\n : [],\n [role, members],\n );\n\n useInterval(\n () => {\n roleRetry();\n membersRetry();\n },\n loading ? null : pollInterval || 10000,\n );\n\n return {\n loading,\n data,\n retry: { roleRetry, membersRetry },\n error: getErrorText(role, members) || roleError || membersError,\n canReadUsersAndGroups,\n };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useMembers.esm.js","sources":["../../src/hooks/useMembers.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 React from 'react';\nimport { useAsyncRetry, useInterval } from 'react-use';\n\nimport { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { rbacApiRef } from '../api/RBACBackendClient';\nimport { MemberEntity, MembersData } from '../types';\nimport { getMembersFromGroup } from '../utils/rbac-utils';\n\nexport type MembersInfo = {\n loading: boolean;\n data: MembersData[];\n retry: { roleRetry: () => void; membersRetry: () => void };\n error?: { message: string };\n canReadUsersAndGroups: boolean;\n};\n\nconst getErrorText = (\n role: any,\n members: any,\n): { message: string } | undefined => {\n if (!Array.isArray(role) && (role as Response)?.statusText) {\n return {\n message: `Unable to fetch role: ${(role as Response).statusText}`,\n };\n } else if (!Array.isArray(members) && (members as Response)?.statusText) {\n return {\n message: `Unable to fetch members: ${(members as Response).statusText}`,\n };\n }\n return undefined;\n};\n\nconst getMemberData = (\n memberResource: MemberEntity | undefined,\n ref: string,\n) => {\n if (memberResource) {\n return {\n name:\n memberResource.spec.profile?.displayName ??\n memberResource.metadata.name,\n type: memberResource.kind,\n ref: {\n namespace: memberResource.metadata.namespace as string,\n kind: memberResource.kind.toLocaleLowerCase('en-US'),\n name: memberResource.metadata.name,\n },\n members:\n memberResource.kind === 'Group'\n ? getMembersFromGroup(memberResource)\n : 0,\n };\n }\n const { kind, namespace, name } = parseEntityRef(ref);\n return {\n name,\n type: kind === 'user' ? 'User' : ('Group' as 'User' | 'Group'),\n ref: {\n namespace,\n kind,\n name,\n },\n members: 0,\n };\n};\n\nexport const useMembers = (\n roleName: string,\n pollInterval?: number,\n): MembersInfo => {\n const rbacApi = useApi(rbacApiRef);\n let data: MembersData[] = [];\n const {\n value: role,\n retry: roleRetry,\n error: roleError,\n } = useAsyncRetry(async () => {\n return await rbacApi.getRole(roleName);\n });\n\n const {\n value: members,\n retry: membersRetry,\n error: membersError,\n } = useAsyncRetry(async () => {\n return await rbacApi.getMembers();\n });\n\n const canReadUsersAndGroups =\n !membersError && Array.isArray(members) && members.length > 0;\n\n const loading = !roleError && !membersError && !role && !members;\n\n data = React.useMemo(\n () =>\n Array.isArray(role)\n ? role[0].memberReferences.reduce((acc: MembersData[], ref: string) => {\n const memberResource: MemberEntity | undefined = Array.isArray(\n members,\n )\n ? members.find(member => stringifyEntityRef(member) === ref)\n : undefined;\n const memberData = getMemberData(memberResource, ref);\n acc.push(memberData);\n return acc;\n }, [])\n : [],\n [role, members],\n );\n\n useInterval(\n () => {\n roleRetry();\n membersRetry();\n },\n loading ? null : pollInterval || 10000,\n );\n\n return {\n loading,\n data,\n retry: { roleRetry, membersRetry },\n error: getErrorText(role, members) || roleError || membersError,\n canReadUsersAndGroups,\n };\n};\n"],"names":["React"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React__default from 'react';
2
2
  import { useAsyncRetry, useInterval } from 'react-use';
3
3
  import { useApi } from '@backstage/core-plugin-api';
4
4
  import { rbacApiRef } from '../api/RBACBackendClient.esm.js';
@@ -48,17 +48,21 @@ const usePermissionPolicies = (entityReference, pollInterval) => {
48
48
  return await rbacApi.listPermissions();
49
49
  });
50
50
  const loading = !permissionPoliciesError && !policiesError && !conditionalPoliciesError && (!permissionPolicies || !policies || !conditionalPolicies);
51
- const allPermissionPolicies = React.useMemo(
51
+ const allPermissionPolicies = React__default.useMemo(
52
52
  () => Array.isArray(permissionPolicies) ? permissionPolicies : [],
53
53
  [permissionPolicies]
54
54
  );
55
- const data = React.useMemo(() => {
55
+ const data = React__default.useMemo(() => {
56
56
  return Array.isArray(policies) ? getPermissionsData(policies, allPermissionPolicies) : [];
57
57
  }, [allPermissionPolicies, policies]);
58
- const conditionsData = React.useMemo(() => {
58
+ const conditionsData = React__default.useMemo(() => {
59
59
  const cpp = Array.isArray(conditionalPolicies) ? conditionalPolicies : [];
60
60
  const pluginsPermissionsPoliciesData = allPermissionPolicies.length > 0 ? getPluginsPermissionPoliciesData(allPermissionPolicies) : undefined;
61
- return pluginsPermissionsPoliciesData ? getConditionalPermissionsData(cpp, pluginsPermissionsPoliciesData) : [];
61
+ return pluginsPermissionsPoliciesData ? getConditionalPermissionsData(
62
+ cpp,
63
+ pluginsPermissionsPoliciesData,
64
+ allPermissionPolicies
65
+ ) : [];
62
66
  }, [allPermissionPolicies, conditionalPolicies]);
63
67
  useInterval(
64
68
  () => {
@@ -1 +1 @@
1
- {"version":3,"file":"usePermissionPolicies.esm.js","sources":["../../src/hooks/usePermissionPolicies.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 React from 'react';\nimport { useAsyncRetry, useInterval } from 'react-use';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { rbacApiRef } from '../api/RBACBackendClient';\nimport { getPluginsPermissionPoliciesData } from '../utils/create-role-utils';\nimport {\n getConditionalPermissionsData,\n getPermissionsData,\n} from '../utils/rbac-utils';\n\nconst getErrorText = (\n policies: any,\n permissionPolicies: any,\n conditionalPolicies: any,\n): { name: number; message: string } | undefined => {\n if (!Array.isArray(policies) && (policies as Response)?.statusText) {\n return {\n name: (policies as Response).status,\n message: `Error fetching policies. ${(policies as Response).statusText}`,\n };\n } else if (\n !Array.isArray(permissionPolicies) &&\n (permissionPolicies as Response)?.statusText\n ) {\n return {\n name: (permissionPolicies as Response).status,\n message: `Error fetching the plugins. ${\n (permissionPolicies as Response).statusText\n }`,\n };\n } else if (\n !Array.isArray(conditionalPolicies) &&\n (conditionalPolicies as Response)?.statusText\n ) {\n return {\n name: (conditionalPolicies as Response).status,\n message: `Error fetching the conditional permission policies. ${\n (conditionalPolicies as Response).statusText\n }`,\n };\n }\n return undefined;\n};\n\nexport const usePermissionPolicies = (\n entityReference: string,\n pollInterval?: number,\n) => {\n const rbacApi = useApi(rbacApiRef);\n const {\n value: policies,\n retry: policiesRetry,\n error: policiesError,\n } = useAsyncRetry(async () => {\n return await rbacApi.getAssociatedPolicies(entityReference);\n });\n\n const {\n value: conditionalPolicies,\n retry: conditionalPoliciesRetry,\n error: conditionalPoliciesError,\n } = useAsyncRetry(async () => {\n return await rbacApi.getRoleConditions(entityReference);\n });\n\n const {\n value: permissionPolicies,\n error: permissionPoliciesError,\n retry: permissionPoliciesRetry,\n } = useAsyncRetry(async () => {\n return await rbacApi.listPermissions();\n });\n\n const loading =\n !permissionPoliciesError &&\n !policiesError &&\n !conditionalPoliciesError &&\n (!permissionPolicies || !policies || !conditionalPolicies);\n\n const allPermissionPolicies = React.useMemo(\n () => (Array.isArray(permissionPolicies) ? permissionPolicies : []),\n [permissionPolicies],\n );\n\n const data = React.useMemo(() => {\n return Array.isArray(policies)\n ? getPermissionsData(policies, allPermissionPolicies)\n : [];\n }, [allPermissionPolicies, policies]);\n\n const conditionsData = React.useMemo(() => {\n const cpp = Array.isArray(conditionalPolicies) ? conditionalPolicies : [];\n const pluginsPermissionsPoliciesData =\n allPermissionPolicies.length > 0\n ? getPluginsPermissionPoliciesData(allPermissionPolicies)\n : undefined;\n return pluginsPermissionsPoliciesData\n ? getConditionalPermissionsData(cpp, pluginsPermissionsPoliciesData)\n : [];\n }, [allPermissionPolicies, conditionalPolicies]);\n\n useInterval(\n () => {\n policiesRetry();\n permissionPoliciesRetry();\n conditionalPoliciesRetry();\n },\n loading ? null : pollInterval || null,\n );\n return {\n loading,\n data: [...conditionsData, ...data],\n retry: { policiesRetry, permissionPoliciesRetry, conditionalPoliciesRetry },\n error:\n policiesError ||\n permissionPoliciesError ||\n conditionalPoliciesError ||\n getErrorText(policies, permissionPolicies, conditionalPolicies),\n };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usePermissionPolicies.esm.js","sources":["../../src/hooks/usePermissionPolicies.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 React from 'react';\nimport { useAsyncRetry, useInterval } from 'react-use';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { rbacApiRef } from '../api/RBACBackendClient';\nimport { getPluginsPermissionPoliciesData } from '../utils/create-role-utils';\nimport {\n getConditionalPermissionsData,\n getPermissionsData,\n} from '../utils/rbac-utils';\n\nconst getErrorText = (\n policies: any,\n permissionPolicies: any,\n conditionalPolicies: any,\n): { name: number; message: string } | undefined => {\n if (!Array.isArray(policies) && (policies as Response)?.statusText) {\n return {\n name: (policies as Response).status,\n message: `Error fetching policies. ${(policies as Response).statusText}`,\n };\n } else if (\n !Array.isArray(permissionPolicies) &&\n (permissionPolicies as Response)?.statusText\n ) {\n return {\n name: (permissionPolicies as Response).status,\n message: `Error fetching the plugins. ${\n (permissionPolicies as Response).statusText\n }`,\n };\n } else if (\n !Array.isArray(conditionalPolicies) &&\n (conditionalPolicies as Response)?.statusText\n ) {\n return {\n name: (conditionalPolicies as Response).status,\n message: `Error fetching the conditional permission policies. ${\n (conditionalPolicies as Response).statusText\n }`,\n };\n }\n return undefined;\n};\n\nexport const usePermissionPolicies = (\n entityReference: string,\n pollInterval?: number,\n) => {\n const rbacApi = useApi(rbacApiRef);\n const {\n value: policies,\n retry: policiesRetry,\n error: policiesError,\n } = useAsyncRetry(async () => {\n return await rbacApi.getAssociatedPolicies(entityReference);\n });\n\n const {\n value: conditionalPolicies,\n retry: conditionalPoliciesRetry,\n error: conditionalPoliciesError,\n } = useAsyncRetry(async () => {\n return await rbacApi.getRoleConditions(entityReference);\n });\n\n const {\n value: permissionPolicies,\n error: permissionPoliciesError,\n retry: permissionPoliciesRetry,\n } = useAsyncRetry(async () => {\n return await rbacApi.listPermissions();\n });\n\n const loading =\n !permissionPoliciesError &&\n !policiesError &&\n !conditionalPoliciesError &&\n (!permissionPolicies || !policies || !conditionalPolicies);\n\n const allPermissionPolicies = React.useMemo(\n () => (Array.isArray(permissionPolicies) ? permissionPolicies : []),\n [permissionPolicies],\n );\n\n const data = React.useMemo(() => {\n return Array.isArray(policies)\n ? getPermissionsData(policies, allPermissionPolicies)\n : [];\n }, [allPermissionPolicies, policies]);\n\n const conditionsData = React.useMemo(() => {\n const cpp = Array.isArray(conditionalPolicies) ? conditionalPolicies : [];\n const pluginsPermissionsPoliciesData =\n allPermissionPolicies.length > 0\n ? getPluginsPermissionPoliciesData(allPermissionPolicies)\n : undefined;\n return pluginsPermissionsPoliciesData\n ? getConditionalPermissionsData(\n cpp,\n pluginsPermissionsPoliciesData,\n allPermissionPolicies,\n )\n : [];\n }, [allPermissionPolicies, conditionalPolicies]);\n\n useInterval(\n () => {\n policiesRetry();\n permissionPoliciesRetry();\n conditionalPoliciesRetry();\n },\n loading ? null : pollInterval || null,\n );\n return {\n loading,\n data: [...conditionsData, ...data],\n retry: { policiesRetry, permissionPoliciesRetry, conditionalPoliciesRetry },\n error:\n policiesError ||\n permissionPoliciesError ||\n conditionalPoliciesError ||\n getErrorText(policies, permissionPolicies, conditionalPolicies),\n };\n};\n"],"names":["React"],"mappings":"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"}