@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,5 @@
1
- import React__default from 'react';
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+ import { useState, useEffect } from 'react';
2
3
  import IconButton from '@mui/material/IconButton';
3
4
  import { getRulesNumber } from '../../utils/create-role-utils.esm.js';
4
5
  import TableRow from '@mui/material/TableRow';
@@ -24,8 +25,8 @@ const PermissionPoliciesFormRow = ({
24
25
  onRemovePlugin,
25
26
  onAddConditions
26
27
  }) => {
27
- const [currentOpen, setCurrentOpen] = React__default.useState(false);
28
- React__default.useEffect(() => {
28
+ const [currentOpen, setCurrentOpen] = useState(false);
29
+ useEffect(() => {
29
30
  setCurrentOpen(open);
30
31
  }, [open]);
31
32
  const getTotalRules = (conditions) => {
@@ -47,78 +48,87 @@ const PermissionPoliciesFormRow = ({
47
48
  }
48
49
  return "Select...";
49
50
  };
50
- return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(TableRow, null, /* @__PURE__ */ React__default.createElement(
51
- TableCell,
52
- {
53
- align: "left",
54
- sx: {
55
- borderBottom: "none",
56
- display: "flex",
57
- alignItems: "center",
58
- fontWeight: (theme) => theme.typography.fontWeightMedium
59
- }
60
- },
61
- /* @__PURE__ */ React__default.createElement(
62
- IconButton,
63
- {
64
- "aria-label": "expand-row",
65
- size: "small",
66
- onClick: () => setCurrentOpen(!currentOpen),
67
- "data-testid": `expand-row-${rowData.plugin}`
68
- },
69
- currentOpen ? /* @__PURE__ */ React__default.createElement(ArrowDownIcon, null) : /* @__PURE__ */ React__default.createElement(ArrowRightIcon, null)
70
- ),
71
- rowData.name
72
- ), /* @__PURE__ */ React__default.createElement(TableCell, { align: "left", sx: { borderBottom: "none" } }, /* @__PURE__ */ React__default.createElement(
73
- Link,
74
- {
75
- sx: {
76
- cursor: "pointer",
77
- textDecoration: "none",
78
- color: (theme) => theme.palette.primary.main
79
- },
80
- onClick: () => setCurrentOpen(true)
81
- },
82
- getPermissionCellLabel(rowData.plugin)
83
- )), /* @__PURE__ */ React__default.createElement(TableCell, { align: "right", sx: { borderBottom: "none" } }, /* @__PURE__ */ React__default.createElement(
84
- IconButton,
85
- {
86
- "aria-label": "remove",
87
- size: "small",
88
- onClick: () => onRemovePlugin(rowData.plugin)
89
- },
90
- /* @__PURE__ */ React__default.createElement(Delete, null)
91
- ))), /* @__PURE__ */ React__default.createElement(TableRow, null, /* @__PURE__ */ React__default.createElement(
92
- TableCell,
93
- {
94
- sx: { p: 0 },
95
- colSpan: 6,
96
- "data-testid": `nested-row-${rowData.plugin}`
97
- },
98
- /* @__PURE__ */ React__default.createElement(Collapse, { in: currentOpen, timeout: "auto", unmountOnExit: true }, /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(Table, { size: "small", "aria-label": "permission-policies" }, /* @__PURE__ */ React__default.createElement(TableBody, null, rowData.permissionPolicies.map((pp) => /* @__PURE__ */ React__default.createElement(
99
- PermissionPoliciesFormNestedRow,
51
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
52
+ /* @__PURE__ */ jsxs(TableRow, { children: [
53
+ /* @__PURE__ */ jsxs(
54
+ TableCell,
55
+ {
56
+ align: "left",
57
+ sx: {
58
+ borderBottom: "none",
59
+ display: "flex",
60
+ alignItems: "center",
61
+ fontWeight: (theme) => theme.typography.fontWeightMedium
62
+ },
63
+ children: [
64
+ /* @__PURE__ */ jsx(
65
+ IconButton,
66
+ {
67
+ "aria-label": "expand-row",
68
+ size: "small",
69
+ onClick: () => setCurrentOpen(!currentOpen),
70
+ "data-testid": `expand-row-${rowData.plugin}`,
71
+ children: currentOpen ? /* @__PURE__ */ jsx(ArrowDownIcon, {}) : /* @__PURE__ */ jsx(ArrowRightIcon, {})
72
+ }
73
+ ),
74
+ rowData.name
75
+ ]
76
+ }
77
+ ),
78
+ /* @__PURE__ */ jsx(TableCell, { align: "left", sx: { borderBottom: "none" }, children: /* @__PURE__ */ jsx(
79
+ Link,
80
+ {
81
+ sx: {
82
+ cursor: "pointer",
83
+ textDecoration: "none",
84
+ color: (theme) => theme.palette.primary.main
85
+ },
86
+ onClick: () => setCurrentOpen(true),
87
+ children: getPermissionCellLabel(rowData.plugin)
88
+ }
89
+ ) }),
90
+ /* @__PURE__ */ jsx(TableCell, { align: "right", sx: { borderBottom: "none" }, children: /* @__PURE__ */ jsx(
91
+ IconButton,
92
+ {
93
+ "aria-label": "remove",
94
+ size: "small",
95
+ onClick: () => onRemovePlugin(rowData.plugin),
96
+ children: /* @__PURE__ */ jsx(Delete, {})
97
+ }
98
+ ) })
99
+ ] }),
100
+ /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(
101
+ TableCell,
100
102
  {
101
- key: pp.permission,
102
- plugin: rowData.plugin,
103
- permissionPolicy: pp,
104
- permissionPolicyRowIndex: getPprIndex(
105
- rowData.plugin,
103
+ sx: { p: 0 },
104
+ colSpan: 6,
105
+ "data-testid": `nested-row-${rowData.plugin}`,
106
+ children: /* @__PURE__ */ jsx(Collapse, { in: currentOpen, timeout: "auto", unmountOnExit: true, children: /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Table, { size: "small", "aria-label": "permission-policies", children: /* @__PURE__ */ jsx(TableBody, { children: rowData.permissionPolicies.map((pp) => /* @__PURE__ */ jsx(
107
+ PermissionPoliciesFormNestedRow,
108
+ {
109
+ plugin: rowData.plugin,
110
+ permissionPolicy: pp,
111
+ permissionPolicyRowIndex: getPprIndex(
112
+ rowData.plugin,
113
+ pp.permission
114
+ ),
115
+ policies: getPolicies(rowData.plugin, pp),
116
+ conditionRulesLength: conditionRulesData?.[`${rowData.plugin}`]?.[`${pp.resourceType}`]?.rules.length,
117
+ totalRulesCount: getTotalRules(
118
+ permissionPoliciesRows[getPprIndex(rowData.plugin, pp.permission)]?.conditions
119
+ ),
120
+ conditionsData: permissionPoliciesRows[getPprIndex(rowData.plugin, pp.permission)]?.conditions,
121
+ conditionRulesData,
122
+ onSelectPermission,
123
+ onSelectPolicy,
124
+ onRemovePermission,
125
+ onAddConditions
126
+ },
106
127
  pp.permission
107
- ),
108
- policies: getPolicies(rowData.plugin, pp),
109
- conditionRulesLength: conditionRulesData?.[`${rowData.plugin}`]?.[`${pp.resourceType}`]?.rules.length,
110
- totalRulesCount: getTotalRules(
111
- permissionPoliciesRows[getPprIndex(rowData.plugin, pp.permission)]?.conditions
112
- ),
113
- conditionsData: permissionPoliciesRows[getPprIndex(rowData.plugin, pp.permission)]?.conditions,
114
- conditionRulesData,
115
- onSelectPermission,
116
- onSelectPolicy,
117
- onRemovePermission,
118
- onAddConditions
128
+ )) }) }) }) })
119
129
  }
120
- ))))))
121
- )));
130
+ ) })
131
+ ] });
122
132
  };
