@backstage-community/plugin-rbac 1.40.0 → 1.41.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 (99) hide show
  1. package/CHANGELOG.md +17 -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 +16 -7
  5. package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js.map +1 -1
  6. package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js +40 -38
  7. package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js.map +1 -1
  8. package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js +34 -32
  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 +63 -53
  13. package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js.map +1 -1
  14. package/dist/components/ConditionalAccess/ConditionsForm.esm.js +108 -96
  15. package/dist/components/ConditionalAccess/ConditionsForm.esm.js.map +1 -1
  16. package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js +236 -215
  17. package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js.map +1 -1
  18. package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js +63 -60
  19. package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js.map +1 -1
  20. package/dist/components/ConditionalAccess/CriteriaToggleButton.esm.js +5 -5
  21. package/dist/components/ConditionalAccess/CriteriaToggleButton.esm.js.map +1 -1
  22. package/dist/components/ConditionalAccess/CustomArrayField.esm.js +33 -31
  23. package/dist/components/ConditionalAccess/CustomArrayField.esm.js.map +1 -1
  24. package/dist/components/ConditionalAccess/RulesDropdownOption.esm.js +11 -10
  25. package/dist/components/ConditionalAccess/RulesDropdownOption.esm.js.map +1 -1
  26. package/dist/components/CreateRole/AddMembersForm.esm.js +69 -59
  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 +7 -7
  31. package/dist/components/CreateRole/AddedMembersTableColumn.esm.js.map +1 -1
  32. package/dist/components/CreateRole/CancelDialog.esm.js +73 -59
  33. package/dist/components/CreateRole/CancelDialog.esm.js.map +1 -1
  34. package/dist/components/CreateRole/CreateRolePage.esm.js +23 -20
  35. package/dist/components/CreateRole/CreateRolePage.esm.js.map +1 -1
  36. package/dist/components/CreateRole/EditRolePage.esm.js +27 -24
  37. package/dist/components/CreateRole/EditRolePage.esm.js.map +1 -1
  38. package/dist/components/CreateRole/MembersDropdownOption.esm.js +34 -24
  39. package/dist/components/CreateRole/MembersDropdownOption.esm.js.map +1 -1
  40. package/dist/components/CreateRole/PermissionPoliciesForm.esm.js +39 -26
  41. package/dist/components/CreateRole/PermissionPoliciesForm.esm.js.map +1 -1
  42. package/dist/components/CreateRole/PermissionPoliciesFormNestedRow.esm.js +107 -90
  43. package/dist/components/CreateRole/PermissionPoliciesFormNestedRow.esm.js.map +1 -1
  44. package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js +82 -72
  45. package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js.map +1 -1
  46. package/dist/components/CreateRole/PermissionPoliciesFormTable.esm.js +127 -111
  47. package/dist/components/CreateRole/PermissionPoliciesFormTable.esm.js.map +1 -1
  48. package/dist/components/CreateRole/PluginsDropdown.esm.js +6 -5
  49. package/dist/components/CreateRole/PluginsDropdown.esm.js.map +1 -1
  50. package/dist/components/CreateRole/PluginsDropdownOption.esm.js +21 -18
  51. package/dist/components/CreateRole/PluginsDropdownOption.esm.js.map +1 -1
  52. package/dist/components/CreateRole/ReviewStep.esm.js +21 -12
  53. package/dist/components/CreateRole/ReviewStep.esm.js.map +1 -1
  54. package/dist/components/CreateRole/ReviewStepTable.esm.js +18 -11
  55. package/dist/components/CreateRole/ReviewStepTable.esm.js.map +1 -1
  56. package/dist/components/CreateRole/RoleDetailsForm.esm.js +55 -53
  57. package/dist/components/CreateRole/RoleDetailsForm.esm.js.map +1 -1
  58. package/dist/components/CreateRole/RoleForm.esm.js +136 -113
  59. package/dist/components/CreateRole/RoleForm.esm.js.map +1 -1
  60. package/dist/components/DownloadUserStatistics.esm.js +5 -5
  61. package/dist/components/DownloadUserStatistics.esm.js.map +1 -1
  62. package/dist/components/EditRole.esm.js +6 -6
  63. package/dist/components/EditRole.esm.js.map +1 -1
  64. package/dist/components/RbacPage.esm.js +6 -3
  65. package/dist/components/RbacPage.esm.js.map +1 -1
  66. package/dist/components/RoleOverview/AboutCard.esm.js +46 -39
  67. package/dist/components/RoleOverview/AboutCard.esm.js.map +1 -1
  68. package/dist/components/RoleOverview/MembersCard.esm.js +36 -32
  69. package/dist/components/RoleOverview/MembersCard.esm.js.map +1 -1
  70. package/dist/components/RoleOverview/MembersListColumns.esm.js +5 -5
  71. package/dist/components/RoleOverview/MembersListColumns.esm.js.map +1 -1
  72. package/dist/components/RoleOverview/PermissionsCard.esm.js +36 -32
  73. package/dist/components/RoleOverview/PermissionsCard.esm.js.map +1 -1
  74. package/dist/components/RoleOverview/RoleOverviewPage.esm.js +39 -30
  75. package/dist/components/RoleOverview/RoleOverviewPage.esm.js.map +1 -1
  76. package/dist/components/RolesList/DeleteRole.esm.js +6 -6
  77. package/dist/components/RolesList/DeleteRole.esm.js.map +1 -1
  78. package/dist/components/RolesList/DeleteRoleDialog.esm.js +128 -92
  79. package/dist/components/RolesList/DeleteRoleDialog.esm.js.map +1 -1
  80. package/dist/components/RolesList/RolesList.esm.js +54 -46
  81. package/dist/components/RolesList/RolesList.esm.js.map +1 -1
  82. package/dist/components/RolesList/RolesListColumns.esm.js +19 -16
  83. package/dist/components/RolesList/RolesListColumns.esm.js.map +1 -1
  84. package/dist/components/RolesList/RolesListToolbar.esm.js +49 -36
  85. package/dist/components/RolesList/RolesListToolbar.esm.js.map +1 -1
  86. package/dist/components/Router.esm.js +14 -9
  87. package/dist/components/Router.esm.js.map +1 -1
  88. package/dist/components/SnackbarAlert.esm.js +5 -5
  89. package/dist/components/SnackbarAlert.esm.js.map +1 -1
  90. package/dist/components/ToastContext.esm.js +5 -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 +4 -4
  95. package/dist/hooks/usePermissionPolicies.esm.js.map +1 -1
  96. package/dist/hooks/useRoles.esm.js +9 -7
  97. package/dist/hooks/useRoles.esm.js.map +1 -1
  98. package/dist/index.d.ts +3 -4
  99. package/package.json +13 -13
@@ -1,4 +1,4 @@
1
- import React__default from 'react';
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { Progress, WarningPanel, MarkdownContent } from '@backstage/core-components';
3
3
  import { AboutField } from '@backstage/plugin-catalog';
4
4
  import Card from '@mui/material/Card';