123
133
 
124
134
  export { PermissionPoliciesFormRow as default };
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionPoliciesFormRow.esm.js","sources":["../../../src/components/CreateRole/PermissionPoliciesFormRow.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 IconButton from '@mui/material/IconButton';\nimport { PermissionsData } from '../../types';\nimport { getRulesNumber } from '../../utils/create-role-utils';\nimport { ConditionRulesData, ConditionsData } from '../ConditionalAccess/types';\nimport TableRow from '@mui/material/TableRow';\nimport TableCell from '@mui/material/TableCell';\nimport Collapse from '@mui/material/Collapse';\nimport Box from '@mui/material/Box';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport ArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';\nimport ArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport PermissionPoliciesFormNestedRow from './PermissionPoliciesFormNestedRow';\nimport Link from '@mui/material/Link';\n\ntype PermissionPoliciesFormRowProps = {\n rowData: any;\n conditionRulesData?: ConditionRulesData;\n permissionPoliciesRows: PermissionsData[];\n open: boolean;\n onSelectPermission: (\n plugin: string,\n permission: string,\n isResourced: boolean,\n policies: string[],\n resourceType?: string,\n ) => void;\n onSelectPolicy: (\n isChecked: boolean,\n policyIndex: number,\n pIndex: number,\n ) => void;\n onRemovePermission: (index: number) => void;\n onRemovePlugin: (plugin: string) => void;\n setOpen: React.Dispatch<React.SetStateAction<boolean>>;\n onAddConditions: (index: number, conditions?: ConditionsData) => void;\n};\n\nconst PermissionPoliciesFormRow = ({\n rowData,\n permissionPoliciesRows,\n conditionRulesData,\n open,\n onSelectPermission,\n onSelectPolicy,\n onRemovePermission,\n onRemovePlugin,\n onAddConditions,\n}: PermissionPoliciesFormRowProps) => {\n const [currentOpen, setCurrentOpen] = React.useState<boolean>(false);\n\n React.useEffect(() => {\n setCurrentOpen(open);\n }, [open]);\n\n const getTotalRules = (conditions?: ConditionsData): number => {\n const totalRules = getRulesNumber(conditions);\n return totalRules;\n };\n\n const getPprIndex = (plugin: string, permission: string) => {\n return permissionPoliciesRows.findIndex(ppr => {\n return ppr.plugin === plugin && ppr.permission === permission;\n });\n };\n\n const getPolicies = (plugin: string, pp: any) => {\n const pprIndex = getPprIndex(plugin, pp.permission);\n return (\n permissionPoliciesRows?.[pprIndex]?.policies ||\n pp.actions.map((ac: string) => ({ policy: ac, effect: 'deny' }))\n );\n };\n\n const getPermissionCellLabel = (plugin: string) => {\n if (permissionPoliciesRows.find(ppr => ppr.plugin === plugin)) {\n return 'Edit...';\n }\n\n return 'Select...';\n };\n\n return (\n <>\n <TableRow>\n <TableCell\n align=\"left\"\n sx={{\n borderBottom: 'none',\n display: 'flex',\n alignItems: 'center',\n fontWeight: theme => theme.typography.fontWeightMedium,\n }}\n >\n <IconButton\n aria-label=\"expand-row\"\n size=\"small\"\n onClick={() => setCurrentOpen(!currentOpen)}\n data-testid={`expand-row-${rowData.plugin}`}\n >\n {currentOpen ? <ArrowDownIcon /> : <ArrowRightIcon />}\n </IconButton>\n {rowData.name}\n </TableCell>\n <TableCell align=\"left\" sx={{ borderBottom: 'none' }}>\n <Link\n sx={{\n cursor: 'pointer',\n textDecoration: 'none',\n color: theme => theme.palette.primary.main,\n }}\n onClick={() => setCurrentOpen(true)}\n >\n {getPermissionCellLabel(rowData.plugin)}\n </Link>\n </TableCell>\n <TableCell align=\"right\" sx={{ borderBottom: 'none' }}>\n <IconButton\n aria-label=\"remove\"\n size=\"small\"\n onClick={() => onRemovePlugin(rowData.plugin)}\n >\n <DeleteIcon />\n </IconButton>\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell\n sx={{ p: 0 }}\n colSpan={6}\n data-testid={`nested-row-${rowData.plugin}`}\n >\n <Collapse in={currentOpen} timeout=\"auto\" unmountOnExit>\n <Box>\n <Table size=\"small\" aria-label=\"permission-policies\">\n <TableBody>\n {rowData.permissionPolicies.map((pp: any) => (\n <PermissionPoliciesFormNestedRow\n key={pp.permission}\n plugin={rowData.plugin}\n permissionPolicy={pp}\n permissionPolicyRowIndex={getPprIndex(\n rowData.plugin,\n pp.permission,\n )}\n policies={getPolicies(rowData.plugin, pp)}\n conditionRulesLength={\n conditionRulesData?.[`${rowData.plugin}`]?.[\n `${pp.resourceType}`\n ]?.rules.length\n }\n totalRulesCount={getTotalRules(\n permissionPoliciesRows[\n getPprIndex(rowData.plugin, pp.permission)\n ]?.conditions,\n )}\n conditionsData={\n permissionPoliciesRows[\n getPprIndex(rowData.plugin, pp.permission)\n ]?.conditions\n }\n conditionRulesData={conditionRulesData}\n onSelectPermission={onSelectPermission}\n onSelectPolicy={onSelectPolicy}\n onRemovePermission={onRemovePermission}\n onAddConditions={onAddConditions}\n />\n ))}\n </TableBody>\n </Table>\n </Box>\n </Collapse>\n </TableCell>\n </TableRow>\n </>\n );\n};\n\nexport default PermissionPoliciesFormRow;\n"],"names":["React","DeleteIcon"],"mappings":"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"}
1
+ {"version":3,"file":"PermissionPoliciesFormRow.esm.js","sources":["../../../src/components/CreateRole/PermissionPoliciesFormRow.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { SetStateAction, Dispatch } from 'react';\n\nimport { useState, useEffect } from 'react';\n\nimport IconButton from '@mui/material/IconButton';\nimport { PermissionsData } from '../../types';\nimport { getRulesNumber } from '../../utils/create-role-utils';\nimport { ConditionRulesData, ConditionsData } from '../ConditionalAccess/types';\nimport TableRow from '@mui/material/TableRow';\nimport TableCell from '@mui/material/TableCell';\nimport Collapse from '@mui/material/Collapse';\nimport Box from '@mui/material/Box';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport ArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';\nimport ArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport PermissionPoliciesFormNestedRow from './PermissionPoliciesFormNestedRow';\nimport Link from '@mui/material/Link';\n\ntype PermissionPoliciesFormRowProps = {\n rowData: any;\n conditionRulesData?: ConditionRulesData;\n permissionPoliciesRows: PermissionsData[];\n open: boolean;\n onSelectPermission: (\n plugin: string,\n permission: string,\n isResourced: boolean,\n policies: string[],\n resourceType?: string,\n ) => void;\n onSelectPolicy: (\n isChecked: boolean,\n policyIndex: number,\n pIndex: number,\n ) => void;\n onRemovePermission: (index: number) => void;\n onRemovePlugin: (plugin: string) => void;\n setOpen: Dispatch<SetStateAction<boolean>>;\n onAddConditions: (index: number, conditions?: ConditionsData) => void;\n};\n\nconst PermissionPoliciesFormRow = ({\n rowData,\n permissionPoliciesRows,\n conditionRulesData,\n open,\n onSelectPermission,\n onSelectPolicy,\n onRemovePermission,\n onRemovePlugin,\n onAddConditions,\n}: PermissionPoliciesFormRowProps) => {\n const [currentOpen, setCurrentOpen] = useState<boolean>(false);\n\n useEffect(() => {\n setCurrentOpen(open);\n }, [open]);\n\n const getTotalRules = (conditions?: ConditionsData): number => {\n const totalRules = getRulesNumber(conditions);\n return totalRules;\n };\n\n const getPprIndex = (plugin: string, permission: string) => {\n return permissionPoliciesRows.findIndex(ppr => {\n return ppr.plugin === plugin && ppr.permission === permission;\n });\n };\n\n const getPolicies = (plugin: string, pp: any) => {\n const pprIndex = getPprIndex(plugin, pp.permission);\n return (\n permissionPoliciesRows?.[pprIndex]?.policies ||\n pp.actions.map((ac: string) => ({ policy: ac, effect: 'deny' }))\n );\n };\n\n const getPermissionCellLabel = (plugin: string) => {\n if (permissionPoliciesRows.find(ppr => ppr.plugin === plugin)) {\n return 'Edit...';\n }\n\n return 'Select...';\n };\n\n return (\n <>\n <TableRow>\n <TableCell\n align=\"left\"\n sx={{\n borderBottom: 'none',\n display: 'flex',\n alignItems: 'center',\n fontWeight: theme => theme.typography.fontWeightMedium,\n }}\n >\n <IconButton\n aria-label=\"expand-row\"\n size=\"small\"\n onClick={() => setCurrentOpen(!currentOpen)}\n data-testid={`expand-row-${rowData.plugin}`}\n >\n {currentOpen ? <ArrowDownIcon /> : <ArrowRightIcon />}\n </IconButton>\n {rowData.name}\n </TableCell>\n <TableCell align=\"left\" sx={{ borderBottom: 'none' }}>\n <Link\n sx={{\n cursor: 'pointer',\n textDecoration: 'none',\n color: theme => theme.palette.primary.main,\n }}\n onClick={() => setCurrentOpen(true)}\n >\n {getPermissionCellLabel(rowData.plugin)}\n </Link>\n </TableCell>\n <TableCell align=\"right\" sx={{ borderBottom: 'none' }}>\n <IconButton\n aria-label=\"remove\"\n size=\"small\"\n onClick={() => onRemovePlugin(rowData.plugin)}\n >\n <DeleteIcon />\n </IconButton>\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell\n sx={{ p: 0 }}\n colSpan={6}\n data-testid={`nested-row-${rowData.plugin}`}\n >\n <Collapse in={currentOpen} timeout=\"auto\" unmountOnExit>\n <Box>\n <Table size=\"small\" aria-label=\"permission-policies\">\n <TableBody>\n {rowData.permissionPolicies.map((pp: any) => (\n <PermissionPoliciesFormNestedRow\n key={pp.permission}\n plugin={rowData.plugin}\n permissionPolicy={pp}\n permissionPolicyRowIndex={getPprIndex(\n rowData.plugin,\n pp.permission,\n )}\n policies={getPolicies(rowData.plugin, pp)}\n conditionRulesLength={\n conditionRulesData?.[`${rowData.plugin}`]?.[\n `${pp.resourceType}`\n ]?.rules.length\n }\n totalRulesCount={getTotalRules(\n permissionPoliciesRows[\n getPprIndex(rowData.plugin, pp.permission)\n ]?.conditions,\n )}\n conditionsData={\n permissionPoliciesRows[\n getPprIndex(rowData.plugin, pp.permission)\n ]?.conditions\n }\n conditionRulesData={conditionRulesData}\n onSelectPermission={onSelectPermission}\n onSelectPolicy={onSelectPolicy}\n onRemovePermission={onRemovePermission}\n onAddConditions={onAddConditions}\n />\n ))}\n </TableBody>\n </Table>\n </Box>\n </Collapse>\n </TableCell>\n </TableRow>\n </>\n );\n};\n\nexport default PermissionPoliciesFormRow;\n"],"names":["DeleteIcon"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import * as React from 'react';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState, useEffect } from 'react';
2
3
  import Table from '@mui/material/Table';
3
4
  import TableBody from '@mui/material/TableBody';
4
5
  import TableCell from '@mui/material/TableCell';
@@ -24,41 +25,43 @@ const PermissionPoliciesFormTableToolbar = ({
24
25
  search,
25
26
  setSearch
26
27
  }) => {
27
- return /* @__PURE__ */ React.createElement(
28
+ return /* @__PURE__ */ jsxs(
28
29
  Toolbar,
29
30
  {
30
31
  sx: {
31
32
  p: [4, 0, 2, 2]
32
- }
33
- },
34
- /* @__PURE__ */ React.createElement(
35
- Typography,
36
- {
37
- sx: {
38
- flex: "1 1 100%",
39
- fontWeight: (theme) => theme.typography.fontWeightBold
40
- },
41
- variant: "h5",
42
- id: "tableTitle",
43
- component: "div"
44
33
  },
45
- numSelected > 0 ? `${numSelected} plugins` : "No plugins selected"
46
- ),
47
- /* @__PURE__ */ React.createElement(
48
- TextField,
49
- {
50
- sx: { width: "30%" },
51
- id: "input-with-icon-textfield",
52
- placeholder: "Search",
53
- value: search,
54
- onChange: (e) => setSearch(e.target.value),
55
- InputProps: {
56
- startAdornment: /* @__PURE__ */ React.createElement(InputAdornment, { position: "start" }, /* @__PURE__ */ React.createElement(SearchIcon, null)),
57
- endAdornment: /* @__PURE__ */ React.createElement(InputAdornment, { position: "start" }, /* @__PURE__ */ React.createElement(IconButton, { onClick: () => setSearch("") }, /* @__PURE__ */ React.createElement(ClearIcon, null)))
58
- },
59
- variant: "standard"
60
- }
61
- )
34
+ children: [
35
+ /* @__PURE__ */ jsx(
36
+ Typography,
37
+ {
38
+ sx: {
39
+ flex: "1 1 100%",
40
+ fontWeight: (theme) => theme.typography.fontWeightBold
41
+ },
42
+ variant: "h5",
43
+ id: "tableTitle",
44
+ component: "div",
45
+ children: numSelected > 0 ? `${numSelected} plugins` : "No plugins selected"
46
+ }
47
+ ),
48
+ /* @__PURE__ */ jsx(
49
+ TextField,
50
+ {
51
+ sx: { width: "30%" },
52
+ id: "input-with-icon-textfield",
53
+ placeholder: "Search",
54
+ value: search,
55
+ onChange: (e) => setSearch(e.target.value),
56
+ InputProps: {
57
+ startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx(SearchIcon, {}) }),
58
+ endAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx(IconButton, { onClick: () => setSearch(""), children: /* @__PURE__ */ jsx(ClearIcon, {}) }) })
59
+ },
60
+ variant: "standard"
61
+ }
62
+ )
63
+ ]
64
+ }
62
65
  );
63
66
  };
64
67
  const PermissionPoliciesFormTable = ({
@@ -72,12 +75,12 @@ const PermissionPoliciesFormTable = ({
72
75
  onRemovePlugin,
73
76
  onAddConditions
74
77
  }) => {
75
- const [page, setPage] = React.useState(0);
76
- const [rowsPerPage, setRowsPerPage] = React.useState(5);
77
- const [open, setOpen] = React.useState(false);
78
- const [search, setSearch] = React.useState("");
79
- const [filteredData, setFilteredData] = React.useState([]);
80
- React.useEffect(() => {
78
+ const [page, setPage] = useState(0);
79
+ const [rowsPerPage, setRowsPerPage] = useState(5);
80
+ const [open, setOpen] = useState(false);
81
+ const [search, setSearch] = useState("");
82
+ const [filteredData, setFilteredData] = useState([]);
83
+ useEffect(() => {
81
84
  if (search)
82
85
  setFilteredData(
83
86
  data?.filter((row) => row.plugin.includes(search)) ?? []
@@ -91,83 +94,96 @@ const PermissionPoliciesFormTable = ({
91
94
  setRowsPerPage(+event.target.value);
92
95
  setPage(0);
93
96
  };
94
- return /* @__PURE__ */ React.createElement(Paper, { sx: { width: "100%", mb: 2, p: 2 } }, /* @__PURE__ */ React.createElement(
95
- PermissionPoliciesFormTableToolbar,
96
- {
97
- numSelected: selectedPluginsCount,
98
- search,
99
- setSearch
100
- }
101
- ), /* @__PURE__ */ React.createElement(TableContainer, { component: Paper, sx: { outline: "0" } }, /* @__PURE__ */ React.createElement(Table, { "aria-label": "collapsible table" }, /* @__PURE__ */ React.createElement(TableHead, null, /* @__PURE__ */ React.createElement(TableRow, null, /* @__PURE__ */ React.createElement(
102
- TableCell,
103
- {
104
- align: "left",
105
- sx: {
106
- display: "flex",
107
- alignItems: "center",
108
- width: "100%",
109
- fontWeight: (theme) => theme.typography.fontWeightBold
110
- }
111
- },
112
- /* @__PURE__ */ React.createElement(
113
- IconButton,
97
+ return /* @__PURE__ */ jsxs(Paper, { sx: { width: "100%", mb: 2, p: 2 }, children: [
98
+ /* @__PURE__ */ jsx(
99
+ PermissionPoliciesFormTableToolbar,
114
100
  {
115
- "aria-label": "expand row",
116
- size: "small",
117
- onClick: () => setOpen(!open)
118
- },
119
- open ? /* @__PURE__ */ React.createElement(ArrowDownIcon, null) : /* @__PURE__ */ React.createElement(ArrowRightIcon, null)
120
- ),
121
- "Name"
122
- ), /* @__PURE__ */ React.createElement(
123
- TableCell,
124
- {
125
- align: "left",
126
- sx: {
127
- width: "60%",
128
- fontWeight: (theme) => theme.typography.fontWeightBold
101
+ numSelected: selectedPluginsCount,
102
+ search,
103
+ setSearch
129
104
  }
130
- },
131
- "Permission"
132
- ), /* @__PURE__ */ React.createElement(
133
- TableCell,
134
- {
135
- align: "right",
136
- sx: {
137
- width: "10%",
138
- fontWeight: (theme) => theme.typography.fontWeightBold
105
+ ),
106
+ /* @__PURE__ */ jsx(TableContainer, { component: Paper, sx: { outline: "0" }, children: /* @__PURE__ */ jsxs(Table, { "aria-label": "collapsible table", children: [
107
+ /* @__PURE__ */ jsx(TableHead, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
108
+ /* @__PURE__ */ jsxs(
109
+ TableCell,
110
+ {
111
+ align: "left",
112
+ sx: {
113
+ display: "flex",
114
+ alignItems: "center",
115
+ width: "100%",
116
+ fontWeight: (theme) => theme.typography.fontWeightBold
117
+ },
118
+ children: [
119
+ /* @__PURE__ */ jsx(
120
+ IconButton,
121
+ {
122
+ "aria-label": "expand row",
123
+ size: "small",
124
+ onClick: () => setOpen(!open),
125
+ children: open ? /* @__PURE__ */ jsx(ArrowDownIcon, {}) : /* @__PURE__ */ jsx(ArrowRightIcon, {})
126
+ }
127
+ ),
128
+ "Name"
129
+ ]
130
+ }
131
+ ),
132
+ /* @__PURE__ */ jsx(
133
+ TableCell,
134
+ {
135
+ align: "left",
136
+ sx: {
137
+ width: "60%",
138
+ fontWeight: (theme) => theme.typography.fontWeightBold
139
+ },
140
+ children: "Permission"
141
+ }
142
+ ),
143
+ /* @__PURE__ */ jsx(
144
+ TableCell,
145
+ {
146
+ align: "right",
147
+ sx: {
148
+ width: "10%",
149
+ fontWeight: (theme) => theme.typography.fontWeightBold
150
+ },
151
+ children: "Actions"
152
+ }
153
+ )
154
+ ] }) }),
155
+ /* @__PURE__ */ jsx(TableBody, { children: filteredData.length > 0 ? filteredData.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage).map((row) => /* @__PURE__ */ jsx(
156
+ PermissionPoliciesFormRow,
157
+ {
158
+ rowData: row,
159
+ conditionRulesData,
160
+ permissionPoliciesRows,
161
+ open,
162
+ onSelectPermission,
163
+ onSelectPolicy,
164
+ onRemovePermission,
165
+ onRemovePlugin,
166
+ setOpen,
167
+ onAddConditions
168
+ },
169
+ row.plugin
170
+ )) : /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, { colSpan: 4, children: /* @__PURE__ */ jsx(Box, { sx: { display: "flex", justifyContent: "center", p: 2 }, children: search && !filteredData.length ? "No records to display." : "Selected plugins appear here." }) }) }) })
171
+ ] }) }),
172
+ /* @__PURE__ */ jsx(
173
+ TablePagination,
174
+ {
175
+ rowsPerPageOptions: [5, 10, 20],
176
+ component: "div",
177
+ count: data.length,
178
+ rowsPerPage,
179
+ page,
180
+ showFirstButton: true,
181
+ showLastButton: true,
182
+ onPageChange: handleChangePage,
183
+ onRowsPerPageChange: handleChangeRowsPerPage
139
184
  }
140
- },
141
- "Actions"
142
- ))), /* @__PURE__ */ React.createElement(TableBody, null, filteredData.length > 0 ? filteredData.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage).map((row) => /* @__PURE__ */ React.createElement(
143
- PermissionPoliciesFormRow,
144
- {
145
- key: row.plugin,
146
- rowData: row,
147
- conditionRulesData,
148
- permissionPoliciesRows,
149
- open,
150
- onSelectPermission,
151
- onSelectPolicy,
152
- onRemovePermission,
153
- onRemovePlugin,
154
- setOpen,
155
- onAddConditions
156
- }
157
- )) : /* @__PURE__ */ React.createElement(TableRow, null, /* @__PURE__ */ React.createElement(TableCell, { colSpan: 4 }, /* @__PURE__ */ React.createElement(Box, { sx: { display: "flex", justifyContent: "center", p: 2 } }, search && !filteredData.length ? "No records to display." : "Selected plugins appear here.")))))), /* @__PURE__ */ React.createElement(
158
- TablePagination,
159
- {
160
- rowsPerPageOptions: [5, 10, 20],
161
- component: "div",
162
- count: data.length,
163
- rowsPerPage,
164
- page,
165
- showFirstButton: true,
166
- showLastButton: true,
167
- onPageChange: handleChangePage,
168
- onRowsPerPageChange: handleChangeRowsPerPage
169
- }
170
- ));
185
+ )
186
+ ] });
171
187
  };