@@ -17,7 +17,7 @@ const AboutCard = ({ roleName }) => {
17
17
  const classes = useStyles();
18
18
  const { role, roleError, loading } = useRole(roleName);
19
19
  if (loading) {
20
- return /* @__PURE__ */ React__default.createElement(Progress, null);
20
+ return /* @__PURE__ */ jsx(Progress, {});
21
21
  }
22
22
  let lastModified = role?.metadata?.lastModified;
23
23
  if (lastModified) {
@@ -37,7 +37,7 @@ const AboutCard = ({ roleName }) => {
37
37
  const description = role?.metadata?.description && role.metadata.description.length > 0 ? role.metadata.description : "--";
38
38
  const modifiedBy = role?.metadata?.modifiedBy && role.metadata.modifiedBy.length > 0 ? role.metadata.modifiedBy : "--";
39
39
  const owner = role?.metadata?.owner && role.metadata.owner.length > 0 ? role.metadata.owner : "--";
40
- return /* @__PURE__ */ React__default.createElement(
40
+ return /* @__PURE__ */ jsxs(
41
41
  Card,
42
42
  {
43
43
  sx: {
@@ -46,43 +46,50 @@ const AboutCard = ({ roleName }) => {
46
46
  height: "calc(100% - 10px)",
47
47
  // for pages without content header
48
48
  marginBottom: "10px"
49
- }
50
- },
51
- /* @__PURE__ */ React__default.createElement(CardHeader, { title: "About" }),
52
- /* @__PURE__ */ React__default.createElement(
53
- CardContent,
54
- {
55
- sx: {
56
- flex: 1
57
- }
58
49
  },
59
- roleError.name ? /* @__PURE__ */ React__default.createElement("div", { style: { paddingBottom: "16px" } }, /* @__PURE__ */ React__default.createElement(
60
- WarningPanel,
61
- {
62
- message: roleError?.message,
63
- title: "Something went wrong while fetching role",
64
- severity: "error"
65
- }
66
- )) : /* @__PURE__ */ React__default.createElement(Grid, { container: true, spacing: 2 }, /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 3, sm: 6, lg: 3 }, /* @__PURE__ */ React__default.createElement(AboutField, { label: "Description" }, /* @__PURE__ */ React__default.createElement(
67
- MarkdownContent,
68
- {
69
- className: classes.text,
70
- content: description
71
- }
72
- ))), /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 3, sm: 6, lg: 3 }, /* @__PURE__ */ React__default.createElement(AboutField, { label: "Modified By" }, /* @__PURE__ */ React__default.createElement(
73
- MarkdownContent,
74
- {
75
- className: classes.text,
76
- content: modifiedBy
77
- }
78
- ))), /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 3, sm: 6, lg: 3 }, /* @__PURE__ */ React__default.createElement(AboutField, { label: "Last Modified" }, /* @__PURE__ */ React__default.createElement(
79
- MarkdownContent,
80
- {
81
- className: classes.text,
82
- content: lastModified
83
- }
84
- ))), /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 3, sm: 6, lg: 3 }, /* @__PURE__ */ React__default.createElement(AboutField, { label: "Owner" }, /* @__PURE__ */ React__default.createElement(MarkdownContent, { className: classes.text, content: owner }))))
85
- )
50
+ children: [
51
+ /* @__PURE__ */ jsx(CardHeader, { title: "About" }),
52
+ /* @__PURE__ */ jsx(
53
+ CardContent,
54
+ {
55
+ sx: {
56
+ flex: 1
57
+ },
58
+ children: roleError.name ? /* @__PURE__ */ jsx("div", { style: { paddingBottom: "16px" }, children: /* @__PURE__ */ jsx(
59
+ WarningPanel,
60
+ {
61
+ message: roleError?.message,
62
+ title: "Something went wrong while fetching role",
63
+ severity: "error"
64
+ }
65
+ ) }) : /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 2, children: [
66
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 3, sm: 6, lg: 3, children: /* @__PURE__ */ jsx(AboutField, { label: "Description", children: /* @__PURE__ */ jsx(
67
+ MarkdownContent,
68
+ {
69
+ className: classes.text,
70
+ content: description
71
+ }
72
+ ) }) }),
73
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 3, sm: 6, lg: 3, children: /* @__PURE__ */ jsx(AboutField, { label: "Modified By", children: /* @__PURE__ */ jsx(
74
+ MarkdownContent,
75
+ {
76
+ className: classes.text,
77
+ content: modifiedBy
78
+ }
79
+ ) }) }),
80
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 3, sm: 6, lg: 3, children: /* @__PURE__ */ jsx(AboutField, { label: "Last Modified", children: /* @__PURE__ */ jsx(
81
+ MarkdownContent,
82
+ {
83
+ className: classes.text,
84
+ content: lastModified
85
+ }
86
+ ) }) }),
87
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 3, sm: 6, lg: 3, children: /* @__PURE__ */ jsx(AboutField, { label: "Owner", children: /* @__PURE__ */ jsx(MarkdownContent, { className: classes.text, content: owner }) }) })
88
+ ] })
89
+ }
90
+ )
91
+ ]
92
+ }
86
93
  );
87
94
  };
88
95
 