172
188
 
173
189
  export { PermissionPoliciesFormTable as default };
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionPoliciesFormTable.esm.js","sources":["../../../src/components/CreateRole/PermissionPoliciesFormTable.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 * as React from 'react';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TablePagination from '@mui/material/TablePagination';\nimport TableRow from '@mui/material/TableRow';\nimport Toolbar from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\nimport Paper from '@mui/material/Paper';\nimport IconButton from '@mui/material/IconButton';\nimport SearchIcon from '@mui/icons-material/Search';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport ArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';\nimport ArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport { PermissionsData } from '../../types';\nimport { ConditionRulesData, ConditionsData } from '../ConditionalAccess/types';\nimport PermissionPoliciesFormRow from './PermissionPoliciesFormRow';\nimport Box from '@mui/material/Box';\nimport TextField from '@mui/material/TextField';\nimport InputAdornment from '@mui/material/InputAdornment';\n\ninterface PermissionPoliciesTableToolbarProps {\n numSelected: number;\n search: string;\n setSearch: React.Dispatch<React.SetStateAction<string>>;\n}\n\nconst PermissionPoliciesFormTableToolbar = ({\n numSelected,\n search,\n setSearch,\n}: PermissionPoliciesTableToolbarProps) => {\n return (\n <Toolbar\n sx={{\n p: [4, 0, 2, 2],\n }}\n >\n <Typography\n sx={{\n flex: '1 1 100%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n variant=\"h5\"\n id=\"tableTitle\"\n component=\"div\"\n >\n {numSelected > 0 ? `${numSelected} plugins` : 'No plugins selected'}\n </Typography>\n\n <TextField\n sx={{ width: '30%' }}\n id=\"input-with-icon-textfield\"\n placeholder=\"Search\"\n value={search}\n onChange={e => setSearch(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment position=\"start\">\n <IconButton onClick={() => setSearch('')}>\n <ClearIcon />\n </IconButton>\n </InputAdornment>\n ),\n }}\n variant=\"standard\"\n />\n </Toolbar>\n );\n};\n\nconst PermissionPoliciesFormTable = ({\n selectedPluginsCount,\n data,\n permissionPoliciesRows,\n conditionRulesData,\n onSelectPermission,\n onSelectPolicy,\n onRemovePermission,\n onRemovePlugin,\n onAddConditions,\n}: {\n selectedPluginsCount: number;\n data: any;\n permissionPoliciesRows: PermissionsData[];\n conditionRulesData?: ConditionRulesData;\n onRemovePermission: (index: number) => void;\n onSelectPermission: (\n plugin: string,\n permission: string,\n isResourced: boolean,\n policies: string[],\n resourceType?: string,\n ) => void;\n onSelectPolicy: (\n isChecked: boolean,\n policyIndex: number,\n pIndex: number,\n ) => void;\n onRemovePlugin: (plugin: string) => void;\n onAddConditions: (index: number, conditions?: ConditionsData) => void;\n}) => {\n const [page, setPage] = React.useState(0);\n const [rowsPerPage, setRowsPerPage] = React.useState(5);\n const [open, setOpen] = React.useState<boolean>(false);\n const [search, setSearch] = React.useState<string>('');\n const [filteredData, setFilteredData] = React.useState<any>([]);\n\n React.useEffect(() => {\n if (search)\n setFilteredData(\n data?.filter((row: any) => row.plugin.includes(search)) ?? [],\n );\n else setFilteredData(data);\n }, [search, data]);\n\n const handleChangePage = (_event: unknown, newPage: number) => {\n setPage(newPage);\n };\n\n const handleChangeRowsPerPage = (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n setRowsPerPage(+event.target.value);\n setPage(0);\n };\n\n return (\n <Paper sx={{ width: '100%', mb: 2, p: 2 }}>\n <PermissionPoliciesFormTableToolbar\n numSelected={selectedPluginsCount}\n search={search}\n setSearch={setSearch}\n />\n <TableContainer component={Paper} sx={{ outline: '0' }}>\n <Table aria-label=\"collapsible table\">\n <TableHead>\n <TableRow>\n <TableCell\n align=\"left\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n >\n <IconButton\n aria-label=\"expand row\"\n size=\"small\"\n onClick={() => setOpen(!open)}\n >\n {open ? <ArrowDownIcon /> : <ArrowRightIcon />}\n </IconButton>\n Name\n </TableCell>\n <TableCell\n align=\"left\"\n sx={{\n width: '60%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n >\n Permission\n </TableCell>\n <TableCell\n align=\"right\"\n sx={{\n width: '10%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n >\n Actions\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredData.length > 0 ? (\n filteredData\n .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\n .map((row: any) => (\n <PermissionPoliciesFormRow\n key={row.plugin}\n rowData={row}\n conditionRulesData={conditionRulesData}\n permissionPoliciesRows={permissionPoliciesRows}\n open={open}\n onSelectPermission={onSelectPermission}\n onSelectPolicy={onSelectPolicy}\n onRemovePermission={onRemovePermission}\n onRemovePlugin={onRemovePlugin}\n setOpen={setOpen}\n onAddConditions={onAddConditions}\n />\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={4}>\n <Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>\n {search && !filteredData.length\n ? 'No records to display.'\n : 'Selected plugins appear here.'}\n </Box>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n <TablePagination\n rowsPerPageOptions={[5, 10, 20]}\n component=\"div\"\n count={data.length}\n rowsPerPage={rowsPerPage}\n page={page}\n showFirstButton\n showLastButton\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n />\n </Paper>\n );\n};\n\nexport default PermissionPoliciesFormTable;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PermissionPoliciesFormTable.esm.js","sources":["../../../src/components/CreateRole/PermissionPoliciesFormTable.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { SetStateAction, Dispatch, ChangeEvent } from 'react';\n\nimport { useState, useEffect } from 'react';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TablePagination from '@mui/material/TablePagination';\nimport TableRow from '@mui/material/TableRow';\nimport Toolbar from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\nimport Paper from '@mui/material/Paper';\nimport IconButton from '@mui/material/IconButton';\nimport SearchIcon from '@mui/icons-material/Search';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport ArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';\nimport ArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport { PermissionsData } from '../../types';\nimport { ConditionRulesData, ConditionsData } from '../ConditionalAccess/types';\nimport PermissionPoliciesFormRow from './PermissionPoliciesFormRow';\nimport Box from '@mui/material/Box';\nimport TextField from '@mui/material/TextField';\nimport InputAdornment from '@mui/material/InputAdornment';\n\ninterface PermissionPoliciesTableToolbarProps {\n numSelected: number;\n search: string;\n setSearch: Dispatch<SetStateAction<string>>;\n}\n\nconst PermissionPoliciesFormTableToolbar = ({\n numSelected,\n search,\n setSearch,\n}: PermissionPoliciesTableToolbarProps) => {\n return (\n <Toolbar\n sx={{\n p: [4, 0, 2, 2],\n }}\n >\n <Typography\n sx={{\n flex: '1 1 100%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n variant=\"h5\"\n id=\"tableTitle\"\n component=\"div\"\n >\n {numSelected > 0 ? `${numSelected} plugins` : 'No plugins selected'}\n </Typography>\n\n <TextField\n sx={{ width: '30%' }}\n id=\"input-with-icon-textfield\"\n placeholder=\"Search\"\n value={search}\n onChange={e => setSearch(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment position=\"start\">\n <IconButton onClick={() => setSearch('')}>\n <ClearIcon />\n </IconButton>\n </InputAdornment>\n ),\n }}\n variant=\"standard\"\n />\n </Toolbar>\n );\n};\n\nconst PermissionPoliciesFormTable = ({\n selectedPluginsCount,\n data,\n permissionPoliciesRows,\n conditionRulesData,\n onSelectPermission,\n onSelectPolicy,\n onRemovePermission,\n onRemovePlugin,\n onAddConditions,\n}: {\n selectedPluginsCount: number;\n data: any;\n permissionPoliciesRows: PermissionsData[];\n conditionRulesData?: ConditionRulesData;\n onRemovePermission: (index: number) => void;\n onSelectPermission: (\n plugin: string,\n permission: string,\n isResourced: boolean,\n policies: string[],\n resourceType?: string,\n ) => void;\n onSelectPolicy: (\n isChecked: boolean,\n policyIndex: number,\n pIndex: number,\n ) => void;\n onRemovePlugin: (plugin: string) => void;\n onAddConditions: (index: number, conditions?: ConditionsData) => void;\n}) => {\n const [page, setPage] = useState(0);\n const [rowsPerPage, setRowsPerPage] = useState(5);\n const [open, setOpen] = useState<boolean>(false);\n const [search, setSearch] = useState<string>('');\n const [filteredData, setFilteredData] = useState<any>([]);\n\n useEffect(() => {\n if (search)\n setFilteredData(\n data?.filter((row: any) => row.plugin.includes(search)) ?? [],\n );\n else setFilteredData(data);\n }, [search, data]);\n\n const handleChangePage = (_event: unknown, newPage: number) => {\n setPage(newPage);\n };\n\n const handleChangeRowsPerPage = (event: ChangeEvent<HTMLInputElement>) => {\n setRowsPerPage(+event.target.value);\n setPage(0);\n };\n\n return (\n <Paper sx={{ width: '100%', mb: 2, p: 2 }}>\n <PermissionPoliciesFormTableToolbar\n numSelected={selectedPluginsCount}\n search={search}\n setSearch={setSearch}\n />\n <TableContainer component={Paper} sx={{ outline: '0' }}>\n <Table aria-label=\"collapsible table\">\n <TableHead>\n <TableRow>\n <TableCell\n align=\"left\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n >\n <IconButton\n aria-label=\"expand row\"\n size=\"small\"\n onClick={() => setOpen(!open)}\n >\n {open ? <ArrowDownIcon /> : <ArrowRightIcon />}\n </IconButton>\n Name\n </TableCell>\n <TableCell\n align=\"left\"\n sx={{\n width: '60%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n >\n Permission\n </TableCell>\n <TableCell\n align=\"right\"\n sx={{\n width: '10%',\n fontWeight: theme => theme.typography.fontWeightBold,\n }}\n >\n Actions\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredData.length > 0 ? (\n filteredData\n .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\n .map((row: any) => (\n <PermissionPoliciesFormRow\n key={row.plugin}\n rowData={row}\n conditionRulesData={conditionRulesData}\n permissionPoliciesRows={permissionPoliciesRows}\n open={open}\n onSelectPermission={onSelectPermission}\n onSelectPolicy={onSelectPolicy}\n onRemovePermission={onRemovePermission}\n onRemovePlugin={onRemovePlugin}\n setOpen={setOpen}\n onAddConditions={onAddConditions}\n />\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={4}>\n <Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>\n {search && !filteredData.length\n ? 'No records to display.'\n : 'Selected plugins appear here.'}\n </Box>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n <TablePagination\n rowsPerPageOptions={[5, 10, 20]}\n component=\"div\"\n count={data.length}\n rowsPerPage={rowsPerPage}\n page={page}\n showFirstButton\n showLastButton\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n />\n </Paper>\n );\n};\n\nexport default PermissionPoliciesFormTable;\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
+ import { jsx } from 'react/jsx-runtime';
1
2
  import Autocomplete from '@mui/material/Autocomplete';
2
- import React__default from 'react';
3
+ import { useEffect } from 'react';
3
4
  import { PluginsDropdownOption } from './PluginsDropdownOption.esm.js';
4
5
  import TextField from '@mui/material/TextField';
5
6
 
@@ -12,11 +13,11 @@ const PluginsDropdown = ({
12
13
  onRemoveAllPlugins,
13
14
  selectedPluginsError
14
15
  }) => {
15
- React__default.useEffect(() => {
16
+ useEffect(() => {
16
17
  if (selectedPlugins.length === allPlugins.length - 1)
17
18
  setFieldValue(`selectedPlugins`, allPlugins, true);
18
19
  }, []);
19
- return /* @__PURE__ */ React__default.createElement(
20
+ return /* @__PURE__ */ jsx(
20
21
  Autocomplete,
21
22
  {
22
23
  options: allPlugins,
@@ -45,8 +46,8 @@ const PluginsDropdown = ({
45
46
  }
46
47
  }
47
48
  },
48
- renderOption: (props, option, state) => /* @__PURE__ */ React__default.createElement(PluginsDropdownOption, { props, option, state }),
49
- renderInput: (params) => /* @__PURE__ */ React__default.createElement(
49
+ renderOption: (props, option, state) => /* @__PURE__ */ jsx(PluginsDropdownOption, { props, option, state }),
50
+ renderInput: (params) => /* @__PURE__ */ jsx(
50
51
  TextField,
51
52
  {
52
53
  ...params,
@@ -1 +1 @@
1
- {"version":3,"file":"PluginsDropdown.esm.js","sources":["../../../src/components/CreateRole/PluginsDropdown.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 Autocomplete from '@mui/material/Autocomplete';\nimport React from 'react';\nimport { SelectedPlugin } from '../../types';\nimport { PluginsDropdownOption } from './PluginsDropdownOption';\nimport TextField from '@mui/material/TextField';\nimport { FormikErrors } from 'formik';\nimport { RoleFormValues } from './types';\n\ntype PluginsDropdownProps = {\n allPlugins: SelectedPlugin[];\n selectedPlugins: SelectedPlugin[];\n setFieldValue: (\n field: string,\n value: any,\n shouldValidate?: boolean,\n ) => Promise<FormikErrors<RoleFormValues>> | Promise<void>;\n handleBlur: React.FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;\n onRemoveAllPlugins: () => void;\n onRemovePlugin: (plugin: string) => void;\n selectedPluginsError: string;\n};\n\nconst PluginsDropdown = ({\n allPlugins,\n selectedPlugins,\n setFieldValue,\n handleBlur,\n onRemovePlugin,\n onRemoveAllPlugins,\n selectedPluginsError,\n}: PluginsDropdownProps) => {\n React.useEffect(() => {\n if (selectedPlugins.length === allPlugins.length - 1)\n setFieldValue(`selectedPlugins`, allPlugins, true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return (\n <Autocomplete\n options={allPlugins}\n renderTags={() => ''}\n isOptionEqualToValue={(option, value) => option.label === value.label}\n multiple\n disableCloseOnSelect\n getOptionLabel={option => option.label}\n style={{ width: '30%', flexGrow: '1' }}\n value={selectedPlugins || null}\n onChange={(_e, selPlugins, reason, selOption) => {\n const pVal = selOption?.option.value;\n if (pVal === '') {\n if (reason === 'selectOption') {\n setFieldValue(`selectedPlugins`, allPlugins, true);\n } else if (reason === 'removeOption') {\n onRemoveAllPlugins();\n }\n } else if (pVal) {\n if (reason === 'removeOption') {\n onRemovePlugin(pVal);\n } else if (reason === 'selectOption') {\n if (selPlugins.length === allPlugins.length - 1)\n setFieldValue(`selectedPlugins`, allPlugins, true);\n else setFieldValue(`selectedPlugins`, selPlugins, true);\n }\n }\n }}\n renderOption={(props, option: SelectedPlugin, state) => (\n <PluginsDropdownOption props={props} option={option} state={state} />\n )}\n renderInput={(params: any) => (\n <TextField\n {...params}\n label=\"Select plugins\"\n variant=\"outlined\"\n error={!!selectedPluginsError}\n helperText={selectedPluginsError ?? ''}\n onBlur={handleBlur}\n required\n />\n )}\n />\n );\n};\n\nexport default PluginsDropdown;\n"],"names":["React"],"mappings":";;;;;AAqCA,MAAM,kBAAkB,CAAC;AAAA,EACvB,UAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAA4B,KAAA;AAC1B,EAAAA,cAAA,CAAM,UAAU,MAAM;AACpB,IAAI,IAAA,eAAA,CAAgB,MAAW,KAAA,UAAA,CAAW,MAAS,GAAA,CAAA;AACjD,MAAc,aAAA,CAAA,CAAA,eAAA,CAAA,EAAmB,YAAY,IAAI,CAAA;AAAA,GAErD,EAAG,EAAE,CAAA;AACL,EACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,OAAS,EAAA,UAAA;AAAA,MACT,YAAY,MAAM,EAAA;AAAA,MAClB,sBAAsB,CAAC,MAAA,EAAQ,KAAU,KAAA,MAAA,CAAO,UAAU,KAAM,CAAA,KAAA;AAAA,MAChE,QAAQ,EAAA,IAAA;AAAA,MACR,oBAAoB,EAAA,IAAA;AAAA,MACpB,cAAA,EAAgB,YAAU,MAAO,CAAA,KAAA;AAAA,MACjC,KAAO,EAAA,EAAE,KAAO,EAAA,KAAA,EAAO,UAAU,GAAI,EAAA;AAAA,MACrC,OAAO,eAAmB,IAAA,IAAA;AAAA,MAC1B,QAAU,EAAA,CAAC,EAAI,EAAA,UAAA,EAAY,QAAQ,SAAc,KAAA;AAC/C,QAAM,MAAA,IAAA,GAAO,WAAW,MAAO,CAAA,KAAA;AAC/B,QAAA,IAAI,SAAS,EAAI,EAAA;AACf,UAAA,IAAI,WAAW,cAAgB,EAAA;AAC7B,YAAc,aAAA,CAAA,CAAA,eAAA,CAAA,EAAmB,YAAY,IAAI,CAAA;AAAA,WACnD,MAAA,IAAW,WAAW,cAAgB,EAAA;AACpC,YAAmB,kBAAA,EAAA;AAAA;AACrB,mBACS,IAAM,EAAA;AACf,UAAA,IAAI,WAAW,cAAgB,EAAA;AAC7B,YAAA,cAAA,CAAe,IAAI,CAAA;AAAA,WACrB,MAAA,IAAW,WAAW,cAAgB,EAAA;AACpC,YAAI,IAAA,UAAA,CAAW,MAAW,KAAA,UAAA,CAAW,MAAS,GAAA,CAAA;AAC5C,cAAc,aAAA,CAAA,CAAA,eAAA,CAAA,EAAmB,YAAY,IAAI,CAAA;AAAA,iBAC9C,aAAA,CAAc,CAAmB,eAAA,CAAA,EAAA,UAAA,EAAY,IAAI,CAAA;AAAA;AACxD;AACF,OACF;AAAA,MACA,YAAA,EAAc,CAAC,KAAO,EAAA,MAAA,EAAwB,0BAC3CA,cAAA,CAAA,aAAA,CAAA,qBAAA,EAAA,EAAsB,KAAc,EAAA,MAAA,EAAgB,KAAc,EAAA,CAAA;AAAA,MAErE,WAAA,EAAa,CAAC,MACZ,qBAAAA,cAAA,CAAA,aAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,KAAM,EAAA,gBAAA;AAAA,UACN,OAAQ,EAAA,UAAA;AAAA,UACR,KAAA,EAAO,CAAC,CAAC,oBAAA;AAAA,UACT,YAAY,oBAAwB,IAAA,EAAA;AAAA,UACpC,MAAQ,EAAA,UAAA;AAAA,UACR,QAAQ,EAAA;AAAA;AAAA;AACV;AAAA,GAEJ;AAEJ;;;;"}
1
+ {"version":3,"file":"PluginsDropdown.esm.js","sources":["../../../src/components/CreateRole/PluginsDropdown.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 Autocomplete from '@mui/material/Autocomplete';\nimport type { FocusEventHandler } from 'react';\nimport { useEffect } from 'react';\nimport { SelectedPlugin } from '../../types';\nimport { PluginsDropdownOption } from './PluginsDropdownOption';\nimport TextField from '@mui/material/TextField';\nimport { FormikErrors } from 'formik';\nimport { RoleFormValues } from './types';\n\ntype PluginsDropdownProps = {\n allPlugins: SelectedPlugin[];\n selectedPlugins: SelectedPlugin[];\n setFieldValue: (\n field: string,\n value: any,\n shouldValidate?: boolean,\n ) => Promise<FormikErrors<RoleFormValues>> | Promise<void>;\n handleBlur: FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;\n onRemoveAllPlugins: () => void;\n onRemovePlugin: (plugin: string) => void;\n selectedPluginsError: string;\n};\n\nconst PluginsDropdown = ({\n allPlugins,\n selectedPlugins,\n setFieldValue,\n handleBlur,\n onRemovePlugin,\n onRemoveAllPlugins,\n selectedPluginsError,\n}: PluginsDropdownProps) => {\n useEffect(() => {\n if (selectedPlugins.length === allPlugins.length - 1)\n setFieldValue(`selectedPlugins`, allPlugins, true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return (\n <Autocomplete\n options={allPlugins}\n renderTags={() => ''}\n isOptionEqualToValue={(option, value) => option.label === value.label}\n multiple\n disableCloseOnSelect\n getOptionLabel={option => option.label}\n style={{ width: '30%', flexGrow: '1' }}\n value={selectedPlugins || null}\n onChange={(_e, selPlugins, reason, selOption) => {\n const pVal = selOption?.option.value;\n if (pVal === '') {\n if (reason === 'selectOption') {\n setFieldValue(`selectedPlugins`, allPlugins, true);\n } else if (reason === 'removeOption') {\n onRemoveAllPlugins();\n }\n } else if (pVal) {\n if (reason === 'removeOption') {\n onRemovePlugin(pVal);\n } else if (reason === 'selectOption') {\n if (selPlugins.length === allPlugins.length - 1)\n setFieldValue(`selectedPlugins`, allPlugins, true);\n else setFieldValue(`selectedPlugins`, selPlugins, true);\n }\n }\n }}\n renderOption={(props, option: SelectedPlugin, state) => (\n <PluginsDropdownOption props={props} option={option} state={state} />\n )}\n renderInput={(params: any) => (\n <TextField\n {...params}\n label=\"Select plugins\"\n variant=\"outlined\"\n error={!!selectedPluginsError}\n helperText={selectedPluginsError ?? ''}\n onBlur={handleBlur}\n required\n />\n )}\n />\n );\n};\n\nexport default PluginsDropdown;\n"],"names":[],"mappings":";;;;;;AAsCA,MAAM,kBAAkB,CAAC;AAAA,EACvB,UAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAA4B,KAAA;AAC1B,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,eAAA,CAAgB,MAAW,KAAA,UAAA,CAAW,MAAS,GAAA,CAAA;AACjD,MAAc,aAAA,CAAA,CAAA,eAAA,CAAA,EAAmB,YAAY,IAAI,CAAA;AAAA,GAErD,EAAG,EAAE,CAAA;AACL,EACE,uBAAA,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,OAAS,EAAA,UAAA;AAAA,MACT,YAAY,MAAM,EAAA;AAAA,MAClB,sBAAsB,CAAC,MAAA,EAAQ,KAAU,KAAA,MAAA,CAAO,UAAU,KAAM,CAAA,KAAA;AAAA,MAChE,QAAQ,EAAA,IAAA;AAAA,MACR,oBAAoB,EAAA,IAAA;AAAA,MACpB,cAAA,EAAgB,YAAU,MAAO,CAAA,KAAA;AAAA,MACjC,KAAO,EAAA,EAAE,KAAO,EAAA,KAAA,EAAO,UAAU,GAAI,EAAA;AAAA,MACrC,OAAO,eAAmB,IAAA,IAAA;AAAA,MAC1B,QAAU,EAAA,CAAC,EAAI,EAAA,UAAA,EAAY,QAAQ,SAAc,KAAA;AAC/C,QAAM,MAAA,IAAA,GAAO,WAAW,MAAO,CAAA,KAAA;AAC/B,QAAA,IAAI,SAAS,EAAI,EAAA;AACf,UAAA,IAAI,WAAW,cAAgB,EAAA;AAC7B,YAAc,aAAA,CAAA,CAAA,eAAA,CAAA,EAAmB,YAAY,IAAI,CAAA;AAAA,WACnD,MAAA,IAAW,WAAW,cAAgB,EAAA;AACpC,YAAmB,kBAAA,EAAA;AAAA;AACrB,mBACS,IAAM,EAAA;AACf,UAAA,IAAI,WAAW,cAAgB,EAAA;AAC7B,YAAA,cAAA,CAAe,IAAI,CAAA;AAAA,WACrB,MAAA,IAAW,WAAW,cAAgB,EAAA;AACpC,YAAI,IAAA,UAAA,CAAW,MAAW,KAAA,UAAA,CAAW,MAAS,GAAA,CAAA;AAC5C,cAAc,aAAA,CAAA,CAAA,eAAA,CAAA,EAAmB,YAAY,IAAI,CAAA;AAAA,iBAC9C,aAAA,CAAc,CAAmB,eAAA,CAAA,EAAA,UAAA,EAAY,IAAI,CAAA;AAAA;AACxD;AACF,OACF;AAAA,MACA,YAAA,EAAc,CAAC,KAAO,EAAA,MAAA,EAAwB,0BAC3C,GAAA,CAAA,qBAAA,EAAA,EAAsB,KAAc,EAAA,MAAA,EAAgB,KAAc,EAAA,CAAA;AAAA,MAErE,WAAA,EAAa,CAAC,MACZ,qBAAA,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,KAAM,EAAA,gBAAA;AAAA,UACN,OAAQ,EAAA,UAAA;AAAA,UACR,KAAA,EAAO,CAAC,CAAC,oBAAA;AAAA,UACT,YAAY,oBAAwB,IAAA,EAAA;AAAA,UACpC,MAAQ,EAAA,UAAA;AAAA,UACR,QAAQ,EAAA;AAAA;AAAA;AACV;AAAA,GAEJ;AAEJ;;;;"}