@@ -1 +1 @@
1
- {"version":3,"file":"AboutCard.esm.js","sources":["../../../src/components/RoleOverview/AboutCard.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 {\n MarkdownContent,\n Progress,\n WarningPanel,\n} from '@backstage/core-components';\nimport { AboutField } from '@backstage/plugin-catalog';\n\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Grid from '@mui/material/Grid';\nimport { makeStyles } from '@mui/styles';\n\nimport { useRole } from '../../hooks/useRole';\n\nconst useStyles = makeStyles({\n text: {\n wordBreak: 'break-word',\n },\n});\n\ntype AboutCardProps = {\n roleName: string;\n};\n\nexport const AboutCard = ({ roleName }: AboutCardProps) => {\n const classes = useStyles();\n const { role, roleError, loading } = useRole(roleName);\n if (loading) {\n return <Progress />;\n }\n\n let lastModified = role?.metadata?.lastModified;\n if (lastModified) {\n const date = new Date(lastModified);\n const time = date.toLocaleString('en-US', {\n hour: '2-digit' as const,\n minute: '2-digit' as const,\n hour12: false,\n timeZone: 'UTC',\n });\n lastModified = `${date.getUTCDate()} ${date.toLocaleString('default', {\n month: 'short',\n })} ${date.getUTCFullYear()}, ${time}`;\n } else {\n lastModified = '--';\n }\n\n const description =\n role?.metadata?.description && role.metadata.description.length > 0\n ? role.metadata.description\n : '--';\n const modifiedBy =\n role?.metadata?.modifiedBy && role.metadata.modifiedBy.length > 0\n ? role.metadata.modifiedBy\n : '--';\n const owner =\n role?.metadata?.owner && role.metadata.owner.length > 0\n ? role.metadata.owner\n : '--';\n\n return (\n <Card\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: 'calc(100% - 10px)', // for pages without content header\n marginBottom: '10px',\n }}\n >\n <CardHeader title=\"About\" />\n <CardContent\n sx={{\n flex: 1,\n }}\n >\n {roleError.name ? (\n <div style={{ paddingBottom: '16px' }}>\n <WarningPanel\n message={roleError?.message}\n title=\"Something went wrong while fetching role\"\n severity=\"error\"\n />\n </div>\n ) : (\n <Grid container spacing={2}>\n <Grid item xs={3} sm={6} lg={3}>\n <AboutField label=\"Description\">\n <MarkdownContent\n className={classes.text}\n content={description}\n />\n </AboutField>\n </Grid>\n <Grid item xs={3} sm={6} lg={3}>\n <AboutField label=\"Modified By\">\n <MarkdownContent\n className={classes.text}\n content={modifiedBy}\n />\n </AboutField>\n </Grid>\n <Grid item xs={3} sm={6} lg={3}>\n <AboutField label=\"Last Modified\">\n <MarkdownContent\n className={classes.text}\n content={lastModified}\n />\n </AboutField>\n </Grid>\n <Grid item xs={3} sm={6} lg={3}>\n <AboutField label=\"Owner\">\n <MarkdownContent className={classes.text} content={owner} />\n </AboutField>\n </Grid>\n </Grid>\n )}\n </CardContent>\n </Card>\n );\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"AboutCard.esm.js","sources":["../../../src/components/RoleOverview/AboutCard.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 {\n MarkdownContent,\n Progress,\n WarningPanel,\n} from '@backstage/core-components';\nimport { AboutField } from '@backstage/plugin-catalog';\n\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Grid from '@mui/material/Grid';\nimport { makeStyles } from '@mui/styles';\n\nimport { useRole } from '../../hooks/useRole';\n\nconst useStyles = makeStyles({\n text: {\n wordBreak: 'break-word',\n },\n});\n\ntype AboutCardProps = {\n roleName: string;\n};\n\nexport const AboutCard = ({ roleName }: AboutCardProps) => {\n const classes = useStyles();\n const { role, roleError, loading } = useRole(roleName);\n if (loading) {\n return <Progress />;\n }\n\n let lastModified = role?.metadata?.lastModified;\n if (lastModified) {\n const date = new Date(lastModified);\n const time = date.toLocaleString('en-US', {\n hour: '2-digit' as const,\n minute: '2-digit' as const,\n hour12: false,\n timeZone: 'UTC',\n });\n lastModified = `${date.getUTCDate()} ${date.toLocaleString('default', {\n month: 'short',\n })} ${date.getUTCFullYear()}, ${time}`;\n } else {\n lastModified = '--';\n }\n\n const description =\n role?.metadata?.description && role.metadata.description.length > 0\n ? role.metadata.description\n : '--';\n const modifiedBy =\n role?.metadata?.modifiedBy && role.metadata.modifiedBy.length > 0\n ? role.metadata.modifiedBy\n : '--';\n const owner =\n role?.metadata?.owner && role.metadata.owner.length > 0\n ? role.metadata.owner\n : '--';\n\n return (\n <Card\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: 'calc(100% - 10px)', // for pages without content header\n marginBottom: '10px',\n }}\n >\n <CardHeader title=\"About\" />\n <CardContent\n sx={{\n flex: 1,\n }}\n >\n {roleError.name ? (\n <div style={{ paddingBottom: '16px' }}>\n <WarningPanel\n message={roleError?.message}\n title=\"Something went wrong while fetching role\"\n severity=\"error\"\n />\n </div>\n ) : (\n <Grid container spacing={2}>\n <Grid item xs={3} sm={6} lg={3}>\n <AboutField label=\"Description\">\n <MarkdownContent\n className={classes.text}\n content={description}\n />\n </AboutField>\n </Grid>\n <Grid item xs={3} sm={6} lg={3}>\n <AboutField label=\"Modified By\">\n <MarkdownContent\n className={classes.text}\n content={modifiedBy}\n />\n </AboutField>\n </Grid>\n <Grid item xs={3} sm={6} lg={3}>\n <AboutField label=\"Last Modified\">\n <MarkdownContent\n className={classes.text}\n content={lastModified}\n />\n </AboutField>\n </Grid>\n <Grid item xs={3} sm={6} lg={3}>\n <AboutField label=\"Owner\">\n <MarkdownContent className={classes.text} content={owner} />\n </AboutField>\n </Grid>\n </Grid>\n )}\n </CardContent>\n </Card>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import React__default from 'react';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState, useMemo } from 'react';
2
3
  import { parseEntityRef } from '@backstage/catalog-model';
3
4
  import { WarningPanel, Table } from '@backstage/core-components';
4
5
  import CachedIcon from '@mui/icons-material/Cached';
@@ -8,10 +9,10 @@ import { getMembers } from '../../utils/rbac-utils.esm.js';
8
9
  import EditRole from '../EditRole.esm.js';
9
10
  import { columns } from './MembersListColumns.esm.js';
10
11
 
11
- const getRefreshIcon = () => /* @__PURE__ */ React__default.createElement(CachedIcon, null);
12
+ const getRefreshIcon = () => /* @__PURE__ */ jsx(CachedIcon, {});
12
13
  const getEditIcon = (isAllowed, roleName) => {
13
14
  const { kind, name, namespace } = parseEntityRef(roleName);
14
- return /* @__PURE__ */ React__default.createElement(
15
+ return /* @__PURE__ */ jsx(
15
16
  EditRole,
16
17
  {
17
18
  dataTestId: isAllowed ? "update-members" : "disable-update-members",
@@ -23,7 +24,7 @@ const getEditIcon = (isAllowed, roleName) => {
23
24
  };
24
25
  const MembersCard = ({ roleName, membersInfo }) => {
25
26
  const { data, loading, retry, error, canReadUsersAndGroups } = membersInfo;
26
- const [searchText, setSearchText] = React__default.useState();
27
+ const [searchText, setSearchText] = useState();
27
28
  const actions = [
28
29
  {
29
30
  icon: getRefreshIcon,
@@ -42,37 +43,40 @@ const MembersCard = ({ roleName, membersInfo }) => {
42
43
  }
43
44
  }
44
45
  ];
45
- const filteredData = React__default.useMemo(
46
+ const filteredData = useMemo(
46
47
  () => filterTableData({ data, columns, searchText }),
47
48
  [data, searchText]
48
49
  );
49
- return /* @__PURE__ */ React__default.createElement(Box, null, !loading && error && /* @__PURE__ */ React__default.createElement(Box, { style: { paddingBottom: "16px" } }, /* @__PURE__ */ React__default.createElement(
50
- WarningPanel,
51
- {
52
- message: error?.message || error?.name,
53
- title: "Something went wrong while fetching the users and groups",
54
- severity: "error"
55
- }
56
- )), /* @__PURE__ */ React__default.createElement(
57
- Table,
58
- {
59
- title: !loading && data?.length ? `Users and groups (${getMembers(filteredData)})` : "Users and groups",
60
- actions,
61
- options: { padding: "default", search: true, paging: true },
62
- data: data ?? [],
63
- isLoading: loading,
64
- columns,
65
- emptyContent: /* @__PURE__ */ React__default.createElement(
66
- Box,
67
- {
68
- "data-testid": "members-table-empty",
69
- sx: { display: "flex", justifyContent: "center", p: 2 }
70
- },
71
- "No records found"
72
- ),
73
- onSearchChange: setSearchText
74
- }
75
- ));
50
+ return /* @__PURE__ */ jsxs(Box, { children: [
51
+ !loading && error && /* @__PURE__ */ jsx(Box, { style: { paddingBottom: "16px" }, children: /* @__PURE__ */ jsx(
52
+ WarningPanel,
53
+ {
54
+ message: error?.message || error?.name,
55
+ title: "Something went wrong while fetching the users and groups",
56
+ severity: "error"
57
+ }
58
+ ) }),
59
+ /* @__PURE__ */ jsx(
60
+ Table,
61
+ {
62
+ title: !loading && data?.length ? `Users and groups (${getMembers(filteredData)})` : "Users and groups",
63
+ actions,
64
+ options: { padding: "default", search: true, paging: true },
65
+ data: data ?? [],
66
+ isLoading: loading,
67
+ columns,
68
+ emptyContent: /* @__PURE__ */ jsx(
69
+ Box,
70
+ {
71
+ "data-testid": "members-table-empty",
72
+ sx: { display: "flex", justifyContent: "center", p: 2 },
73
+ children: "No records found"
74
+ }
75
+ ),
76
+ onSearchChange: setSearchText
77
+ }
78
+ )
79
+ ] });
76
80
  };
77
81
 
78
82
  export { MembersCard };
@@ -1 +1 @@
1
- {"version":3,"file":"MembersCard.esm.js","sources":["../../../src/components/RoleOverview/MembersCard.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 { Table, WarningPanel } from '@backstage/core-components';\n\nimport CachedIcon from '@mui/icons-material/Cached';\nimport Box from '@mui/material/Box';\n\nimport { MembersInfo } from '../../hooks/useMembers';\nimport { filterTableData } from '../../utils/filter-table-data';\nimport { getMembers } from '../../utils/rbac-utils';\nimport EditRole from '../EditRole';\nimport { columns } from './MembersListColumns';\n\ntype MembersCardProps = {\n roleName: string;\n membersInfo: MembersInfo;\n};\n\nconst getRefreshIcon = () => <CachedIcon />;\nconst getEditIcon = (isAllowed: boolean, roleName: string) => {\n const { kind, name, namespace } = parseEntityRef(roleName);\n\n return (\n <EditRole\n dataTestId={isAllowed ? 'update-members' : 'disable-update-members'}\n canEdit={isAllowed}\n roleName={roleName}\n to={`../../role/${kind}/${namespace}/${name}?activeStep=${1}`}\n />\n );\n};\n\nexport const MembersCard = ({ roleName, membersInfo }: MembersCardProps) => {\n const { data, loading, retry, error, canReadUsersAndGroups } = membersInfo;\n const [searchText, setSearchText] = React.useState<string>();\n\n const actions = [\n {\n icon: getRefreshIcon,\n tooltip: 'Refresh',\n isFreeAction: true,\n onClick: () => {\n retry.roleRetry();\n retry.membersRetry();\n },\n },\n {\n icon: () => getEditIcon(canReadUsersAndGroups, roleName),\n tooltip: canReadUsersAndGroups ? 'Edit' : 'Unauthorized to edit',\n isFreeAction: true,\n onClick: () => {},\n },\n ];\n\n const filteredData = React.useMemo(\n () => filterTableData({ data, columns, searchText }),\n [data, searchText],\n );\n\n return (\n <Box>\n {!loading && error && (\n <Box style={{ paddingBottom: '16px' }}>\n <WarningPanel\n message={(error as Error)?.message || (error as Error)?.name}\n title=\"Something went wrong while fetching the users and groups\"\n severity=\"error\"\n />\n </Box>\n )}\n <Table\n title={\n !loading && data?.length\n ? `Users and groups (${getMembers(filteredData)})`\n : 'Users and groups'\n }\n actions={actions}\n options={{ padding: 'default', search: true, paging: true }}\n data={data ?? []}\n isLoading={loading}\n columns={columns}\n emptyContent={\n <Box\n data-testid=\"members-table-empty\"\n sx={{ display: 'flex', justifyContent: 'center', p: 2 }}\n >\n No records found\n </Box>\n }\n onSearchChange={setSearchText}\n />\n </Box>\n );\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"MembersCard.esm.js","sources":["../../../src/components/RoleOverview/MembersCard.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, useMemo } from 'react';\n\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { Table, WarningPanel } from '@backstage/core-components';\n\nimport CachedIcon from '@mui/icons-material/Cached';\nimport Box from '@mui/material/Box';\n\nimport { MembersInfo } from '../../hooks/useMembers';\nimport { filterTableData } from '../../utils/filter-table-data';\nimport { getMembers } from '../../utils/rbac-utils';\nimport EditRole from '../EditRole';\nimport { columns } from './MembersListColumns';\n\ntype MembersCardProps = {\n roleName: string;\n membersInfo: MembersInfo;\n};\n\nconst getRefreshIcon = () => <CachedIcon />;\nconst getEditIcon = (isAllowed: boolean, roleName: string) => {\n const { kind, name, namespace } = parseEntityRef(roleName);\n\n return (\n <EditRole\n dataTestId={isAllowed ? 'update-members' : 'disable-update-members'}\n canEdit={isAllowed}\n roleName={roleName}\n to={`../../role/${kind}/${namespace}/${name}?activeStep=${1}`}\n />\n );\n};\n\nexport const MembersCard = ({ roleName, membersInfo }: MembersCardProps) => {\n const { data, loading, retry, error, canReadUsersAndGroups } = membersInfo;\n const [searchText, setSearchText] = useState<string>();\n\n const actions = [\n {\n icon: getRefreshIcon,\n tooltip: 'Refresh',\n isFreeAction: true,\n onClick: () => {\n retry.roleRetry();\n retry.membersRetry();\n },\n },\n {\n icon: () => getEditIcon(canReadUsersAndGroups, roleName),\n tooltip: canReadUsersAndGroups ? 'Edit' : 'Unauthorized to edit',\n isFreeAction: true,\n onClick: () => {},\n },\n ];\n\n const filteredData = useMemo(\n () => filterTableData({ data, columns, searchText }),\n [data, searchText],\n );\n\n return (\n <Box>\n {!loading && error && (\n <Box style={{ paddingBottom: '16px' }}>\n <WarningPanel\n message={(error as Error)?.message || (error as Error)?.name}\n title=\"Something went wrong while fetching the users and groups\"\n severity=\"error\"\n />\n </Box>\n )}\n <Table\n title={\n !loading && data?.length\n ? `Users and groups (${getMembers(filteredData)})`\n : 'Users and groups'\n }\n actions={actions}\n options={{ padding: 'default', search: true, paging: true }}\n data={data ?? []}\n isLoading={loading}\n columns={columns}\n emptyContent={\n <Box\n data-testid=\"members-table-empty\"\n sx={{ display: 'flex', justifyContent: 'center', p: 2 }}\n >\n No records found\n </Box>\n }\n onSearchChange={setSearchText}\n />\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAkCA,MAAM,cAAA,GAAiB,sBAAM,GAAA,CAAC,UAAW,EAAA,EAAA,CAAA;AACzC,MAAM,WAAA,GAAc,CAAC,SAAA,EAAoB,QAAqB,KAAA;AAC5D,EAAA,MAAM,EAAE,IAAM,EAAA,IAAA,EAAM,SAAU,EAAA,GAAI,eAAe,QAAQ,CAAA;AAEzD,EACE,uBAAA,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,YAAY,gBAAmB,GAAA,wBAAA;AAAA,MAC3C,OAAS,EAAA,SAAA;AAAA,MACT,QAAA;AAAA,MACA,EAAA,EAAI,cAAc,IAAI,CAAA,CAAA,EAAI,SAAS,CAAI,CAAA,EAAA,IAAI,eAAe,CAAC,CAAA;AAAA;AAAA,GAC7D;AAEJ,CAAA;AAEO,MAAM,WAAc,GAAA,CAAC,EAAE,QAAA,EAAU,aAAoC,KAAA;AAC1E,EAAA,MAAM,EAAE,IAAM,EAAA,OAAA,EAAS,KAAO,EAAA,KAAA,EAAO,uBAA0B,GAAA,WAAA;AAC/D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,QAAiB,EAAA;AAErD,EAAA,MAAM,OAAU,GAAA;AAAA,IACd;AAAA,MACE,IAAM,EAAA,cAAA;AAAA,MACN,OAAS,EAAA,SAAA;AAAA,MACT,YAAc,EAAA,IAAA;AAAA,MACd,SAAS,MAAM;AACb,QAAA,KAAA,CAAM,SAAU,EAAA;AAChB,QAAA,KAAA,CAAM,YAAa,EAAA;AAAA;AACrB,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,MAAM,WAAY,CAAA,qBAAA,EAAuB,QAAQ,CAAA;AAAA,MACvD,OAAA,EAAS,wBAAwB,MAAS,GAAA,sBAAA;AAAA,MAC1C,YAAc,EAAA,IAAA;AAAA,MACd,SAAS,MAAM;AAAA;AAAC;AAClB,GACF;AAEA,EAAA,MAAM,YAAe,GAAA,OAAA;AAAA,IACnB,MAAM,eAAgB,CAAA,EAAE,IAAM,EAAA,OAAA,EAAS,YAAY,CAAA;AAAA,IACnD,CAAC,MAAM,UAAU;AAAA,GACnB;AAEA,EAAA,4BACG,GACE,EAAA,EAAA,QAAA,EAAA;AAAA,IAAC,CAAA,OAAA,IAAW,yBACV,GAAA,CAAA,GAAA,EAAA,EAAI,OAAO,EAAE,aAAA,EAAe,QAC3B,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAU,KAAiB,EAAA,OAAA,IAAY,KAAiB,EAAA,IAAA;AAAA,QACxD,KAAM,EAAA,0DAAA;AAAA,QACN,QAAS,EAAA;AAAA;AAAA,KAEb,EAAA,CAAA;AAAA,oBAEF,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EACE,CAAC,OAAW,IAAA,IAAA,EAAM,SACd,CAAqB,kBAAA,EAAA,UAAA,CAAW,YAAY,CAAC,CAC7C,CAAA,CAAA,GAAA,kBAAA;AAAA,QAEN,OAAA;AAAA,QACA,SAAS,EAAE,OAAA,EAAS,WAAW,MAAQ,EAAA,IAAA,EAAM,QAAQ,IAAK,EAAA;AAAA,QAC1D,IAAA,EAAM,QAAQ,EAAC;AAAA,QACf,SAAW,EAAA,OAAA;AAAA,QACX,OAAA;AAAA,QACA,YACE,kBAAA,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,aAAY,EAAA,qBAAA;AAAA,YACZ,IAAI,EAAE,OAAA,EAAS,QAAQ,cAAgB,EAAA,QAAA,EAAU,GAAG,CAAE,EAAA;AAAA,YACvD,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,QAEF,cAAgB,EAAA;AAAA;AAAA;AAClB,GACF,EAAA,CAAA;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- import React__default from 'react';
1
+ import { jsx } from 'react/jsx-runtime';
2
2
  import { Link } from '@backstage/core-components';
3
3
 
4
4
  const columns = [
@@ -7,12 +7,12 @@ const columns = [
7
7
  field: "name",
8
8
  type: "string",
9
9
  render: (props) => {
10
- return /* @__PURE__ */ React__default.createElement(
10
+ return /* @__PURE__ */ jsx(
11
11
  Link,
12
12
  {
13
- to: `/catalog/${props.ref.namespace}/${props.ref.kind}/${props.ref.name}`
14
- },
15
- props.name
13
+ to: `/catalog/${props.ref.namespace}/${props.ref.kind}/${props.ref.name}`,
14
+ children: props.name
15
+ }
16
16
  );
17
17
  }
18
18
  },
@@ -1 +1 @@
1
- {"version":3,"file":"MembersListColumns.esm.js","sources":["../../../src/components/RoleOverview/MembersListColumns.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, TableColumn } from '@backstage/core-components';\n\nimport { MembersData } from '../../types';\n\nexport const columns: TableColumn<MembersData>[] = [\n {\n title: 'Name',\n field: 'name',\n type: 'string',\n render: props => {\n return (\n <Link\n to={`/catalog/${props.ref.namespace}/${props.ref.kind}/${props.ref.name}`}\n >\n {props.name}\n </Link>\n );\n },\n },\n {\n title: 'Type',\n field: 'type',\n type: 'string',\n },\n {\n title: 'Members',\n field: 'members',\n type: 'numeric',\n align: 'left',\n render: (props: MembersData) => {\n return props.type === 'User' ? '-' : props.members;\n },\n customSort: (a, b) => {\n if (a.members === 0) {\n return -1;\n }\n if (b.members === 0) {\n return 1;\n }\n if (a.members === b.members) {\n return 0;\n }\n return a.members < b.members ? -1 : 1;\n },\n },\n];\n"],"names":["React"],"mappings":";;;AAqBO,MAAM,OAAsC,GAAA;AAAA,EACjD;AAAA,IACE,KAAO,EAAA,MAAA;AAAA,IACP,KAAO,EAAA,MAAA;AAAA,IACP,IAAM,EAAA,QAAA;AAAA,IACN,QAAQ,CAAS,KAAA,KAAA;AACf,MACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,EAAI,EAAA,CAAA,SAAA,EAAY,KAAM,CAAA,GAAA,CAAI,SAAS,CAAA,CAAA,EAAI,KAAM,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,KAAM,CAAA,GAAA,CAAI,IAAI,CAAA;AAAA,SAAA;AAAA,QAEtE,KAAM,CAAA;AAAA,OACT;AAAA;AAEJ,GACF;AAAA,EACA;AAAA,IACE,KAAO,EAAA,MAAA;AAAA,IACP,KAAO,EAAA,MAAA;AAAA,IACP,IAAM,EAAA;AAAA,GACR;AAAA,EACA;AAAA,IACE,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,IAAM,EAAA,SAAA;AAAA,IACN,KAAO,EAAA,MAAA;AAAA,IACP,MAAA,EAAQ,CAAC,KAAuB,KAAA;AAC9B,MAAA,OAAO,KAAM,CAAA,IAAA,KAAS,MAAS,GAAA,GAAA,GAAM,KAAM,CAAA,OAAA;AAAA,KAC7C;AAAA,IACA,UAAA,EAAY,CAAC,CAAA,EAAG,CAAM,KAAA;AACpB,MAAI,IAAA,CAAA,CAAE,YAAY,CAAG,EAAA;AACnB,QAAO,OAAA,EAAA;AAAA;AAET,MAAI,IAAA,CAAA,CAAE,YAAY,CAAG,EAAA;AACnB,QAAO,OAAA,CAAA;AAAA;AAET,MAAI,IAAA,CAAA,CAAE,OAAY,KAAA,CAAA,CAAE,OAAS,EAAA;AAC3B,QAAO,OAAA,CAAA;AAAA;AAET,MAAA,OAAO,CAAE,CAAA,OAAA,GAAU,CAAE,CAAA,OAAA,GAAU,EAAK,GAAA,CAAA;AAAA;AACtC;AAEJ;;;;"}
1
+ {"version":3,"file":"MembersListColumns.esm.js","sources":["../../../src/components/RoleOverview/MembersListColumns.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 { Link, TableColumn } from '@backstage/core-components';\n\nimport { MembersData } from '../../types';\n\nexport const columns: TableColumn<MembersData>[] = [\n {\n title: 'Name',\n field: 'name',\n type: 'string',\n render: props => {\n return (\n <Link\n to={`/catalog/${props.ref.namespace}/${props.ref.kind}/${props.ref.name}`}\n >\n {props.name}\n </Link>\n );\n },\n },\n {\n title: 'Type',\n field: 'type',\n type: 'string',\n },\n {\n title: 'Members',\n field: 'members',\n type: 'numeric',\n align: 'left',\n render: (props: MembersData) => {\n return props.type === 'User' ? '-' : props.members;\n },\n customSort: (a, b) => {\n if (a.members === 0) {\n return -1;\n }\n if (b.members === 0) {\n return 1;\n }\n if (a.members === b.members) {\n return 0;\n }\n return a.members < b.members ? -1 : 1;\n },\n },\n];\n"],"names":[],"mappings":";;;AAmBO,MAAM,OAAsC,GAAA;AAAA,EACjD;AAAA,IACE,KAAO,EAAA,MAAA;AAAA,IACP,KAAO,EAAA,MAAA;AAAA,IACP,IAAM,EAAA,QAAA;AAAA,IACN,QAAQ,CAAS,KAAA,KAAA;AACf,MACE,uBAAA,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,EAAI,EAAA,CAAA,SAAA,EAAY,KAAM,CAAA,GAAA,CAAI,SAAS,CAAA,CAAA,EAAI,KAAM,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,KAAM,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAAA,UAEtE,QAAM,EAAA,KAAA,CAAA;AAAA;AAAA,OACT;AAAA;AAEJ,GACF;AAAA,EACA;AAAA,IACE,KAAO,EAAA,MAAA;AAAA,IACP,KAAO,EAAA,MAAA;AAAA,IACP,IAAM,EAAA;AAAA,GACR;AAAA,EACA;AAAA,IACE,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,IAAM,EAAA,SAAA;AAAA,IACN,KAAO,EAAA,MAAA;AAAA,IACP,MAAA,EAAQ,CAAC,KAAuB,KAAA;AAC9B,MAAA,OAAO,KAAM,CAAA,IAAA,KAAS,MAAS,GAAA,GAAA,GAAM,KAAM,CAAA,OAAA;AAAA,KAC7C;AAAA,IACA,UAAA,EAAY,CAAC,CAAA,EAAG,CAAM,KAAA;AACpB,MAAI,IAAA,CAAA,CAAE,YAAY,CAAG,EAAA;AACnB,QAAO,OAAA,EAAA;AAAA;AAET,MAAI,IAAA,CAAA,CAAE,YAAY,CAAG,EAAA;AACnB,QAAO,OAAA,CAAA;AAAA;AAET,MAAI,IAAA,CAAA,CAAE,OAAY,KAAA,CAAA,CAAE,OAAS,EAAA;AAC3B,QAAO,OAAA,CAAA;AAAA;AAET,MAAA,OAAO,CAAE,CAAA,OAAA,GAAU,CAAE,CAAA,OAAA,GAAU,EAAK,GAAA,CAAA;AAAA;AACtC;AAEJ;;;;"}
@@ -1,4 +1,5 @@
1
- import React__default from 'react';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState, useMemo } from 'react';
2
3
  import { parseEntityRef } from '@backstage/catalog-model';
3
4
  import { WarningPanel, Table } from '@backstage/core-components';
4
5
  import CachedIcon from '@mui/icons-material/Cached';
@@ -8,10 +9,10 @@ import { filterTableData } from '../../utils/filter-table-data.esm.js';
8
9
  import EditRole from '../EditRole.esm.js';
9
10
  import { columns } from './PermissionsListColumns.esm.js';
10
11
 
11
- const getRefreshIcon = () => /* @__PURE__ */ React__default.createElement(CachedIcon, null);
12
+ const getRefreshIcon = () => /* @__PURE__ */ jsx(CachedIcon, {});
12
13
  const getEditIcon = (isAllowed, roleName) => {
13
14
  const { kind, name, namespace } = parseEntityRef(roleName);
14
- return /* @__PURE__ */ React__default.createElement(
15
+ return /* @__PURE__ */ jsx(
15
16
  EditRole,
16
17
  {
17
18
  dataTestId: isAllowed ? "update-policies" : "disable-update-policies",
@@ -26,8 +27,8 @@ const PermissionsCard = ({
26
27
  canReadUsersAndGroups
27
28
  }) => {
28
29
  const { data, loading, retry, error } = usePermissionPolicies(entityReference);
29
- const [searchText, setSearchText] = React__default.useState();
30
- const numberOfPolicies = React__default.useMemo(() => {
30
+ const [searchText, setSearchText] = useState();
31
+ const numberOfPolicies = useMemo(() => {
31
32
  const filteredPermissions = filterTableData({ data, columns, searchText });
32
33
  let policies = 0;
33
34
  filteredPermissions.forEach((p) => {
@@ -58,33 +59,36 @@ const PermissionsCard = ({
58
59
  }
59
60
  }
60
61
  ];
61
- return /* @__PURE__ */ React__default.createElement(Box, null, error?.name && error.name !== 404 && /* @__PURE__ */ React__default.createElement(Box, { style: { paddingBottom: "16px" } }, /* @__PURE__ */ React__default.createElement(
62
- WarningPanel,
63
- {
64
- message: error?.message,
65
- title: "Something went wrong while fetching the permission policies",
66
- severity: "error"
67
- }
68
- )), /* @__PURE__ */ React__default.createElement(
69
- Table,
70
- {
71
- title: !loading && data.length > 0 ? `Permission Policies (${numberOfPolicies})` : "Permission Policies",
72
- actions,
73
- options: { padding: "default", search: true, paging: true },
74
- data,
75
- columns,
76
- isLoading: loading,
77
- emptyContent: /* @__PURE__ */ React__default.createElement(
78
- Box,
79
- {
80
- "data-testid": "permission-table-empty",
81
- sx: { display: "flex", justifyContent: "center", p: 2 }
82
- },
83
- "No records found"
84
- ),
85
- onSearchChange: setSearchText
86
- }
87
- ));
62
+ return /* @__PURE__ */ jsxs(Box, { children: [
63
+ error?.name && error.name !== 404 && /* @__PURE__ */ jsx(Box, { style: { paddingBottom: "16px" }, children: /* @__PURE__ */ jsx(
64
+ WarningPanel,
65
+ {
66
+ message: error?.message,
67
+ title: "Something went wrong while fetching the permission policies",
68
+ severity: "error"
69
+ }
70
+ ) }),
71
+ /* @__PURE__ */ jsx(
72
+ Table,
73
+ {
74
+ title: !loading && data.length > 0 ? `Permission Policies (${numberOfPolicies})` : "Permission Policies",
75
+ actions,
76
+ options: { padding: "default", search: true, paging: true },
77
+ data,
78
+ columns,
79
+ isLoading: loading,
80
+ emptyContent: /* @__PURE__ */ jsx(
81
+ Box,
82
+ {
83
+ "data-testid": "permission-table-empty",
84
+ sx: { display: "flex", justifyContent: "center", p: 2 },
85
+ children: "No records found"
86
+ }
87
+ ),
88
+ onSearchChange: setSearchText
89
+ }
90
+ )
91
+ ] });
88
92
  };
89
93
 
90
94
  export { PermissionsCard };
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionsCard.esm.js","sources":["../../../src/components/RoleOverview/PermissionsCard.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 { Table, WarningPanel } from '@backstage/core-components';\n\nimport CachedIcon from '@mui/icons-material/Cached';\nimport Box from '@mui/material/Box';\n\nimport { usePermissionPolicies } from '../../hooks/usePermissionPolicies';\nimport { filterTableData } from '../../utils/filter-table-data';\nimport EditRole from '../EditRole';\nimport { columns } from './PermissionsListColumns';\n\ntype PermissionsCardProps = {\n entityReference: string;\n canReadUsersAndGroups: boolean;\n};\n\nconst getRefreshIcon = () => <CachedIcon />;\nconst getEditIcon = (isAllowed: boolean, roleName: string) => {\n const { kind, name, namespace } = parseEntityRef(roleName);\n\n return (\n <EditRole\n dataTestId={isAllowed ? 'update-policies' : 'disable-update-policies'}\n canEdit={isAllowed}\n roleName={roleName}\n to={`../../role/${kind}/${namespace}/${name}?activeStep=${2}`}\n />\n );\n};\n\nexport const PermissionsCard = ({\n entityReference,\n canReadUsersAndGroups,\n}: PermissionsCardProps) => {\n const { data, loading, retry, error } =\n usePermissionPolicies(entityReference);\n const [searchText, setSearchText] = React.useState<string>();\n\n const numberOfPolicies = React.useMemo(() => {\n const filteredPermissions = filterTableData({ data, columns, searchText });\n let policies = 0;\n filteredPermissions.forEach(p => {\n if (p.conditions) {\n policies++;\n return;\n }\n policies += p.policies.filter(pol => pol.effect === 'allow').length;\n });\n return policies;\n }, [data, searchText]);\n\n const actions = [\n {\n icon: getRefreshIcon,\n tooltip: 'Refresh',\n isFreeAction: true,\n onClick: () => {\n retry.permissionPoliciesRetry();\n retry.policiesRetry();\n retry.conditionalPoliciesRetry();\n },\n },\n {\n icon: () => getEditIcon(canReadUsersAndGroups, entityReference),\n tooltip: canReadUsersAndGroups ? 'Edit' : 'Unauthorized to edit',\n isFreeAction: true,\n onClick: () => {},\n },\n ];\n\n return (\n <Box>\n {error?.name && error.name !== 404 && (\n <Box style={{ paddingBottom: '16px' }}>\n <WarningPanel\n message={error?.message}\n title=\"Something went wrong while fetching the permission policies\"\n severity=\"error\"\n />\n </Box>\n )}\n <Table\n title={\n !loading && data.length > 0\n ? `Permission Policies (${numberOfPolicies})`\n : 'Permission Policies'\n }\n actions={actions}\n options={{ padding: 'default', search: true, paging: true }}\n data={data}\n columns={columns}\n isLoading={loading}\n emptyContent={\n <Box\n data-testid=\"permission-table-empty\"\n sx={{ display: 'flex', justifyContent: 'center', p: 2 }}\n >\n No records found\n </Box>\n }\n onSearchChange={setSearchText}\n />\n </Box>\n );\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"PermissionsCard.esm.js","sources":["../../../src/components/RoleOverview/PermissionsCard.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, useMemo } from 'react';\n\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { Table, WarningPanel } from '@backstage/core-components';\n\nimport CachedIcon from '@mui/icons-material/Cached';\nimport Box from '@mui/material/Box';\n\nimport { usePermissionPolicies } from '../../hooks/usePermissionPolicies';\nimport { filterTableData } from '../../utils/filter-table-data';\nimport EditRole from '../EditRole';\nimport { columns } from './PermissionsListColumns';\n\ntype PermissionsCardProps = {\n entityReference: string;\n canReadUsersAndGroups: boolean;\n};\n\nconst getRefreshIcon = () => <CachedIcon />;\nconst getEditIcon = (isAllowed: boolean, roleName: string) => {\n const { kind, name, namespace } = parseEntityRef(roleName);\n\n return (\n <EditRole\n dataTestId={isAllowed ? 'update-policies' : 'disable-update-policies'}\n canEdit={isAllowed}\n roleName={roleName}\n to={`../../role/${kind}/${namespace}/${name}?activeStep=${2}`}\n />\n );\n};\n\nexport const PermissionsCard = ({\n entityReference,\n canReadUsersAndGroups,\n}: PermissionsCardProps) => {\n const { data, loading, retry, error } =\n usePermissionPolicies(entityReference);\n const [searchText, setSearchText] = useState<string>();\n\n const numberOfPolicies = useMemo(() => {\n const filteredPermissions = filterTableData({ data, columns, searchText });\n let policies = 0;\n filteredPermissions.forEach(p => {\n if (p.conditions) {\n policies++;\n return;\n }\n policies += p.policies.filter(pol => pol.effect === 'allow').length;\n });\n return policies;\n }, [data, searchText]);\n\n const actions = [\n {\n icon: getRefreshIcon,\n tooltip: 'Refresh',\n isFreeAction: true,\n onClick: () => {\n retry.permissionPoliciesRetry();\n retry.policiesRetry();\n retry.conditionalPoliciesRetry();\n },\n },\n {\n icon: () => getEditIcon(canReadUsersAndGroups, entityReference),\n tooltip: canReadUsersAndGroups ? 'Edit' : 'Unauthorized to edit',\n isFreeAction: true,\n onClick: () => {},\n },\n ];\n\n return (\n <Box>\n {error?.name && error.name !== 404 && (\n <Box style={{ paddingBottom: '16px' }}>\n <WarningPanel\n message={error?.message}\n title=\"Something went wrong while fetching the permission policies\"\n severity=\"error\"\n />\n </Box>\n )}\n <Table\n title={\n !loading && data.length > 0\n ? `Permission Policies (${numberOfPolicies})`\n : 'Permission Policies'\n }\n actions={actions}\n options={{ padding: 'default', search: true, paging: true }}\n data={data}\n columns={columns}\n isLoading={loading}\n emptyContent={\n <Box\n data-testid=\"permission-table-empty\"\n sx={{ display: 'flex', justifyContent: 'center', p: 2 }}\n >\n No records found\n </Box>\n }\n onSearchChange={setSearchText}\n />\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import React__default from 'react';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { useParams } from 'react-router-dom';
3
3
  import { Page, Header, TabbedLayout } from '@backstage/core-components';
4
4
  import Grid from '@mui/material/Grid';
@@ -20,38 +20,47 @@ const RoleOverviewPage = () => {
20
20
  const onAlertClose = () => {
21
21
  setToastMessage("");
22
22
  };
23
- return /* @__PURE__ */ React__default.createElement(
23
+ return /* @__PURE__ */ jsxs(
24
24
  RequirePermission,
25
25
  {
26
26
  permission: policyEntityReadPermission,
27
- resourceRef: `${roleKind}:${roleNamespace}/${roleName}`
28
- },
29
- /* @__PURE__ */ React__default.createElement(SnackbarAlert, { toastMessage, onAlertClose }),
30
- /* @__PURE__ */ React__default.createElement(Page, { themeId: "tool" }, /* @__PURE__ */ React__default.createElement(
31
- Header,
32
- {
33
- title: `${roleKind}:${roleNamespace}/${roleName}`,
34
- type: "RBAC",
35
- typeLink: ".."
36
- }
37
- ), /* @__PURE__ */ React__default.createElement(TabbedLayout, null, /* @__PURE__ */ React__default.createElement(TabbedLayout.Route, { path: "", title: "Overview" }, /* @__PURE__ */ React__default.createElement(Grid, { container: true, direction: "row", spacing: 2 }, /* @__PURE__ */ React__default.createElement(Grid, { item: true, lg: 12, xs: 12 }, /* @__PURE__ */ React__default.createElement(
38
- AboutCard,
39
- {
40
- roleName: `${roleKind}:${roleNamespace}/${roleName}`
41
- }
42
- )), /* @__PURE__ */ React__default.createElement(Grid, { item: true, lg: 6, xs: 12 }, /* @__PURE__ */ React__default.createElement(
43
- MembersCard,
44
- {
45
- roleName: `${roleKind}:${roleNamespace}/${roleName}`,
46
- membersInfo
47
- }
48
- )), /* @__PURE__ */ React__default.createElement(Grid, { item: true, lg: 6, xs: 12 }, /* @__PURE__ */ React__default.createElement(
49
- PermissionsCard,
50
- {
51
- entityReference: `${roleKind}:${roleNamespace}/${roleName}`,
52
- canReadUsersAndGroups: membersInfo.canReadUsersAndGroups
53
- }
54
- ))))))
27
+ resourceRef: `${roleKind}:${roleNamespace}/${roleName}`,
28
+ children: [
29
+ /* @__PURE__ */ jsx(SnackbarAlert, { toastMessage, onAlertClose }),
30
+ /* @__PURE__ */ jsxs(Page, { themeId: "tool", children: [
31
+ /* @__PURE__ */ jsx(
32
+ Header,
33
+ {
34
+ title: `${roleKind}:${roleNamespace}/${roleName}`,
35
+ type: "RBAC",
36
+ typeLink: ".."
37
+ }
38
+ ),
39
+ /* @__PURE__ */ jsx(TabbedLayout, { children: /* @__PURE__ */ jsx(TabbedLayout.Route, { path: "", title: "Overview", children: /* @__PURE__ */ jsxs(Grid, { container: true, direction: "row", spacing: 2, children: [
40
+ /* @__PURE__ */ jsx(Grid, { item: true, lg: 12, xs: 12, children: /* @__PURE__ */ jsx(
41
+ AboutCard,
42
+ {
43
+ roleName: `${roleKind}:${roleNamespace}/${roleName}`
44
+ }
45
+ ) }),
46
+ /* @__PURE__ */ jsx(Grid, { item: true, lg: 6, xs: 12, children: /* @__PURE__ */ jsx(
47
+ MembersCard,
48
+ {
49
+ roleName: `${roleKind}:${roleNamespace}/${roleName}`,
50
+ membersInfo
51
+ }
52
+ ) }),
53
+ /* @__PURE__ */ jsx(Grid, { item: true, lg: 6, xs: 12, children: /* @__PURE__ */ jsx(
54
+ PermissionsCard,
55
+ {
56
+ entityReference: `${roleKind}:${roleNamespace}/${roleName}`,
57
+ canReadUsersAndGroups: membersInfo.canReadUsersAndGroups
58
+ }
59
+ ) })
60
+ ] }) }) })
61
+ ] })
62
+ ]
63
+ }
55
64
  );
56
65
  };
57
66
 
@@ -1 +1 @@
1
- {"version":3,"file":"RoleOverviewPage.esm.js","sources":["../../../src/components/RoleOverview/RoleOverviewPage.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 { useParams } from 'react-router-dom';\n\nimport { Header, Page, TabbedLayout } from '@backstage/core-components';\n\nimport Grid from '@mui/material/Grid';\n\nimport { useLocationToast } from '../../hooks/useLocationToast';\nimport { useMembers } from '../../hooks/useMembers';\nimport { SnackbarAlert } from '../SnackbarAlert';\nimport { useToast } from '../ToastContext';\nimport { AboutCard } from './AboutCard';\nimport { MembersCard } from './MembersCard';\nimport { PermissionsCard } from './PermissionsCard';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { policyEntityReadPermission } from '@backstage-community/plugin-rbac-common';\n\nexport const RoleOverviewPage = () => {\n const { roleName, roleNamespace, roleKind } = useParams();\n const { toastMessage, setToastMessage } = useToast();\n const membersInfo = useMembers(`${roleKind}:${roleNamespace}/${roleName}`);\n\n useLocationToast(setToastMessage);\n\n const onAlertClose = () => {\n setToastMessage('');\n };\n\n return (\n <RequirePermission\n permission={policyEntityReadPermission}\n resourceRef={`${roleKind}:${roleNamespace}/${roleName}`}\n >\n <SnackbarAlert toastMessage={toastMessage} onAlertClose={onAlertClose} />\n <Page themeId=\"tool\">\n <Header\n title={`${roleKind}:${roleNamespace}/${roleName}`}\n type=\"RBAC\"\n typeLink=\"..\"\n />\n <TabbedLayout>\n <TabbedLayout.Route path=\"\" title=\"Overview\">\n <Grid container direction=\"row\" spacing={2}>\n <Grid item lg={12} xs={12}>\n <AboutCard\n roleName={`${roleKind}:${roleNamespace}/${roleName}`}\n />\n </Grid>\n <Grid item lg={6} xs={12}>\n <MembersCard\n roleName={`${roleKind}:${roleNamespace}/${roleName}`}\n membersInfo={membersInfo}\n />\n </Grid>\n <Grid item lg={6} xs={12}>\n <PermissionsCard\n entityReference={`${roleKind}:${roleNamespace}/${roleName}`}\n canReadUsersAndGroups={membersInfo.canReadUsersAndGroups}\n />\n </Grid>\n </Grid>\n </TabbedLayout.Route>\n </TabbedLayout>\n </Page>\n </RequirePermission>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;AAgCO,MAAM,mBAAmB,MAAM;AACpC,EAAA,MAAM,EAAE,QAAA,EAAU,aAAe,EAAA,QAAA,KAAa,SAAU,EAAA;AACxD,EAAA,MAAM,EAAE,YAAA,EAAc,eAAgB,EAAA,GAAI,QAAS,EAAA;AACnD,EAAM,MAAA,WAAA,GAAc,WAAW,CAAG,EAAA,QAAQ,IAAI,aAAa,CAAA,CAAA,EAAI,QAAQ,CAAE,CAAA,CAAA;AAEzE,EAAA,gBAAA,CAAiB,eAAe,CAAA;AAEhC,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,eAAA,CAAgB,EAAE,CAAA;AAAA,GACpB;AAEA,EACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,UAAY,EAAA,0BAAA;AAAA,MACZ,aAAa,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,aAAa,IAAI,QAAQ,CAAA;AAAA,KAAA;AAAA,oBAErDA,cAAA,CAAA,aAAA,CAAC,aAAc,EAAA,EAAA,YAAA,EAA4B,YAA4B,EAAA,CAAA;AAAA,oBACvEA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,OAAA,EAAQ,MACZ,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAO,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,aAAa,IAAI,QAAQ,CAAA,CAAA;AAAA,QAC/C,IAAK,EAAA,MAAA;AAAA,QACL,QAAS,EAAA;AAAA;AAAA,KACX,kBACCA,cAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,kBACEA,cAAA,CAAA,aAAA,CAAA,YAAA,CAAa,KAAb,EAAA,EAAmB,IAAK,EAAA,EAAA,EAAG,KAAM,EAAA,UAAA,EAAA,kBAC/BA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,WAAS,IAAC,EAAA,SAAA,EAAU,KAAM,EAAA,OAAA,EAAS,CACvC,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,EAAI,EAAA,EAAA,EAAI,EACrB,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,UAAU,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,aAAa,IAAI,QAAQ,CAAA;AAAA;AAAA,KAEtD,mBACCA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,MAAI,IAAC,EAAA,EAAA,EAAI,CAAG,EAAA,EAAA,EAAI,EACpB,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,UAAU,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,aAAa,IAAI,QAAQ,CAAA,CAAA;AAAA,QAClD;AAAA;AAAA,KAEJ,mBACCA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,MAAI,IAAC,EAAA,EAAA,EAAI,CAAG,EAAA,EAAA,EAAI,EACpB,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,iBAAiB,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,aAAa,IAAI,QAAQ,CAAA,CAAA;AAAA,QACzD,uBAAuB,WAAY,CAAA;AAAA;AAAA,KAEvC,CACF,CACF,CACF,CACF;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"RoleOverviewPage.esm.js","sources":["../../../src/components/RoleOverview/RoleOverviewPage.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 { useParams } from 'react-router-dom';\n\nimport { Header, Page, TabbedLayout } from '@backstage/core-components';\n\nimport Grid from '@mui/material/Grid';\n\nimport { useLocationToast } from '../../hooks/useLocationToast';\nimport { useMembers } from '../../hooks/useMembers';\nimport { SnackbarAlert } from '../SnackbarAlert';\nimport { useToast } from '../ToastContext';\nimport { AboutCard } from './AboutCard';\nimport { MembersCard } from './MembersCard';\nimport { PermissionsCard } from './PermissionsCard';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { policyEntityReadPermission } from '@backstage-community/plugin-rbac-common';\n\nexport const RoleOverviewPage = () => {\n const { roleName, roleNamespace, roleKind } = useParams();\n const { toastMessage, setToastMessage } = useToast();\n const membersInfo = useMembers(`${roleKind}:${roleNamespace}/${roleName}`);\n\n useLocationToast(setToastMessage);\n\n const onAlertClose = () => {\n setToastMessage('');\n };\n\n return (\n <RequirePermission\n permission={policyEntityReadPermission}\n resourceRef={`${roleKind}:${roleNamespace}/${roleName}`}\n >\n <SnackbarAlert toastMessage={toastMessage} onAlertClose={onAlertClose} />\n <Page themeId=\"tool\">\n <Header\n title={`${roleKind}:${roleNamespace}/${roleName}`}\n type=\"RBAC\"\n typeLink=\"..\"\n />\n <TabbedLayout>\n <TabbedLayout.Route path=\"\" title=\"Overview\">\n <Grid container direction=\"row\" spacing={2}>\n <Grid item lg={12} xs={12}>\n <AboutCard\n roleName={`${roleKind}:${roleNamespace}/${roleName}`}\n />\n </Grid>\n <Grid item lg={6} xs={12}>\n <MembersCard\n roleName={`${roleKind}:${roleNamespace}/${roleName}`}\n membersInfo={membersInfo}\n />\n </Grid>\n <Grid item lg={6} xs={12}>\n <PermissionsCard\n entityReference={`${roleKind}:${roleNamespace}/${roleName}`}\n canReadUsersAndGroups={membersInfo.canReadUsersAndGroups}\n />\n </Grid>\n </Grid>\n </TabbedLayout.Route>\n </TabbedLayout>\n </Page>\n </RequirePermission>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;AA+BO,MAAM,mBAAmB,MAAM;AACpC,EAAA,MAAM,EAAE,QAAA,EAAU,aAAe,EAAA,QAAA,KAAa,SAAU,EAAA;AACxD,EAAA,MAAM,EAAE,YAAA,EAAc,eAAgB,EAAA,GAAI,QAAS,EAAA;AACnD,EAAM,MAAA,WAAA,GAAc,WAAW,CAAG,EAAA,QAAQ,IAAI,aAAa,CAAA,CAAA,EAAI,QAAQ,CAAE,CAAA,CAAA;AAEzE,EAAA,gBAAA,CAAiB,eAAe,CAAA;AAEhC,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,eAAA,CAAgB,EAAE,CAAA;AAAA,GACpB;AAEA,EACE,uBAAA,IAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,UAAY,EAAA,0BAAA;AAAA,MACZ,aAAa,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,aAAa,IAAI,QAAQ,CAAA,CAAA;AAAA,MAErD,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,aAAA,EAAA,EAAc,cAA4B,YAA4B,EAAA,CAAA;AAAA,wBACvE,IAAA,CAAC,IAAK,EAAA,EAAA,OAAA,EAAQ,MACZ,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAO,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,aAAa,IAAI,QAAQ,CAAA,CAAA;AAAA,cAC/C,IAAK,EAAA,MAAA;AAAA,cACL,QAAS,EAAA;AAAA;AAAA,WACX;AAAA,8BACC,YACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAa,CAAA,KAAA,EAAb,EAAmB,IAAK,EAAA,EAAA,EAAG,KAAM,EAAA,UAAA,EAChC,+BAAC,IAAK,EAAA,EAAA,SAAA,EAAS,MAAC,SAAU,EAAA,KAAA,EAAM,SAAS,CACvC,EAAA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EAAI,IAAI,EACrB,EAAA,QAAA,kBAAA,GAAA;AAAA,cAAC,SAAA;AAAA,cAAA;AAAA,gBACC,UAAU,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,aAAa,IAAI,QAAQ,CAAA;AAAA;AAAA,aAEtD,EAAA,CAAA;AAAA,gCACC,IAAK,EAAA,EAAA,IAAA,EAAI,MAAC,EAAI,EAAA,CAAA,EAAG,IAAI,EACpB,EAAA,QAAA,kBAAA,GAAA;AAAA,cAAC,WAAA;AAAA,cAAA;AAAA,gBACC,UAAU,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,aAAa,IAAI,QAAQ,CAAA,CAAA;AAAA,gBAClD;AAAA;AAAA,aAEJ,EAAA,CAAA;AAAA,gCACC,IAAK,EAAA,EAAA,IAAA,EAAI,MAAC,EAAI,EAAA,CAAA,EAAG,IAAI,EACpB,EAAA,QAAA,kBAAA,GAAA;AAAA,cAAC,eAAA;AAAA,cAAA;AAAA,gBACC,iBAAiB,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,aAAa,IAAI,QAAQ,CAAA,CAAA;AAAA,gBACzD,uBAAuB,WAAY,CAAA;AAAA;AAAA,aAEvC,EAAA;AAAA,WAAA,EACF,GACF,CACF,EAAA;AAAA,SACF,EAAA;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- import React__default from 'react';
1
+ import { jsx } from 'react/jsx-runtime';
2
2
  import { useDeleteDialog } from '@janus-idp/shared-react';
3
3
  import Delete from '@mui/icons-material/Delete';
4
4
  import IconButton from '@mui/material/IconButton';
@@ -25,7 +25,7 @@ const DeleteRole = ({
25
25
  const disable = !(deletePermissionResult.allowed && canEdit);
26
26
  const dataTestIdText = disable ? `disable-delete-role-${roleName}` : `delete-role-${roleName}`;
27
27
  const tooltipText = disable ? "Role cannot be deleted" : "";
28
- return /* @__PURE__ */ React__default.createElement(Tooltip, { title: tooltip ?? tooltipText }, /* @__PURE__ */ React__default.createElement(Typography, { component: "span", "data-testid": dataTestId ?? dataTestIdText }, /* @__PURE__ */ React__default.createElement(
28
+ return /* @__PURE__ */ jsx(Tooltip, { title: tooltip ?? tooltipText, children: /* @__PURE__ */ jsx(Typography, { component: "span", "data-testid": dataTestId ?? dataTestIdText, children: /* @__PURE__ */ jsx(
29
29
  IconButton,
30
30
  {
31
31
  onClick: () => openDialog(roleName),
@@ -33,10 +33,10 @@ const DeleteRole = ({
33
33
  disabled: disable,
34
34
  title: tooltip ?? "Delete Role",
35
35
  style: { padding: "0.5rem", borderRadius: "50%" },
36
- sx: { "&:hover": { borderRadius: "50%" } }
37
- },
38
- /* @__PURE__ */ React__default.createElement(Delete, null)
39
- )));
36
+ sx: { "&:hover": { borderRadius: "50%" } },
37
+ children: /* @__PURE__ */ jsx(Delete, {})
38
+ }
39
+ ) }) });
40
40
  };
41
41
 
42
42
  export { DeleteRole as default };