@backstage-community/plugin-rbac 1.32.2 → 1.32.4

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 (64) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/api/LicensedUsersClient.esm.js.map +1 -1
  3. package/dist/api/RBACBackendClient.esm.js.map +1 -1
  4. package/dist/components/Administration.esm.js.map +1 -1
  5. package/dist/components/ConditionalAccess/AddNestedConditionButton.esm.js.map +1 -1
  6. package/dist/components/ConditionalAccess/ComplexConditionRow.esm.js.map +1 -1
  7. package/dist/components/ConditionalAccess/ComplexConditionRowButtons.esm.js.map +1 -1
  8. package/dist/components/ConditionalAccess/ConditionRule.esm.js.map +1 -1
  9. package/dist/components/ConditionalAccess/ConditionalAccessSidebar.esm.js.map +1 -1
  10. package/dist/components/ConditionalAccess/ConditionsForm.esm.js.map +1 -1
  11. package/dist/components/ConditionalAccess/ConditionsFormRow.esm.js.map +1 -1
  12. package/dist/components/ConditionalAccess/ConditionsFormRowFields.esm.js.map +1 -1
  13. package/dist/components/ConditionalAccess/CriteriaToggleButton.esm.js.map +1 -1
  14. package/dist/components/ConditionalAccess/CustomArrayField.esm.js.map +1 -1
  15. package/dist/components/ConditionalAccess/RulesDropdownOption.esm.js.map +1 -1
  16. package/dist/components/ConditionalAccess/const.esm.js.map +1 -1
  17. package/dist/components/ConditionalAccess/types.esm.js.map +1 -1
  18. package/dist/components/CreateRole/AddMembersForm.esm.js.map +1 -1
  19. package/dist/components/CreateRole/AddedMembersTable.esm.js.map +1 -1
  20. package/dist/components/CreateRole/AddedMembersTableColumn.esm.js.map +1 -1
  21. package/dist/components/CreateRole/CreateRolePage.esm.js.map +1 -1
  22. package/dist/components/CreateRole/EditRolePage.esm.js.map +1 -1
  23. package/dist/components/CreateRole/MembersDropdownOption.esm.js.map +1 -1
  24. package/dist/components/CreateRole/PermissionPoliciesForm.esm.js.map +1 -1
  25. package/dist/components/CreateRole/PermissionPoliciesFormRow.esm.js.map +1 -1
  26. package/dist/components/CreateRole/PoliciesCheckboxGroup.esm.js.map +1 -1
  27. package/dist/components/CreateRole/ReviewStep.esm.js.map +1 -1
  28. package/dist/components/CreateRole/ReviewStepTable.esm.js.map +1 -1
  29. package/dist/components/CreateRole/RoleDetailsForm.esm.js.map +1 -1
  30. package/dist/components/CreateRole/RoleForm.esm.js.map +1 -1
  31. package/dist/components/CreateRole/SelectedPermissionPoliciesColumn.esm.js.map +1 -1
  32. package/dist/components/CreateRole/const.esm.js.map +1 -1
  33. package/dist/components/DownloadUserStatistics.esm.js.map +1 -1
  34. package/dist/components/EditRole.esm.js.map +1 -1
  35. package/dist/components/RbacPage.esm.js.map +1 -1
  36. package/dist/components/RoleOverview/AboutCard.esm.js.map +1 -1
  37. package/dist/components/RoleOverview/MembersCard.esm.js.map +1 -1
  38. package/dist/components/RoleOverview/MembersListColumns.esm.js.map +1 -1
  39. package/dist/components/RoleOverview/PermissionsCard.esm.js.map +1 -1
  40. package/dist/components/RoleOverview/PermissionsListColumns.esm.js.map +1 -1
  41. package/dist/components/RoleOverview/RoleOverviewPage.esm.js.map +1 -1
  42. package/dist/components/RolesList/DeleteRole.esm.js.map +1 -1
  43. package/dist/components/RolesList/DeleteRoleDialog.esm.js.map +1 -1
  44. package/dist/components/RolesList/RolesList.esm.js.map +1 -1
  45. package/dist/components/RolesList/RolesListColumns.esm.js.map +1 -1
  46. package/dist/components/RolesList/RolesListToolbar.esm.js.map +1 -1
  47. package/dist/components/Router.esm.js.map +1 -1
  48. package/dist/components/SnackbarAlert.esm.js.map +1 -1
  49. package/dist/components/ToastContext.esm.js.map +1 -1
  50. package/dist/hooks/useCheckIfLicensePluginEnabled.esm.js.map +1 -1
  51. package/dist/hooks/useConditionRules.esm.js.map +1 -1
  52. package/dist/hooks/useLocationToast.esm.js.map +1 -1
  53. package/dist/hooks/useMembers.esm.js.map +1 -1
  54. package/dist/hooks/usePermissionPolicies.esm.js.map +1 -1
  55. package/dist/hooks/useRole.esm.js.map +1 -1
  56. package/dist/hooks/useRoles.esm.js.map +1 -1
  57. package/dist/hooks/useSelectedMembers.esm.js.map +1 -1
  58. package/dist/plugin.esm.js.map +1 -1
  59. package/dist/routes.esm.js.map +1 -1
  60. package/dist/utils/conditional-access-utils.esm.js.map +1 -1
  61. package/dist/utils/create-role-utils.esm.js.map +1 -1
  62. package/dist/utils/rbac-utils.esm.js.map +1 -1
  63. package/dist/utils/role-form-utils.esm.js.map +1 -1
  64. package/package.json +4 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  ### Dependencies
2
2
 
3
+ ## 1.32.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 066b3bd: removed canvas from devDependencies
8
+
9
+ ## 1.32.3
10
+
11
+ ### Patch Changes
12
+
13
+ - dd0e2b4: chore: use workspace dependencies
14
+ - b7c2fa1: Updated supported-versions to ^1.28.4.
15
+ - Updated dependencies [b7c2fa1]
16
+ - @backstage-community/plugin-rbac-common@1.12.2
17
+
3
18
  ## 1.32.2
4
19
 
5
20
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"LicensedUsersClient.esm.js","sources":["../../src/api/LicensedUsersClient.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n ConfigApi,\n createApiRef,\n IdentityApi,\n} from '@backstage/core-plugin-api';\n\nexport type LicensedUsersAPI = {\n isLicensePluginEnabled(): Promise<boolean>;\n downloadStatistics: () => Promise<Response>;\n};\n\n// @public\nexport const licensedUsersApiRef = createApiRef<LicensedUsersAPI>({\n id: 'plugin.licensed-users-info.service',\n});\n\nexport type Options = {\n configApi: ConfigApi;\n identityApi: IdentityApi;\n};\n\nexport class LicensedUsersAPIClient implements LicensedUsersAPI {\n // @ts-ignore\n private readonly configApi: ConfigApi;\n private readonly identityApi: IdentityApi;\n\n constructor(options: Options) {\n this.configApi = options.configApi;\n this.identityApi = options.identityApi;\n }\n async isLicensePluginEnabled(): Promise<boolean> {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/licensed-users-info/health`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n },\n );\n\n return jsonResponse.ok;\n }\n\n async downloadStatistics(): Promise<Response> {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const response = await fetch(\n `${backendUrl}/api/licensed-users-info/users`,\n {\n method: 'GET',\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'text/csv',\n },\n },\n );\n return response;\n }\n}\n"],"names":[],"mappings":";;AA2BO,MAAM,sBAAsB,YAA+B,CAAA;AAAA,EAChE,EAAI,EAAA,oCAAA;AACN,CAAC,EAAA;AAOM,MAAM,sBAAmD,CAAA;AAAA;AAAA,EAE7C,SAAA,CAAA;AAAA,EACA,WAAA,CAAA;AAAA,EAEjB,YAAY,OAAkB,EAAA;AAC5B,IAAA,IAAA,CAAK,YAAY,OAAQ,CAAA,SAAA,CAAA;AACzB,IAAA,IAAA,CAAK,cAAc,OAAQ,CAAA,WAAA,CAAA;AAAA,GAC7B;AAAA,EACA,MAAM,sBAA2C,GAAA;AAC/C,IAAA,MAAM,EAAE,KAAO,EAAA,OAAA,KAAY,MAAM,IAAA,CAAK,YAAY,cAAe,EAAA,CAAA;AACjE,IAAA,MAAM,UAAa,GAAA,IAAA,CAAK,SAAU,CAAA,SAAA,CAAU,iBAAiB,CAAA,CAAA;AAC7D,IAAA,MAAM,eAAe,MAAM,KAAA;AAAA,MACzB,GAAG,UAAU,CAAA,+BAAA,CAAA;AAAA,MACb;AAAA,QACE,OAAS,EAAA;AAAA,UACP,GAAI,OAAW,IAAA,EAAE,aAAe,EAAA,CAAA,OAAA,EAAU,OAAO,CAAG,CAAA,EAAA;AAAA,SACtD;AAAA,OACF;AAAA,KACF,CAAA;AAEA,IAAA,OAAO,YAAa,CAAA,EAAA,CAAA;AAAA,GACtB;AAAA,EAEA,MAAM,kBAAwC,GAAA;AAC5C,IAAA,MAAM,EAAE,KAAO,EAAA,OAAA,KAAY,MAAM,IAAA,CAAK,YAAY,cAAe,EAAA,CAAA;AACjE,IAAA,MAAM,UAAa,GAAA,IAAA,CAAK,SAAU,CAAA,SAAA,CAAU,iBAAiB,CAAA,CAAA;AAC7D,IAAA,MAAM,WAAW,MAAM,KAAA;AAAA,MACrB,GAAG,UAAU,CAAA,8BAAA,CAAA;AAAA,MACb;AAAA,QACE,MAAQ,EAAA,KAAA;AAAA,QACR,OAAS,EAAA;AAAA,UACP,GAAI,OAAW,IAAA,EAAE,aAAe,EAAA,CAAA,OAAA,EAAU,OAAO,CAAG,CAAA,EAAA;AAAA,UACpD,cAAgB,EAAA,UAAA;AAAA,SAClB;AAAA,OACF;AAAA,KACF,CAAA;AACA,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AACF;;;;"}
1
+ {"version":3,"file":"LicensedUsersClient.esm.js","sources":["../../src/api/LicensedUsersClient.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n ConfigApi,\n createApiRef,\n IdentityApi,\n} from '@backstage/core-plugin-api';\n\nexport type LicensedUsersAPI = {\n isLicensePluginEnabled(): Promise<boolean>;\n downloadStatistics: () => Promise<Response>;\n};\n\n// @public\nexport const licensedUsersApiRef = createApiRef<LicensedUsersAPI>({\n id: 'plugin.licensed-users-info.service',\n});\n\nexport type Options = {\n configApi: ConfigApi;\n identityApi: IdentityApi;\n};\n\nexport class LicensedUsersAPIClient implements LicensedUsersAPI {\n // @ts-ignore\n private readonly configApi: ConfigApi;\n private readonly identityApi: IdentityApi;\n\n constructor(options: Options) {\n this.configApi = options.configApi;\n this.identityApi = options.identityApi;\n }\n async isLicensePluginEnabled(): Promise<boolean> {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/licensed-users-info/health`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n },\n );\n\n return jsonResponse.ok;\n }\n\n async downloadStatistics(): Promise<Response> {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const response = await fetch(\n `${backendUrl}/api/licensed-users-info/users`,\n {\n method: 'GET',\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'text/csv',\n },\n },\n );\n return response;\n }\n}\n"],"names":[],"mappings":";;AA2BO,MAAM,sBAAsB,YAA+B,CAAA;AAAA,EAChE,EAAI,EAAA;AACN,CAAC;AAOM,MAAM,sBAAmD,CAAA;AAAA;AAAA,EAE7C,SAAA;AAAA,EACA,WAAA;AAAA,EAEjB,YAAY,OAAkB,EAAA;AAC5B,IAAA,IAAA,CAAK,YAAY,OAAQ,CAAA,SAAA;AACzB,IAAA,IAAA,CAAK,cAAc,OAAQ,CAAA,WAAA;AAAA;AAC7B,EACA,MAAM,sBAA2C,GAAA;AAC/C,IAAA,MAAM,EAAE,KAAO,EAAA,OAAA,KAAY,MAAM,IAAA,CAAK,YAAY,cAAe,EAAA;AACjE,IAAA,MAAM,UAAa,GAAA,IAAA,CAAK,SAAU,CAAA,SAAA,CAAU,iBAAiB,CAAA;AAC7D,IAAA,MAAM,eAAe,MAAM,KAAA;AAAA,MACzB,GAAG,UAAU,CAAA,+BAAA,CAAA;AAAA,MACb;AAAA,QACE,OAAS,EAAA;AAAA,UACP,GAAI,OAAW,IAAA,EAAE,aAAe,EAAA,CAAA,OAAA,EAAU,OAAO,CAAG,CAAA;AAAA;AACtD;AACF,KACF;AAEA,IAAA,OAAO,YAAa,CAAA,EAAA;AAAA;AACtB,EAEA,MAAM,kBAAwC,GAAA;AAC5C,IAAA,MAAM,EAAE,KAAO,EAAA,OAAA,KAAY,MAAM,IAAA,CAAK,YAAY,cAAe,EAAA;AACjE,IAAA,MAAM,UAAa,GAAA,IAAA,CAAK,SAAU,CAAA,SAAA,CAAU,iBAAiB,CAAA;AAC7D,IAAA,MAAM,WAAW,MAAM,KAAA;AAAA,MACrB,GAAG,UAAU,CAAA,8BAAA,CAAA;AAAA,MACb;AAAA,QACE,MAAQ,EAAA,KAAA;AAAA,QACR,OAAS,EAAA;AAAA,UACP,GAAI,OAAW,IAAA,EAAE,aAAe,EAAA,CAAA,OAAA,EAAU,OAAO,CAAG,CAAA,EAAA;AAAA,UACpD,cAAgB,EAAA;AAAA;AAClB;AACF,KACF;AACA,IAAO,OAAA,QAAA;AAAA;AAEX;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RBACBackendClient.esm.js","sources":["../../src/api/RBACBackendClient.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport {\n ConfigApi,\n createApiRef,\n IdentityApi,\n} from '@backstage/core-plugin-api';\n\nimport {\n PermissionAction,\n PluginPermissionMetaData,\n Role,\n RoleBasedPolicy,\n RoleConditionalPolicyDecision,\n} from '@backstage-community/plugin-rbac-common';\n\nimport {\n MemberEntity,\n PluginConditionRules,\n RoleBasedConditions,\n RoleError,\n} from '../types';\n\n// @public\nexport type RBACAPI = {\n getUserAuthorization: () => Promise<{ status: string }>;\n getRoles: () => Promise<Role[] | Response>;\n getPolicies: () => Promise<RoleBasedPolicy[] | Response>;\n getAssociatedPolicies: (\n entityReference: string,\n ) => Promise<RoleBasedPolicy[] | Response>;\n deleteRole: (role: string) => Promise<Response>;\n getRole: (role: string) => Promise<Role[] | Response>;\n getMembers: () => Promise<MemberEntity[] | Response>;\n listPermissions: () => Promise<PluginPermissionMetaData[] | Response>;\n createRole: (role: Role) => Promise<RoleError | Response>;\n updateRole: (oldRole: Role, newRole: Role) => Promise<RoleError | Response>;\n updatePolicies: (\n entityReference: string,\n oldPolicy: RoleBasedPolicy[],\n newPolicy: RoleBasedPolicy[],\n ) => Promise<RoleError | Response>;\n createPolicies: (polices: RoleBasedPolicy[]) => Promise<RoleError | Response>;\n deletePolicies: (\n entityReference: string,\n polices: RoleBasedPolicy[],\n ) => Promise<RoleError | Response>;\n getPluginsConditionRules: () => Promise<PluginConditionRules[] | Response>;\n createConditionalPermission: (\n conditionalPermission: RoleBasedConditions,\n ) => Promise<RoleError | Response>;\n getRoleConditions: (\n roleRef: string,\n ) => Promise<RoleConditionalPolicyDecision<PermissionAction>[] | Response>;\n updateConditionalPolicies: (\n conditionId: number,\n data: RoleBasedConditions,\n ) => Promise<RoleError | Response>;\n deleteConditionalPolicies: (\n conditionId: number,\n ) => Promise<RoleError | Response>;\n};\n\nexport type Options = {\n configApi: ConfigApi;\n identityApi: IdentityApi;\n};\n\n// @public\nexport const rbacApiRef = createApiRef<RBACAPI>({\n id: 'plugin.rbac.service',\n});\n\nexport class RBACBackendClient implements RBACAPI {\n // @ts-ignore\n private readonly configApi: ConfigApi;\n private readonly identityApi: IdentityApi;\n\n constructor(options: Options) {\n this.configApi = options.configApi;\n this.identityApi = options.identityApi;\n }\n\n async getUserAuthorization() {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(`${backendUrl}/api/permission/`, {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n });\n return jsonResponse.json();\n }\n\n async getRoles() {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(`${backendUrl}/api/permission/roles`, {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n });\n\n if (jsonResponse.status !== 200 && jsonResponse.status !== 204) {\n return jsonResponse;\n }\n\n return jsonResponse.json();\n }\n\n async getPolicies() {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(`${backendUrl}/api/permission/policies`, {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n });\n if (jsonResponse.status !== 200 && jsonResponse.status !== 204) {\n return jsonResponse;\n }\n return jsonResponse.json();\n }\n\n async getAssociatedPolicies(entityReference: string) {\n const { kind, namespace, name } = parseEntityRef(entityReference);\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/policies/${kind}/${namespace}/${name}`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n },\n );\n if (jsonResponse.status !== 200 && jsonResponse.status !== 204) {\n return jsonResponse;\n }\n return jsonResponse.json();\n }\n\n async deleteRole(role: string) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const { kind, namespace, name } = parseEntityRef(role);\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/roles/${kind}/${namespace}/${name}`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n },\n method: 'DELETE',\n },\n );\n return jsonResponse;\n }\n\n async getRole(role: string) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const { kind, namespace, name } = parseEntityRef(role);\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/roles/${kind}/${namespace}/${name}`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n },\n },\n );\n if (jsonResponse.status !== 200 && jsonResponse.status !== 204) {\n return jsonResponse;\n }\n return jsonResponse.json();\n }\n\n async getMembers() {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/catalog/entities?filter=kind=user&filter=kind=group`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n },\n },\n );\n if (jsonResponse.status !== 200 && jsonResponse.status !== 204) {\n return jsonResponse;\n }\n return jsonResponse.json();\n }\n\n async listPermissions() {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/plugins/policies`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n },\n },\n );\n if (jsonResponse.status !== 200 && jsonResponse.status !== 204) {\n return jsonResponse;\n }\n return jsonResponse.json();\n }\n\n async createRole(role: Role) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(`${backendUrl}/api/permission/roles`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n body: JSON.stringify(role),\n });\n if (jsonResponse.status !== 200 && jsonResponse.status !== 201) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n\n async updateRole(oldRole: Role, newRole: Role) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const { kind, namespace, name } = parseEntityRef(oldRole.name);\n const body = {\n oldRole,\n newRole,\n };\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/roles/${kind}/${namespace}/${name}`,\n {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n body: JSON.stringify(body),\n },\n );\n if (\n jsonResponse.status !== 200 &&\n jsonResponse.status !== 201 &&\n jsonResponse.status !== 204\n ) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n\n async updatePolicies(\n entityReference: string,\n oldPolicies: RoleBasedPolicy[],\n newPolicies: RoleBasedPolicy[],\n ) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const { kind, namespace, name } = parseEntityRef(entityReference);\n const body = {\n oldPolicy: oldPolicies,\n newPolicy: newPolicies,\n };\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/policies/${kind}/${namespace}/${name}`,\n {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n body: JSON.stringify(body),\n },\n );\n if (jsonResponse.status !== 200 && jsonResponse.status !== 201) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n\n async deletePolicies(entityReference: string, policies: RoleBasedPolicy[]) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const { kind, namespace, name } = parseEntityRef(entityReference);\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/policies/${kind}/${namespace}/${name}`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(policies),\n method: 'DELETE',\n },\n );\n\n if (\n jsonResponse.status !== 200 &&\n jsonResponse.status !== 201 &&\n jsonResponse.status !== 204\n ) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n\n async createPolicies(policies: RoleBasedPolicy[]) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(`${backendUrl}/api/permission/policies`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n body: JSON.stringify(policies),\n });\n if (jsonResponse.status !== 200 && jsonResponse.status !== 201) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n\n async getPluginsConditionRules() {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/plugins/condition-rules`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n },\n },\n );\n if (jsonResponse.status !== 200) {\n return jsonResponse;\n }\n return jsonResponse.json();\n }\n\n async createConditionalPermission(\n conditionalPermission: RoleBasedConditions,\n ) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/roles/conditions`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n body: JSON.stringify(conditionalPermission),\n },\n );\n if (jsonResponse.status !== 200 && jsonResponse.status !== 201) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n\n async getRoleConditions(roleRef: string) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/roles/conditions?roleEntityRef=${roleRef}`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n },\n },\n );\n if (jsonResponse.status !== 200) {\n return jsonResponse;\n }\n return jsonResponse.json();\n }\n\n async updateConditionalPolicies(\n conditionId: number,\n data: RoleBasedConditions,\n ) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/roles/conditions/${conditionId}}`,\n {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n body: JSON.stringify(data),\n },\n );\n if (jsonResponse.status !== 200 && jsonResponse.status !== 201) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n\n async deleteConditionalPolicies(conditionId: number) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/roles/conditions/${conditionId}`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n method: 'DELETE',\n },\n );\n\n if (\n jsonResponse.status !== 200 &&\n jsonResponse.status !== 201 &&\n jsonResponse.status !== 204\n ) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RBACBackendClient.esm.js","sources":["../../src/api/RBACBackendClient.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport {\n ConfigApi,\n createApiRef,\n IdentityApi,\n} from '@backstage/core-plugin-api';\n\nimport {\n PermissionAction,\n PluginPermissionMetaData,\n Role,\n RoleBasedPolicy,\n RoleConditionalPolicyDecision,\n} from '@backstage-community/plugin-rbac-common';\n\nimport {\n MemberEntity,\n PluginConditionRules,\n RoleBasedConditions,\n RoleError,\n} from '../types';\n\n// @public\nexport type RBACAPI = {\n getUserAuthorization: () => Promise<{ status: string }>;\n getRoles: () => Promise<Role[] | Response>;\n getPolicies: () => Promise<RoleBasedPolicy[] | Response>;\n getAssociatedPolicies: (\n entityReference: string,\n ) => Promise<RoleBasedPolicy[] | Response>;\n deleteRole: (role: string) => Promise<Response>;\n getRole: (role: string) => Promise<Role[] | Response>;\n getMembers: () => Promise<MemberEntity[] | Response>;\n listPermissions: () => Promise<PluginPermissionMetaData[] | Response>;\n createRole: (role: Role) => Promise<RoleError | Response>;\n updateRole: (oldRole: Role, newRole: Role) => Promise<RoleError | Response>;\n updatePolicies: (\n entityReference: string,\n oldPolicy: RoleBasedPolicy[],\n newPolicy: RoleBasedPolicy[],\n ) => Promise<RoleError | Response>;\n createPolicies: (polices: RoleBasedPolicy[]) => Promise<RoleError | Response>;\n deletePolicies: (\n entityReference: string,\n polices: RoleBasedPolicy[],\n ) => Promise<RoleError | Response>;\n getPluginsConditionRules: () => Promise<PluginConditionRules[] | Response>;\n createConditionalPermission: (\n conditionalPermission: RoleBasedConditions,\n ) => Promise<RoleError | Response>;\n getRoleConditions: (\n roleRef: string,\n ) => Promise<RoleConditionalPolicyDecision<PermissionAction>[] | Response>;\n updateConditionalPolicies: (\n conditionId: number,\n data: RoleBasedConditions,\n ) => Promise<RoleError | Response>;\n deleteConditionalPolicies: (\n conditionId: number,\n ) => Promise<RoleError | Response>;\n};\n\nexport type Options = {\n configApi: ConfigApi;\n identityApi: IdentityApi;\n};\n\n// @public\nexport const rbacApiRef = createApiRef<RBACAPI>({\n id: 'plugin.rbac.service',\n});\n\nexport class RBACBackendClient implements RBACAPI {\n // @ts-ignore\n private readonly configApi: ConfigApi;\n private readonly identityApi: IdentityApi;\n\n constructor(options: Options) {\n this.configApi = options.configApi;\n this.identityApi = options.identityApi;\n }\n\n async getUserAuthorization() {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(`${backendUrl}/api/permission/`, {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n });\n return jsonResponse.json();\n }\n\n async getRoles() {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(`${backendUrl}/api/permission/roles`, {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n });\n\n if (jsonResponse.status !== 200 && jsonResponse.status !== 204) {\n return jsonResponse;\n }\n\n return jsonResponse.json();\n }\n\n async getPolicies() {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(`${backendUrl}/api/permission/policies`, {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n });\n if (jsonResponse.status !== 200 && jsonResponse.status !== 204) {\n return jsonResponse;\n }\n return jsonResponse.json();\n }\n\n async getAssociatedPolicies(entityReference: string) {\n const { kind, namespace, name } = parseEntityRef(entityReference);\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/policies/${kind}/${namespace}/${name}`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n },\n );\n if (jsonResponse.status !== 200 && jsonResponse.status !== 204) {\n return jsonResponse;\n }\n return jsonResponse.json();\n }\n\n async deleteRole(role: string) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const { kind, namespace, name } = parseEntityRef(role);\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/roles/${kind}/${namespace}/${name}`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n },\n method: 'DELETE',\n },\n );\n return jsonResponse;\n }\n\n async getRole(role: string) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const { kind, namespace, name } = parseEntityRef(role);\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/roles/${kind}/${namespace}/${name}`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n },\n },\n );\n if (jsonResponse.status !== 200 && jsonResponse.status !== 204) {\n return jsonResponse;\n }\n return jsonResponse.json();\n }\n\n async getMembers() {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/catalog/entities?filter=kind=user&filter=kind=group`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n },\n },\n );\n if (jsonResponse.status !== 200 && jsonResponse.status !== 204) {\n return jsonResponse;\n }\n return jsonResponse.json();\n }\n\n async listPermissions() {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/plugins/policies`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n },\n },\n );\n if (jsonResponse.status !== 200 && jsonResponse.status !== 204) {\n return jsonResponse;\n }\n return jsonResponse.json();\n }\n\n async createRole(role: Role) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(`${backendUrl}/api/permission/roles`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n body: JSON.stringify(role),\n });\n if (jsonResponse.status !== 200 && jsonResponse.status !== 201) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n\n async updateRole(oldRole: Role, newRole: Role) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const { kind, namespace, name } = parseEntityRef(oldRole.name);\n const body = {\n oldRole,\n newRole,\n };\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/roles/${kind}/${namespace}/${name}`,\n {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n body: JSON.stringify(body),\n },\n );\n if (\n jsonResponse.status !== 200 &&\n jsonResponse.status !== 201 &&\n jsonResponse.status !== 204\n ) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n\n async updatePolicies(\n entityReference: string,\n oldPolicies: RoleBasedPolicy[],\n newPolicies: RoleBasedPolicy[],\n ) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const { kind, namespace, name } = parseEntityRef(entityReference);\n const body = {\n oldPolicy: oldPolicies,\n newPolicy: newPolicies,\n };\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/policies/${kind}/${namespace}/${name}`,\n {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n body: JSON.stringify(body),\n },\n );\n if (jsonResponse.status !== 200 && jsonResponse.status !== 201) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n\n async deletePolicies(entityReference: string, policies: RoleBasedPolicy[]) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const { kind, namespace, name } = parseEntityRef(entityReference);\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/policies/${kind}/${namespace}/${name}`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(policies),\n method: 'DELETE',\n },\n );\n\n if (\n jsonResponse.status !== 200 &&\n jsonResponse.status !== 201 &&\n jsonResponse.status !== 204\n ) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n\n async createPolicies(policies: RoleBasedPolicy[]) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(`${backendUrl}/api/permission/policies`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n body: JSON.stringify(policies),\n });\n if (jsonResponse.status !== 200 && jsonResponse.status !== 201) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n\n async getPluginsConditionRules() {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/plugins/condition-rules`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n },\n },\n );\n if (jsonResponse.status !== 200) {\n return jsonResponse;\n }\n return jsonResponse.json();\n }\n\n async createConditionalPermission(\n conditionalPermission: RoleBasedConditions,\n ) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/roles/conditions`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n body: JSON.stringify(conditionalPermission),\n },\n );\n if (jsonResponse.status !== 200 && jsonResponse.status !== 201) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n\n async getRoleConditions(roleRef: string) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/roles/conditions?roleEntityRef=${roleRef}`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n },\n },\n );\n if (jsonResponse.status !== 200) {\n return jsonResponse;\n }\n return jsonResponse.json();\n }\n\n async updateConditionalPolicies(\n conditionId: number,\n data: RoleBasedConditions,\n ) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/roles/conditions/${conditionId}}`,\n {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n body: JSON.stringify(data),\n },\n );\n if (jsonResponse.status !== 200 && jsonResponse.status !== 201) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n\n async deleteConditionalPolicies(conditionId: number) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const backendUrl = this.configApi.getString('backend.baseUrl');\n const jsonResponse = await fetch(\n `${backendUrl}/api/permission/roles/conditions/${conditionId}`,\n {\n headers: {\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n method: 'DELETE',\n },\n );\n\n if (\n jsonResponse.status !== 200 &&\n jsonResponse.status !== 201 &&\n jsonResponse.status !== 204\n ) {\n return jsonResponse.json();\n }\n return jsonResponse;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Administration.esm.js","sources":["../../src/components/Administration.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 { useAsync } from 'react-use';\n\nimport { SidebarItem } from '@backstage/core-components';\nimport {\n configApiRef,\n IconComponent,\n useApi,\n} from '@backstage/core-plugin-api';\n\nimport { default as RbacIcon } from '@mui/icons-material/VpnKeyOutlined';\n\nimport { rbacApiRef } from '../api/RBACBackendClient';\n\nexport const Administration = () => {\n const rbacApi = useApi(rbacApiRef);\n const { loading: isUserLoading, value: result } = useAsync(\n async () => await rbacApi.getUserAuthorization(),\n [],\n );\n\n const config = useApi(configApiRef);\n const isRBACPluginEnabled = config.getOptionalBoolean('permission.enabled');\n\n if (!isUserLoading && isRBACPluginEnabled) {\n return result?.status === 'Authorized' ? (\n <SidebarItem text=\"RBAC\" to=\"rbac\" icon={RbacIcon as IconComponent} />\n ) : null;\n }\n return null;\n};\n"],"names":[],"mappings":";;;;;;;AA6BO,MAAM,iBAAiB,MAAM;AAClC,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA,CAAA;AACjC,EAAA,MAAM,EAAE,OAAA,EAAS,aAAe,EAAA,KAAA,EAAO,QAAW,GAAA,QAAA;AAAA,IAChD,YAAY,MAAM,OAAA,CAAQ,oBAAqB,EAAA;AAAA,IAC/C,EAAC;AAAA,GACH,CAAA;AAEA,EAAM,MAAA,MAAA,GAAS,OAAO,YAAY,CAAA,CAAA;AAClC,EAAM,MAAA,mBAAA,GAAsB,MAAO,CAAA,kBAAA,CAAmB,oBAAoB,CAAA,CAAA;AAE1E,EAAI,IAAA,CAAC,iBAAiB,mBAAqB,EAAA;AACzC,IAAO,OAAA,MAAA,EAAQ,MAAW,KAAA,YAAA,mBACvB,KAAA,CAAA,aAAA,CAAA,WAAA,EAAA,EAAY,IAAK,EAAA,MAAA,EAAO,EAAG,EAAA,MAAA,EAAO,IAAM,EAAA,QAAA,EAA2B,CAClE,GAAA,IAAA,CAAA;AAAA,GACN;AACA,EAAO,OAAA,IAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"Administration.esm.js","sources":["../../src/components/Administration.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 { useAsync } from 'react-use';\n\nimport { SidebarItem } from '@backstage/core-components';\nimport {\n configApiRef,\n IconComponent,\n useApi,\n} from '@backstage/core-plugin-api';\n\nimport { default as RbacIcon } from '@mui/icons-material/VpnKeyOutlined';\n\nimport { rbacApiRef } from '../api/RBACBackendClient';\n\nexport const Administration = () => {\n const rbacApi = useApi(rbacApiRef);\n const { loading: isUserLoading, value: result } = useAsync(\n async () => await rbacApi.getUserAuthorization(),\n [],\n );\n\n const config = useApi(configApiRef);\n const isRBACPluginEnabled = config.getOptionalBoolean('permission.enabled');\n\n if (!isUserLoading && isRBACPluginEnabled) {\n return result?.status === 'Authorized' ? (\n <SidebarItem text=\"RBAC\" to=\"rbac\" icon={RbacIcon as IconComponent} />\n ) : null;\n }\n return null;\n};\n"],"names":[],"mappings":";;;;;;;AA6BO,MAAM,iBAAiB,MAAM;AAClC,EAAM,MAAA,OAAA,GAAU,OAAO,UAAU,CAAA;AACjC,EAAA,MAAM,EAAE,OAAA,EAAS,aAAe,EAAA,KAAA,EAAO,QAAW,GAAA,QAAA;AAAA,IAChD,YAAY,MAAM,OAAA,CAAQ,oBAAqB,EAAA;AAAA,IAC/C;AAAC,GACH;AAEA,EAAM,MAAA,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,EAAM,MAAA,mBAAA,GAAsB,MAAO,CAAA,kBAAA,CAAmB,oBAAoB,CAAA;AAE1E,EAAI,IAAA,CAAC,iBAAiB,mBAAqB,EAAA;AACzC,IAAO,OAAA,MAAA,EAAQ,MAAW,KAAA,YAAA,mBACvB,KAAA,CAAA,aAAA,CAAA,WAAA,EAAA,EAAY,IAAK,EAAA,MAAA,EAAO,EAAG,EAAA,MAAA,EAAO,IAAM,EAAA,QAAA,EAA2B,CAClE,GAAA,IAAA;AAAA;AAEN,EAAO,OAAA,IAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"AddNestedConditionButton.esm.js","sources":["../../../src/components/ConditionalAccess/AddNestedConditionButton.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 { Box, Typography } from '@material-ui/core';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport HelpOutlineIcon from '@material-ui/icons/HelpOutline';\n\nexport const AddNestedConditionButton = () => {\n const tooltipTitle = () => (\n <div>\n <Typography variant=\"body1\" component=\"p\" align=\"center\">\n Nested conditions are <b>1 layer rules within a main condition</b>. It\n lets you allow appropriate access by using detailed permissions based on\n various conditions. You can add multiple nested conditions.\n </Typography>\n <Typography variant=\"body1\" component=\"p\" align=\"center\">\n For example, you can allow access to all entity types in the main\n condition and use a nested condition to limit the access to entities\n owned by the user.\n </Typography>\n </div>\n );\n return (\n <Box\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <Typography variant=\"body1\" component=\"span\">\n Add Nested Condition\n </Typography>\n <Tooltip title={tooltipTitle()} placement=\"top\">\n <HelpOutlineIcon fontSize=\"inherit\" style={{ marginLeft: '0.25rem' }} />\n </Tooltip>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;AAqBO,MAAM,2BAA2B,MAAM;AAC5C,EAAA,MAAM,YAAe,GAAA,sBAClB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,OAAQ,EAAA,OAAA,EAAQ,SAAU,EAAA,GAAA,EAAI,KAAM,EAAA,QAAA,EAAA,EAAS,wBACjC,kBAAA,KAAA,CAAA,aAAA,CAAC,GAAE,EAAA,IAAA,EAAA,uCAAqC,CAAI,EAAA,2IAGpE,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,SAAA,EAAU,GAAI,EAAA,KAAA,EAAM,QAAS,EAAA,EAAA,2JAIzD,CACF,CAAA,CAAA;AAEF,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,OAAS,EAAA,MAAA;AAAA,QACT,cAAgB,EAAA,QAAA;AAAA,QAChB,UAAY,EAAA,QAAA;AAAA,OACd;AAAA,KAAA;AAAA,wCAEC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,SAAA,EAAU,UAAO,sBAE7C,CAAA;AAAA,wCACC,OAAQ,EAAA,EAAA,KAAA,EAAO,YAAa,EAAA,EAAG,WAAU,KACxC,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,eAAgB,EAAA,EAAA,QAAA,EAAS,WAAU,KAAO,EAAA,EAAE,UAAY,EAAA,SAAA,IAAa,CACxE,CAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"AddNestedConditionButton.esm.js","sources":["../../../src/components/ConditionalAccess/AddNestedConditionButton.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 { Box, Typography } from '@material-ui/core';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport HelpOutlineIcon from '@material-ui/icons/HelpOutline';\n\nexport const AddNestedConditionButton = () => {\n const tooltipTitle = () => (\n <div>\n <Typography variant=\"body1\" component=\"p\" align=\"center\">\n Nested conditions are <b>1 layer rules within a main condition</b>. It\n lets you allow appropriate access by using detailed permissions based on\n various conditions. You can add multiple nested conditions.\n </Typography>\n <Typography variant=\"body1\" component=\"p\" align=\"center\">\n For example, you can allow access to all entity types in the main\n condition and use a nested condition to limit the access to entities\n owned by the user.\n </Typography>\n </div>\n );\n return (\n <Box\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <Typography variant=\"body1\" component=\"span\">\n Add Nested Condition\n </Typography>\n <Tooltip title={tooltipTitle()} placement=\"top\">\n <HelpOutlineIcon fontSize=\"inherit\" style={{ marginLeft: '0.25rem' }} />\n </Tooltip>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;AAqBO,MAAM,2BAA2B,MAAM;AAC5C,EAAA,MAAM,YAAe,GAAA,sBAClB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,OAAQ,EAAA,OAAA,EAAQ,SAAU,EAAA,GAAA,EAAI,KAAM,EAAA,QAAA,EAAA,EAAS,wBACjC,kBAAA,KAAA,CAAA,aAAA,CAAC,GAAE,EAAA,IAAA,EAAA,uCAAqC,CAAI,EAAA,2IAGpE,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,SAAA,EAAU,GAAI,EAAA,KAAA,EAAM,QAAS,EAAA,EAAA,2JAIzD,CACF,CAAA;AAEF,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,OAAS,EAAA,MAAA;AAAA,QACT,cAAgB,EAAA,QAAA;AAAA,QAChB,UAAY,EAAA;AAAA;AACd,KAAA;AAAA,wCAEC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,SAAA,EAAU,UAAO,sBAE7C,CAAA;AAAA,wCACC,OAAQ,EAAA,EAAA,KAAA,EAAO,YAAa,EAAA,EAAG,WAAU,KACxC,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,eAAgB,EAAA,EAAA,QAAA,EAAS,WAAU,KAAO,EAAA,EAAE,UAAY,EAAA,SAAA,IAAa,CACxE;AAAA,GACF;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ComplexConditionRow.esm.js","sources":["../../../src/components/ConditionalAccess/ComplexConditionRow.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { PermissionCondition } from '@backstage/plugin-permission-common';\n\nimport { IconButton } from '@material-ui/core';\nimport RemoveIcon from '@mui/icons-material/Remove';\n\nimport {\n getNestedRuleErrors,\n getRowKey,\n getRowStyle,\n getSimpleRuleErrors,\n isSimpleRule,\n} from '../../utils/conditional-access-utils';\nimport { ConditionsFormRowFields } from './ConditionsFormRowFields';\nimport { criterias } from './const';\nimport {\n AccessConditionsErrors,\n ComplexErrors,\n Condition,\n ConditionsData,\n NestedCriteriaErrors,\n NotConditionType,\n RulesData,\n} from './types';\n\ntype ComplexConditionRowProps = {\n conditionRow: ConditionsData;\n nestedConditionRow: Condition[];\n criteria: keyof ConditionsData;\n onRuleChange: (newCondition: ConditionsData) => void;\n updateRules: (updatedNestedConditionRow: Condition[] | Condition) => void;\n setErrors: React.Dispatch<\n React.SetStateAction<AccessConditionsErrors | undefined>\n >;\n setRemoveAllClicked: React.Dispatch<React.SetStateAction<boolean>>;\n conditionRulesData?: RulesData;\n notConditionType?: NotConditionType;\n classes: any;\n currentCondition: Condition;\n ruleIndex: number;\n activeCriteria?: 'allOf' | 'anyOf';\n isNestedCondition?: boolean;\n nestedConditionIndex?: number;\n activeNestedCriteria?: 'allOf' | 'anyOf';\n};\n\nexport const ComplexConditionRow = ({\n conditionRow,\n nestedConditionRow,\n criteria,\n onRuleChange,\n updateRules,\n setErrors,\n setRemoveAllClicked,\n conditionRulesData,\n notConditionType,\n classes,\n currentCondition,\n ruleIndex,\n activeCriteria,\n isNestedCondition = false,\n nestedConditionIndex,\n activeNestedCriteria,\n}: ComplexConditionRowProps) => {\n const handleRemoveSimpleConditionRule = (\n index: number,\n ruleList: PermissionCondition[],\n ) => {\n if (!activeCriteria) {\n return;\n }\n const updatedSimpleRules = ruleList.filter(\n (_r, rindex) => index !== rindex,\n );\n const nestedConditions =\n (conditionRow[criteria] as PermissionCondition[])?.filter(\n (con: PermissionCondition) =>\n criterias.allOf in con ||\n criterias.anyOf in con ||\n criterias.not in con,\n ) || [];\n\n onRuleChange({\n [activeCriteria as keyof ConditionsData]: [\n ...updatedSimpleRules,\n ...nestedConditions,\n ],\n });\n\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n\n if (updatedErrors[activeCriteria]) {\n const criteriaErrors = updatedErrors[activeCriteria] as ComplexErrors[];\n const simpleRuleErrors = getSimpleRuleErrors(criteriaErrors);\n\n if (Array.isArray(simpleRuleErrors) && simpleRuleErrors.length > 0) {\n const updatedCriteriaErrors = [\n ...simpleRuleErrors.filter((_, rindex) => rindex !== index),\n ...getNestedRuleErrors(criteriaErrors),\n ];\n\n updatedErrors[activeCriteria] =\n updatedCriteriaErrors.length > 0 ? updatedCriteriaErrors : [];\n } else {\n delete updatedErrors[activeCriteria];\n }\n }\n\n return updatedErrors;\n });\n };\n\n const handleRemoveNestedConditionRule = (nestedConditionCriteria: string) => {\n const updatedNestedConditionRow: Condition[] = [];\n\n nestedConditionRow.forEach((c, index) => {\n if (index === nestedConditionIndex) {\n const updatedRules = (\n (c[\n nestedConditionCriteria as keyof Condition\n ] as PermissionCondition[]) || []\n ).filter((_r, rindex) => rindex !== ruleIndex);\n updatedNestedConditionRow.push({\n [nestedConditionCriteria as keyof Condition]: updatedRules,\n });\n } else {\n updatedNestedConditionRow.push(c);\n }\n });\n\n updateRules(\n criteria === criterias.not\n ? updatedNestedConditionRow[0]\n : updatedNestedConditionRow,\n );\n\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n\n if (updatedErrors[criteria] !== undefined) {\n const criteriaErrors = updatedErrors[criteria] as ComplexErrors[];\n\n if (\n criteria === criterias.not &&\n notConditionType === 'nested-condition'\n ) {\n (\n (updatedErrors[criteria] as NestedCriteriaErrors)[\n nestedConditionCriteria\n ] as string[]\n ).splice(ruleIndex, 1);\n return updatedErrors;\n }\n\n const nestedConditionErrors = getNestedRuleErrors(criteriaErrors);\n\n if (\n Array.isArray(nestedConditionErrors) &&\n nestedConditionIndex !== undefined\n ) {\n const nestedErrors = nestedConditionErrors[nestedConditionIndex];\n if (nestedErrors[nestedConditionCriteria]) {\n const updatedNestedErrors = (\n nestedErrors[nestedConditionCriteria] as string[]\n ).filter((_error, index) => index !== ruleIndex);\n\n if (updatedNestedErrors.length > 0) {\n nestedErrors[nestedConditionCriteria] = updatedNestedErrors;\n } else {\n delete nestedErrors[nestedConditionCriteria];\n }\n\n nestedConditionErrors[nestedConditionIndex] = nestedErrors;\n }\n\n updatedErrors[criteria] = [\n ...getSimpleRuleErrors(criteriaErrors),\n ...nestedConditionErrors,\n ];\n }\n }\n\n return updatedErrors;\n });\n };\n\n const ruleList = isNestedCondition\n ? (currentCondition[\n activeCriteria as keyof Condition\n ] as PermissionCondition[])\n : ((conditionRow[activeCriteria as keyof Condition] as Condition[]).filter(\n r => isSimpleRule(r),\n ) as PermissionCondition[]);\n\n const disabled =\n !isNestedCondition &&\n (conditionRow[criteria as keyof Condition] as Condition[]).length === 1 &&\n nestedConditionRow.length === 0 &&\n ruleIndex === 0;\n const nestedDisabled =\n isNestedCondition &&\n (\n nestedConditionRow[nestedConditionIndex ?? 0][\n activeNestedCriteria as keyof Condition\n ] as Condition[]\n ).length === 1 &&\n ruleIndex === 0;\n\n return (\n (currentCondition as PermissionCondition).resourceType && (\n <div\n style={getRowStyle(currentCondition, isNestedCondition)}\n key={getRowKey(isNestedCondition, ruleIndex)}\n >\n <ConditionsFormRowFields\n oldCondition={currentCondition}\n index={isNestedCondition ? undefined : ruleIndex}\n onRuleChange={onRuleChange}\n conditionRow={conditionRow}\n criteria={criteria}\n conditionRulesData={conditionRulesData}\n setErrors={setErrors}\n setRemoveAllClicked={setRemoveAllClicked}\n nestedConditionRow={\n isNestedCondition ? nestedConditionRow : undefined\n }\n nestedConditionCriteria={\n isNestedCondition ? activeNestedCriteria : undefined\n }\n nestedConditionIndex={\n isNestedCondition ? nestedConditionIndex : undefined\n }\n nestedConditionRuleIndex={isNestedCondition ? ruleIndex : undefined}\n updateRules={isNestedCondition ? updateRules : undefined}\n />\n <IconButton\n title=\"Remove\"\n className={classes.removeRuleButton}\n disabled={isNestedCondition ? nestedDisabled : disabled}\n onClick={\n isNestedCondition &&\n activeNestedCriteria &&\n nestedConditionIndex !== undefined\n ? () => handleRemoveNestedConditionRule(activeNestedCriteria)\n : () => {\n handleRemoveSimpleConditionRule(ruleIndex, ruleList);\n }\n }\n >\n <RemoveIcon />\n </IconButton>\n </div>\n )\n );\n};\n"],"names":["ruleList"],"mappings":"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"}
1
+ {"version":3,"file":"ComplexConditionRow.esm.js","sources":["../../../src/components/ConditionalAccess/ComplexConditionRow.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { PermissionCondition } from '@backstage/plugin-permission-common';\n\nimport { IconButton } from '@material-ui/core';\nimport RemoveIcon from '@mui/icons-material/Remove';\n\nimport {\n getNestedRuleErrors,\n getRowKey,\n getRowStyle,\n getSimpleRuleErrors,\n isSimpleRule,\n} from '../../utils/conditional-access-utils';\nimport { ConditionsFormRowFields } from './ConditionsFormRowFields';\nimport { criterias } from './const';\nimport {\n AccessConditionsErrors,\n ComplexErrors,\n Condition,\n ConditionsData,\n NestedCriteriaErrors,\n NotConditionType,\n RulesData,\n} from './types';\n\ntype ComplexConditionRowProps = {\n conditionRow: ConditionsData;\n nestedConditionRow: Condition[];\n criteria: keyof ConditionsData;\n onRuleChange: (newCondition: ConditionsData) => void;\n updateRules: (updatedNestedConditionRow: Condition[] | Condition) => void;\n setErrors: React.Dispatch<\n React.SetStateAction<AccessConditionsErrors | undefined>\n >;\n setRemoveAllClicked: React.Dispatch<React.SetStateAction<boolean>>;\n conditionRulesData?: RulesData;\n notConditionType?: NotConditionType;\n classes: any;\n currentCondition: Condition;\n ruleIndex: number;\n activeCriteria?: 'allOf' | 'anyOf';\n isNestedCondition?: boolean;\n nestedConditionIndex?: number;\n activeNestedCriteria?: 'allOf' | 'anyOf';\n};\n\nexport const ComplexConditionRow = ({\n conditionRow,\n nestedConditionRow,\n criteria,\n onRuleChange,\n updateRules,\n setErrors,\n setRemoveAllClicked,\n conditionRulesData,\n notConditionType,\n classes,\n currentCondition,\n ruleIndex,\n activeCriteria,\n isNestedCondition = false,\n nestedConditionIndex,\n activeNestedCriteria,\n}: ComplexConditionRowProps) => {\n const handleRemoveSimpleConditionRule = (\n index: number,\n ruleList: PermissionCondition[],\n ) => {\n if (!activeCriteria) {\n return;\n }\n const updatedSimpleRules = ruleList.filter(\n (_r, rindex) => index !== rindex,\n );\n const nestedConditions =\n (conditionRow[criteria] as PermissionCondition[])?.filter(\n (con: PermissionCondition) =>\n criterias.allOf in con ||\n criterias.anyOf in con ||\n criterias.not in con,\n ) || [];\n\n onRuleChange({\n [activeCriteria as keyof ConditionsData]: [\n ...updatedSimpleRules,\n ...nestedConditions,\n ],\n });\n\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n\n if (updatedErrors[activeCriteria]) {\n const criteriaErrors = updatedErrors[activeCriteria] as ComplexErrors[];\n const simpleRuleErrors = getSimpleRuleErrors(criteriaErrors);\n\n if (Array.isArray(simpleRuleErrors) && simpleRuleErrors.length > 0) {\n const updatedCriteriaErrors = [\n ...simpleRuleErrors.filter((_, rindex) => rindex !== index),\n ...getNestedRuleErrors(criteriaErrors),\n ];\n\n updatedErrors[activeCriteria] =\n updatedCriteriaErrors.length > 0 ? updatedCriteriaErrors : [];\n } else {\n delete updatedErrors[activeCriteria];\n }\n }\n\n return updatedErrors;\n });\n };\n\n const handleRemoveNestedConditionRule = (nestedConditionCriteria: string) => {\n const updatedNestedConditionRow: Condition[] = [];\n\n nestedConditionRow.forEach((c, index) => {\n if (index === nestedConditionIndex) {\n const updatedRules = (\n (c[\n nestedConditionCriteria as keyof Condition\n ] as PermissionCondition[]) || []\n ).filter((_r, rindex) => rindex !== ruleIndex);\n updatedNestedConditionRow.push({\n [nestedConditionCriteria as keyof Condition]: updatedRules,\n });\n } else {\n updatedNestedConditionRow.push(c);\n }\n });\n\n updateRules(\n criteria === criterias.not\n ? updatedNestedConditionRow[0]\n : updatedNestedConditionRow,\n );\n\n setErrors(prevErrors => {\n const updatedErrors = { ...prevErrors };\n\n if (updatedErrors[criteria] !== undefined) {\n const criteriaErrors = updatedErrors[criteria] as ComplexErrors[];\n\n if (\n criteria === criterias.not &&\n notConditionType === 'nested-condition'\n ) {\n (\n (updatedErrors[criteria] as NestedCriteriaErrors)[\n nestedConditionCriteria\n ] as string[]\n ).splice(ruleIndex, 1);\n return updatedErrors;\n }\n\n const nestedConditionErrors = getNestedRuleErrors(criteriaErrors);\n\n if (\n Array.isArray(nestedConditionErrors) &&\n nestedConditionIndex !== undefined\n ) {\n const nestedErrors = nestedConditionErrors[nestedConditionIndex];\n if (nestedErrors[nestedConditionCriteria]) {\n const updatedNestedErrors = (\n nestedErrors[nestedConditionCriteria] as string[]\n ).filter((_error, index) => index !== ruleIndex);\n\n if (updatedNestedErrors.length > 0) {\n nestedErrors[nestedConditionCriteria] = updatedNestedErrors;\n } else {\n delete nestedErrors[nestedConditionCriteria];\n }\n\n nestedConditionErrors[nestedConditionIndex] = nestedErrors;\n }\n\n updatedErrors[criteria] = [\n ...getSimpleRuleErrors(criteriaErrors),\n ...nestedConditionErrors,\n ];\n }\n }\n\n return updatedErrors;\n });\n };\n\n const ruleList = isNestedCondition\n ? (currentCondition[\n activeCriteria as keyof Condition\n ] as PermissionCondition[])\n : ((conditionRow[activeCriteria as keyof Condition] as Condition[]).filter(\n r => isSimpleRule(r),\n ) as PermissionCondition[]);\n\n const disabled =\n !isNestedCondition &&\n (conditionRow[criteria as keyof Condition] as Condition[]).length === 1 &&\n nestedConditionRow.length === 0 &&\n ruleIndex === 0;\n const nestedDisabled =\n isNestedCondition &&\n (\n nestedConditionRow[nestedConditionIndex ?? 0][\n activeNestedCriteria as keyof Condition\n ] as Condition[]\n ).length === 1 &&\n ruleIndex === 0;\n\n return (\n (currentCondition as PermissionCondition).resourceType && (\n <div\n style={getRowStyle(currentCondition, isNestedCondition)}\n key={getRowKey(isNestedCondition, ruleIndex)}\n >\n <ConditionsFormRowFields\n oldCondition={currentCondition}\n index={isNestedCondition ? undefined : ruleIndex}\n onRuleChange={onRuleChange}\n conditionRow={conditionRow}\n criteria={criteria}\n conditionRulesData={conditionRulesData}\n setErrors={setErrors}\n setRemoveAllClicked={setRemoveAllClicked}\n nestedConditionRow={\n isNestedCondition ? nestedConditionRow : undefined\n }\n nestedConditionCriteria={\n isNestedCondition ? activeNestedCriteria : undefined\n }\n nestedConditionIndex={\n isNestedCondition ? nestedConditionIndex : undefined\n }\n nestedConditionRuleIndex={isNestedCondition ? ruleIndex : undefined}\n updateRules={isNestedCondition ? updateRules : undefined}\n />\n <IconButton\n title=\"Remove\"\n className={classes.removeRuleButton}\n disabled={isNestedCondition ? nestedDisabled : disabled}\n onClick={\n isNestedCondition &&\n activeNestedCriteria &&\n nestedConditionIndex !== undefined\n ? () => handleRemoveNestedConditionRule(activeNestedCriteria)\n : () => {\n handleRemoveSimpleConditionRule(ruleIndex, ruleList);\n }\n }\n >\n <RemoveIcon />\n </IconButton>\n </div>\n )\n );\n};\n"],"names":["ruleList"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ComplexConditionRowButtons.esm.js","sources":["../../../src/components/ConditionalAccess/ComplexConditionRowButtons.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 AddIcon from '@mui/icons-material/Add';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\n\nimport { getDefaultRule } from '../../utils/conditional-access-utils';\nimport { AddNestedConditionButton } from './AddNestedConditionButton';\nimport { criterias } from './const';\nimport { Condition, ConditionsData } from './types';\n\ntype ComplexConditionRowButtonsProps = {\n conditionRow: ConditionsData;\n onRuleChange: (newCondition: ConditionsData) => void;\n criteria: string;\n classes: any;\n selPluginResourceType: string;\n updateErrors: (_index: number) => void;\n isNestedConditionRule: (condition: Condition) => boolean;\n handleAddNestedCondition: (criteria: string) => void;\n};\n\nexport const ComplexConditionRowButtons = ({\n conditionRow,\n onRuleChange,\n criteria,\n classes,\n selPluginResourceType,\n updateErrors,\n isNestedConditionRule,\n handleAddNestedCondition,\n}: ComplexConditionRowButtonsProps) => {\n const findFirstNestedConditionIndex = (rules: Condition[]): number => {\n return rules.findIndex(e => isNestedConditionRule(e)) || 0;\n };\n const handleAddRule = () => {\n const updatedRules = [\n ...(conditionRow.allOf ?? []),\n ...(conditionRow.anyOf ?? []),\n ];\n\n const firstNestedConditionIndex =\n findFirstNestedConditionIndex(updatedRules);\n if (firstNestedConditionIndex !== -1) {\n updatedRules.splice(\n firstNestedConditionIndex,\n 0,\n getDefaultRule(selPluginResourceType),\n );\n } else {\n updatedRules.push(getDefaultRule(selPluginResourceType));\n }\n\n onRuleChange({ [criteria]: [...updatedRules] });\n updateErrors(firstNestedConditionIndex);\n };\n\n return (\n (criteria === criterias.allOf || criteria === criterias.anyOf) && (\n <Box mt={1} mb={1}>\n <Button\n className={classes.addRuleButton}\n size=\"small\"\n onClick={handleAddRule}\n >\n <AddIcon fontSize=\"small\" />\n Add rule\n </Button>\n <Button\n className={classes.addNestedConditionButton}\n size=\"small\"\n onClick={() => handleAddNestedCondition(criteria)}\n >\n <AddIcon fontSize=\"small\" />\n <AddNestedConditionButton />\n </Button>\n </Box>\n )\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAqCO,MAAM,6BAA6B,CAAC;AAAA,EACzC,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,qBAAA;AAAA,EACA,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,wBAAA;AACF,CAAuC,KAAA;AACrC,EAAM,MAAA,6BAAA,GAAgC,CAAC,KAA+B,KAAA;AACpE,IAAA,OAAO,MAAM,SAAU,CAAA,CAAA,CAAA,KAAK,qBAAsB,CAAA,CAAC,CAAC,CAAK,IAAA,CAAA,CAAA;AAAA,GAC3D,CAAA;AACA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,MAAM,YAAe,GAAA;AAAA,MACnB,GAAI,YAAa,CAAA,KAAA,IAAS,EAAC;AAAA,MAC3B,GAAI,YAAa,CAAA,KAAA,IAAS,EAAC;AAAA,KAC7B,CAAA;AAEA,IAAM,MAAA,yBAAA,GACJ,8BAA8B,YAAY,CAAA,CAAA;AAC5C,IAAA,IAAI,8BAA8B,CAAI,CAAA,EAAA;AACpC,MAAa,YAAA,CAAA,MAAA;AAAA,QACX,yBAAA;AAAA,QACA,CAAA;AAAA,QACA,eAAe,qBAAqB,CAAA;AAAA,OACtC,CAAA;AAAA,KACK,MAAA;AACL,MAAa,YAAA,CAAA,IAAA,CAAK,cAAe,CAAA,qBAAqB,CAAC,CAAA,CAAA;AAAA,KACzD;AAEA,IAAa,YAAA,CAAA,EAAE,CAAC,QAAQ,GAAG,CAAC,GAAG,YAAY,GAAG,CAAA,CAAA;AAC9C,IAAA,YAAA,CAAa,yBAAyB,CAAA,CAAA;AAAA,GACxC,CAAA;AAEA,EACG,OAAA,CAAA,QAAA,KAAa,SAAU,CAAA,KAAA,IAAS,QAAa,KAAA,SAAA,CAAU,KACtD,qBAAA,KAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,EAAA,EAAI,CAAG,EAAA,EAAA,EAAI,CACd,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAW,OAAQ,CAAA,aAAA;AAAA,MACnB,IAAK,EAAA,OAAA;AAAA,MACL,OAAS,EAAA,aAAA;AAAA,KAAA;AAAA,oBAET,KAAA,CAAA,aAAA,CAAC,OAAQ,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,IAAE,UAAA;AAAA,GAG9B,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAW,OAAQ,CAAA,wBAAA;AAAA,MACnB,IAAK,EAAA,OAAA;AAAA,MACL,OAAA,EAAS,MAAM,wBAAA,CAAyB,QAAQ,CAAA;AAAA,KAAA;AAAA,oBAEhD,KAAA,CAAA,aAAA,CAAC,OAAQ,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,wCACzB,wBAAyB,EAAA,IAAA,CAAA;AAAA,GAE9B,CAAA,CAAA;AAGN;;;;"}
1
+ {"version":3,"file":"ComplexConditionRowButtons.esm.js","sources":["../../../src/components/ConditionalAccess/ComplexConditionRowButtons.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 AddIcon from '@mui/icons-material/Add';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\n\nimport { getDefaultRule } from '../../utils/conditional-access-utils';\nimport { AddNestedConditionButton } from './AddNestedConditionButton';\nimport { criterias } from './const';\nimport { Condition, ConditionsData } from './types';\n\ntype ComplexConditionRowButtonsProps = {\n conditionRow: ConditionsData;\n onRuleChange: (newCondition: ConditionsData) => void;\n criteria: string;\n classes: any;\n selPluginResourceType: string;\n updateErrors: (_index: number) => void;\n isNestedConditionRule: (condition: Condition) => boolean;\n handleAddNestedCondition: (criteria: string) => void;\n};\n\nexport const ComplexConditionRowButtons = ({\n conditionRow,\n onRuleChange,\n criteria,\n classes,\n selPluginResourceType,\n updateErrors,\n isNestedConditionRule,\n handleAddNestedCondition,\n}: ComplexConditionRowButtonsProps) => {\n const findFirstNestedConditionIndex = (rules: Condition[]): number => {\n return rules.findIndex(e => isNestedConditionRule(e)) || 0;\n };\n const handleAddRule = () => {\n const updatedRules = [\n ...(conditionRow.allOf ?? []),\n ...(conditionRow.anyOf ?? []),\n ];\n\n const firstNestedConditionIndex =\n findFirstNestedConditionIndex(updatedRules);\n if (firstNestedConditionIndex !== -1) {\n updatedRules.splice(\n firstNestedConditionIndex,\n 0,\n getDefaultRule(selPluginResourceType),\n );\n } else {\n updatedRules.push(getDefaultRule(selPluginResourceType));\n }\n\n onRuleChange({ [criteria]: [...updatedRules] });\n updateErrors(firstNestedConditionIndex);\n };\n\n return (\n (criteria === criterias.allOf || criteria === criterias.anyOf) && (\n <Box mt={1} mb={1}>\n <Button\n className={classes.addRuleButton}\n size=\"small\"\n onClick={handleAddRule}\n >\n <AddIcon fontSize=\"small\" />\n Add rule\n </Button>\n <Button\n className={classes.addNestedConditionButton}\n size=\"small\"\n onClick={() => handleAddNestedCondition(criteria)}\n >\n <AddIcon fontSize=\"small\" />\n <AddNestedConditionButton />\n </Button>\n </Box>\n )\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAqCO,MAAM,6BAA6B,CAAC;AAAA,EACzC,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,qBAAA;AAAA,EACA,YAAA;AAAA,EACA,qBAAA;AAAA,EACA;AACF,CAAuC,KAAA;AACrC,EAAM,MAAA,6BAAA,GAAgC,CAAC,KAA+B,KAAA;AACpE,IAAA,OAAO,MAAM,SAAU,CAAA,CAAA,CAAA,KAAK,qBAAsB,CAAA,CAAC,CAAC,CAAK,IAAA,CAAA;AAAA,GAC3D;AACA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,MAAM,YAAe,GAAA;AAAA,MACnB,GAAI,YAAa,CAAA,KAAA,IAAS,EAAC;AAAA,MAC3B,GAAI,YAAa,CAAA,KAAA,IAAS;AAAC,KAC7B;AAEA,IAAM,MAAA,yBAAA,GACJ,8BAA8B,YAAY,CAAA;AAC5C,IAAA,IAAI,8BAA8B,CAAI,CAAA,EAAA;AACpC,MAAa,YAAA,CAAA,MAAA;AAAA,QACX,yBAAA;AAAA,QACA,CAAA;AAAA,QACA,eAAe,qBAAqB;AAAA,OACtC;AAAA,KACK,MAAA;AACL,MAAa,YAAA,CAAA,IAAA,CAAK,cAAe,CAAA,qBAAqB,CAAC,CAAA;AAAA;AAGzD,IAAa,YAAA,CAAA,EAAE,CAAC,QAAQ,GAAG,CAAC,GAAG,YAAY,GAAG,CAAA;AAC9C,IAAA,YAAA,CAAa,yBAAyB,CAAA;AAAA,GACxC;AAEA,EACG,OAAA,CAAA,QAAA,KAAa,SAAU,CAAA,KAAA,IAAS,QAAa,KAAA,SAAA,CAAU,KACtD,qBAAA,KAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,EAAA,EAAI,CAAG,EAAA,EAAA,EAAI,CACd,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAW,OAAQ,CAAA,aAAA;AAAA,MACnB,IAAK,EAAA,OAAA;AAAA,MACL,OAAS,EAAA;AAAA,KAAA;AAAA,oBAET,KAAA,CAAA,aAAA,CAAC,OAAQ,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,IAAE;AAAA,GAG9B,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAW,OAAQ,CAAA,wBAAA;AAAA,MACnB,IAAK,EAAA,OAAA;AAAA,MACL,OAAA,EAAS,MAAM,wBAAA,CAAyB,QAAQ;AAAA,KAAA;AAAA,oBAEhD,KAAA,CAAA,aAAA,CAAC,OAAQ,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,wCACzB,wBAAyB,EAAA,IAAA;AAAA,GAE9B,CAAA;AAGN;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionRule.esm.js","sources":["../../../src/components/ConditionalAccess/ConditionRule.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 getDefaultRule,\n ruleOptionDisabled,\n} from '../../utils/conditional-access-utils';\nimport { ConditionsFormRowFields } from './ConditionsFormRowFields';\nimport { criterias } from './const';\nimport { AccessConditionsErrors, ConditionsData, RulesData } from './types';\n\ntype ConditionRuleProps = {\n conditionRow: ConditionsData;\n selPluginResourceType: string;\n onRuleChange: (newCondition: ConditionsData) => void;\n criteria: string;\n conditionRulesData?: RulesData;\n setErrors: React.Dispatch<\n React.SetStateAction<AccessConditionsErrors | undefined>\n >;\n setRemoveAllClicked: React.Dispatch<React.SetStateAction<boolean>>;\n};\n\nexport const ConditionRule = ({\n conditionRow,\n selPluginResourceType,\n onRuleChange,\n criteria,\n conditionRulesData,\n setErrors,\n setRemoveAllClicked,\n}: ConditionRuleProps) => {\n return (\n criteria === criterias.condition && (\n <ConditionsFormRowFields\n oldCondition={\n conditionRow.condition ?? getDefaultRule(selPluginResourceType)\n }\n onRuleChange={onRuleChange}\n conditionRow={conditionRow}\n criteria={criteria}\n conditionRulesData={conditionRulesData}\n setErrors={setErrors}\n optionDisabled={ruleOption =>\n ruleOptionDisabled(\n ruleOption,\n conditionRow.condition ? [conditionRow.condition] : undefined,\n )\n }\n setRemoveAllClicked={setRemoveAllClicked}\n />\n )\n );\n};\n"],"names":[],"mappings":";;;;;AAqCO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,mBAAA;AACF,CAA0B,KAAA;AACxB,EACE,OAAA,QAAA,KAAa,UAAU,SACrB,oBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,YACE,EAAA,YAAA,CAAa,SAAa,IAAA,cAAA,CAAe,qBAAqB,CAAA;AAAA,MAEhE,YAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MACA,kBAAA;AAAA,MACA,SAAA;AAAA,MACA,gBAAgB,CACd,UAAA,KAAA,kBAAA;AAAA,QACE,UAAA;AAAA,QACA,YAAa,CAAA,SAAA,GAAY,CAAC,YAAA,CAAa,SAAS,CAAI,GAAA,KAAA,CAAA;AAAA,OACtD;AAAA,MAEF,mBAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAGN;;;;"}
1
+ {"version":3,"file":"ConditionRule.esm.js","sources":["../../../src/components/ConditionalAccess/ConditionRule.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 getDefaultRule,\n ruleOptionDisabled,\n} from '../../utils/conditional-access-utils';\nimport { ConditionsFormRowFields } from './ConditionsFormRowFields';\nimport { criterias } from './const';\nimport { AccessConditionsErrors, ConditionsData, RulesData } from './types';\n\ntype ConditionRuleProps = {\n conditionRow: ConditionsData;\n selPluginResourceType: string;\n onRuleChange: (newCondition: ConditionsData) => void;\n criteria: string;\n conditionRulesData?: RulesData;\n setErrors: React.Dispatch<\n React.SetStateAction<AccessConditionsErrors | undefined>\n >;\n setRemoveAllClicked: React.Dispatch<React.SetStateAction<boolean>>;\n};\n\nexport const ConditionRule = ({\n conditionRow,\n selPluginResourceType,\n onRuleChange,\n criteria,\n conditionRulesData,\n setErrors,\n setRemoveAllClicked,\n}: ConditionRuleProps) => {\n return (\n criteria === criterias.condition && (\n <ConditionsFormRowFields\n oldCondition={\n conditionRow.condition ?? getDefaultRule(selPluginResourceType)\n }\n onRuleChange={onRuleChange}\n conditionRow={conditionRow}\n criteria={criteria}\n conditionRulesData={conditionRulesData}\n setErrors={setErrors}\n optionDisabled={ruleOption =>\n ruleOptionDisabled(\n ruleOption,\n conditionRow.condition ? [conditionRow.condition] : undefined,\n )\n }\n setRemoveAllClicked={setRemoveAllClicked}\n />\n )\n );\n};\n"],"names":[],"mappings":";;;;;AAqCO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAA0B,KAAA;AACxB,EACE,OAAA,QAAA,KAAa,UAAU,SACrB,oBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,YACE,EAAA,YAAA,CAAa,SAAa,IAAA,cAAA,CAAe,qBAAqB,CAAA;AAAA,MAEhE,YAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MACA,kBAAA;AAAA,MACA,SAAA;AAAA,MACA,gBAAgB,CACd,UAAA,KAAA,kBAAA;AAAA,QACE,UAAA;AAAA,QACA,YAAa,CAAA,SAAA,GAAY,CAAC,YAAA,CAAa,SAAS,CAAI,GAAA,KAAA;AAAA,OACtD;AAAA,MAEF;AAAA;AAAA,GACF;AAGN;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalAccessSidebar.esm.js","sources":["../../../src/components/ConditionalAccess/ConditionalAccessSidebar.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 { makeStyles } from '@material-ui/core';\nimport Drawer from '@material-ui/core/Drawer';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { ConditionsForm } from './ConditionsForm';\nimport { ConditionsData, RulesData } from './types';\n\nconst useDrawerStyles = makeStyles(() => ({\n paper: {\n ['@media (max-width: 960px)']: {\n width: '-webkit-fill-available',\n },\n width: '50vw',\n height: '100vh',\n gap: '3%',\n display: '-webkit-inline-box',\n },\n}));\n\nconst useDrawerContentStyles = makeStyles(theme => ({\n sidebar: {\n display: 'flex',\n flexFlow: 'column',\n justifyContent: 'space-between',\n backgroundColor: `${theme.palette.background.default} !important`,\n },\n header: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n padding: theme.spacing(2.5),\n fontFamily: theme.typography.fontFamily,\n },\n headerSubtitle: {\n fontWeight: 400,\n fontFamily: theme.typography.fontFamily,\n paddingTop: theme.spacing(1),\n },\n}));\n\ntype ConditionalAccessSidebarProps = {\n open: boolean;\n onClose: () => void;\n onSave: (conditions?: ConditionsData) => void;\n selPluginResourceType: string;\n conditionRulesData?: RulesData;\n conditionsFormVal?: ConditionsData;\n};\n\nexport const ConditionalAccessSidebar = ({\n open,\n onClose,\n onSave,\n selPluginResourceType,\n conditionRulesData,\n conditionsFormVal,\n}: ConditionalAccessSidebarProps) => {\n const classes = useDrawerStyles();\n const contentClasses = useDrawerContentStyles();\n return (\n <Drawer\n anchor=\"right\"\n open={open}\n data-testid=\"rules-sidebar\"\n classes={{\n paper: classes.paper,\n }}\n >\n <Box className={contentClasses.sidebar}>\n <Box className={contentClasses.header}>\n <Typography variant=\"h5\">\n <Typography component=\"span\" sx={{ fontWeight: 500 }}>\n Configure access for the\n </Typography>{' '}\n {selPluginResourceType}\n <Typography\n variant=\"body2\"\n className={contentClasses.headerSubtitle}\n align=\"left\"\n >\n By default, the selected resource type will be visible to the\n chosen users in step two. If you want to restrict or grant\n permission to specific plugin resource type rule, select it and\n add the required parameters.\n </Typography>\n </Typography>\n <IconButton\n key=\"dismiss\"\n title=\"Close the drawer\"\n onClick={onClose}\n color=\"inherit\"\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n <ConditionsForm\n conditionRulesData={conditionRulesData}\n selPluginResourceType={selPluginResourceType}\n conditionsFormVal={conditionsFormVal}\n onClose={onClose}\n onSave={onSave}\n />\n </Box>\n </Drawer>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConditionalAccessSidebar.esm.js","sources":["../../../src/components/ConditionalAccess/ConditionalAccessSidebar.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 { makeStyles } from '@material-ui/core';\nimport Drawer from '@material-ui/core/Drawer';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { ConditionsForm } from './ConditionsForm';\nimport { ConditionsData, RulesData } from './types';\n\nconst useDrawerStyles = makeStyles(() => ({\n paper: {\n ['@media (max-width: 960px)']: {\n width: '-webkit-fill-available',\n },\n width: '50vw',\n height: '100vh',\n gap: '3%',\n display: '-webkit-inline-box',\n },\n}));\n\nconst useDrawerContentStyles = makeStyles(theme => ({\n sidebar: {\n display: 'flex',\n flexFlow: 'column',\n justifyContent: 'space-between',\n backgroundColor: `${theme.palette.background.default} !important`,\n },\n header: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n padding: theme.spacing(2.5),\n fontFamily: theme.typography.fontFamily,\n },\n headerSubtitle: {\n fontWeight: 400,\n fontFamily: theme.typography.fontFamily,\n paddingTop: theme.spacing(1),\n },\n}));\n\ntype ConditionalAccessSidebarProps = {\n open: boolean;\n onClose: () => void;\n onSave: (conditions?: ConditionsData) => void;\n selPluginResourceType: string;\n conditionRulesData?: RulesData;\n conditionsFormVal?: ConditionsData;\n};\n\nexport const ConditionalAccessSidebar = ({\n open,\n onClose,\n onSave,\n selPluginResourceType,\n conditionRulesData,\n conditionsFormVal,\n}: ConditionalAccessSidebarProps) => {\n const classes = useDrawerStyles();\n const contentClasses = useDrawerContentStyles();\n return (\n <Drawer\n anchor=\"right\"\n open={open}\n data-testid=\"rules-sidebar\"\n classes={{\n paper: classes.paper,\n }}\n >\n <Box className={contentClasses.sidebar}>\n <Box className={contentClasses.header}>\n <Typography variant=\"h5\">\n <Typography component=\"span\" sx={{ fontWeight: 500 }}>\n Configure access for the\n </Typography>{' '}\n {selPluginResourceType}\n <Typography\n variant=\"body2\"\n className={contentClasses.headerSubtitle}\n align=\"left\"\n >\n By default, the selected resource type will be visible to the\n chosen users in step two. If you want to restrict or grant\n permission to specific plugin resource type rule, select it and\n add the required parameters.\n </Typography>\n </Typography>\n <IconButton\n key=\"dismiss\"\n title=\"Close the drawer\"\n onClick={onClose}\n color=\"inherit\"\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n <ConditionsForm\n conditionRulesData={conditionRulesData}\n selPluginResourceType={selPluginResourceType}\n conditionsFormVal={conditionsFormVal}\n onClose={onClose}\n onSave={onSave}\n />\n </Box>\n </Drawer>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionsForm.esm.js","sources":["../../../src/components/ConditionalAccess/ConditionsForm.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { PermissionCondition } from '@backstage/plugin-permission-common';\n\nimport { Box, Button, makeStyles } from '@material-ui/core';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport WarningIcon from '@mui/icons-material/Warning';\n\nimport {\n hasAllOfOrAnyOfErrors,\n hasNestedNotErrors,\n hasSimpleConditionOrNotErrors,\n initializeErrors,\n isSimpleRule,\n resetErrors,\n} from '../../utils/conditional-access-utils';\nimport { ConditionsFormRow } from './ConditionsFormRow';\nimport { criterias } from './const';\nimport {\n AccessConditionsErrors,\n Condition,\n ConditionsData,\n RulesData,\n} from './types';\n\nconst useStyles = makeStyles(theme => ({\n form: {\n padding: theme.spacing(2.5),\n paddingTop: 0,\n flexGrow: 1,\n overflow: 'auto',\n },\n addConditionButton: {\n color: theme.palette.primary.light,\n },\n footer: {\n display: 'flex',\n flexDirection: 'row',\n gap: '15px',\n alignItems: 'baseline',\n borderTop: `2px solid ${theme.palette.border}`,\n padding: theme.spacing(2.5),\n '& button': {\n textTransform: 'none',\n },\n },\n}));\n\ntype ConditionFormProps = {\n conditionRulesData?: RulesData;\n conditionsFormVal?: ConditionsData;\n selPluginResourceType: string;\n onClose: () => void;\n onSave: (conditions?: ConditionsData) => void;\n};\n\nexport const ConditionsForm = ({\n conditionRulesData,\n selPluginResourceType,\n conditionsFormVal,\n onClose,\n onSave,\n}: ConditionFormProps) => {\n const classes = useStyles();\n const [conditions, setConditions] = React.useState<ConditionsData>(\n conditionsFormVal ?? {\n condition: {\n rule: '',\n resourceType: selPluginResourceType,\n params: {},\n },\n },\n );\n const [criteria, setCriteria] = React.useState<keyof ConditionsData>(\n (Object.keys(conditions)[0] as keyof ConditionsData) ?? criterias.condition,\n );\n const [errors, setErrors] = React.useState<\n AccessConditionsErrors | undefined\n >(initializeErrors(criteria, conditions));\n\n const [removeAllClicked, setRemoveAllClicked] =\n React.useState<boolean>(false);\n\n const flattenConditions = (\n conditionData: Condition[],\n ): PermissionCondition[] => {\n const flatConditions: PermissionCondition[] = [];\n\n const processCondition = (condition: Condition) => {\n if ('rule' in condition) {\n flatConditions.push(condition);\n } else {\n if (condition.allOf) {\n condition.allOf.forEach(processCondition);\n }\n if (condition.anyOf) {\n condition.anyOf.forEach(processCondition);\n }\n if (condition.not) {\n if ('rule' in condition.not) {\n flatConditions.push(condition.not);\n } else {\n processCondition(condition.not);\n }\n }\n }\n };\n conditionData.forEach(processCondition);\n return flatConditions;\n };\n\n const isNoRuleSelected = () => {\n switch (criteria) {\n case criterias.condition:\n return !conditions.condition?.rule;\n case criterias.not: {\n const flatConditions = flattenConditions([\n conditions.not as PermissionCondition,\n ]);\n return flatConditions.some(c => !c.rule);\n }\n case criterias.allOf: {\n const flatConditions = flattenConditions(conditions.allOf || []);\n return flatConditions.some(c => !c.rule);\n }\n case criterias.anyOf: {\n const flatConditions = flattenConditions(conditions.anyOf || []);\n return flatConditions.some(c => !c.rule);\n }\n default:\n return true;\n }\n };\n\n const hasAnyErrors = (): boolean => {\n if (!errors) return false;\n\n if (\n criteria === criterias.condition ||\n (criteria === criterias.not &&\n isSimpleRule(conditions[criteria] as Condition))\n ) {\n return hasSimpleConditionOrNotErrors(errors, criteria);\n }\n\n if (\n criteria === criterias.not &&\n !isSimpleRule(conditions[criteria] as Condition)\n ) {\n return hasNestedNotErrors(errors, conditions, criteria);\n }\n\n if (criteria === criterias.allOf || criteria === criterias.anyOf) {\n return hasAllOfOrAnyOfErrors(errors, criteria);\n }\n\n return false;\n };\n\n const isSaveDisabled = () => {\n if (removeAllClicked) return false;\n\n return (\n hasAnyErrors() ||\n isNoRuleSelected() ||\n Object.is(conditionsFormVal, conditions)\n );\n };\n\n const hasMultiLevelNestedConditions = (): boolean => {\n if (!Array.isArray(conditions[criteria])) {\n return false;\n }\n\n return (conditions[criteria] as Condition[])\n .filter(condition => !('rule' in condition))\n .some((firstLevelNestedCondition: Condition) => {\n const nestedConditionCriteria = Object.keys(\n firstLevelNestedCondition,\n )[0];\n if (\n Array.isArray(\n firstLevelNestedCondition[\n nestedConditionCriteria as keyof Condition\n ],\n )\n ) {\n return (\n firstLevelNestedCondition[\n nestedConditionCriteria as keyof Condition\n ] as Condition[]\n ).some((con: Condition) => !('rule' in con));\n }\n\n return !Object.keys(\n firstLevelNestedCondition[\n nestedConditionCriteria as keyof Condition\n ] as Condition[],\n ).includes('rule');\n });\n };\n\n return (\n <>\n <Box className={classes.form}>\n <ConditionsFormRow\n conditionRulesData={conditionRulesData}\n conditionRow={conditions}\n criteria={criteria}\n selPluginResourceType={selPluginResourceType}\n onRuleChange={newCondition => setConditions(newCondition)}\n setCriteria={setCriteria}\n setErrors={setErrors}\n setRemoveAllClicked={setRemoveAllClicked}\n />\n {hasMultiLevelNestedConditions() && (\n <Alert\n icon={<WarningIcon />}\n style={{ margin: '1.5rem 0 1rem 0' }}\n severity=\"warning\"\n data-testid=\"multi-level-nested-conditions-warning\"\n >\n <AlertTitle data-testid=\"multi-level-nested-conditions-warning-title\">\n Multiple levels of nested conditions are not supported\n </AlertTitle>\n Only one level is displayed. Please use the CLI to view all nested\n conditions.\n </Alert>\n )}\n </Box>\n <Box className={classes.footer}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n data-testid=\"save-conditions\"\n disabled={isSaveDisabled()}\n onClick={() => {\n if (removeAllClicked) {\n onSave(undefined);\n } else onSave(conditions);\n }}\n >\n Save\n </Button>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={onClose}\n data-testid=\"cancel-conditions\"\n >\n Cancel\n </Button>\n <Button\n variant=\"text\"\n color=\"primary\"\n disabled={removeAllClicked || isNoRuleSelected()}\n onClick={() => {\n setRemoveAllClicked(true);\n setCriteria(criterias.condition);\n setConditions({\n condition: {\n rule: '',\n resourceType: selPluginResourceType,\n params: {},\n },\n });\n setErrors(resetErrors(criterias.condition));\n }}\n data-testid=\"remove-conditions\"\n >\n Remove all\n </Button>\n </Box>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConditionsForm.esm.js","sources":["../../../src/components/ConditionalAccess/ConditionsForm.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { PermissionCondition } from '@backstage/plugin-permission-common';\n\nimport { Box, Button, makeStyles } from '@material-ui/core';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport WarningIcon from '@mui/icons-material/Warning';\n\nimport {\n hasAllOfOrAnyOfErrors,\n hasNestedNotErrors,\n hasSimpleConditionOrNotErrors,\n initializeErrors,\n isSimpleRule,\n resetErrors,\n} from '../../utils/conditional-access-utils';\nimport { ConditionsFormRow } from './ConditionsFormRow';\nimport { criterias } from './const';\nimport {\n AccessConditionsErrors,\n Condition,\n ConditionsData,\n RulesData,\n} from './types';\n\nconst useStyles = makeStyles(theme => ({\n form: {\n padding: theme.spacing(2.5),\n paddingTop: 0,\n flexGrow: 1,\n overflow: 'auto',\n },\n addConditionButton: {\n color: theme.palette.primary.light,\n },\n footer: {\n display: 'flex',\n flexDirection: 'row',\n gap: '15px',\n alignItems: 'baseline',\n borderTop: `2px solid ${theme.palette.border}`,\n padding: theme.spacing(2.5),\n '& button': {\n textTransform: 'none',\n },\n },\n}));\n\ntype ConditionFormProps = {\n conditionRulesData?: RulesData;\n conditionsFormVal?: ConditionsData;\n selPluginResourceType: string;\n onClose: () => void;\n onSave: (conditions?: ConditionsData) => void;\n};\n\nexport const ConditionsForm = ({\n conditionRulesData,\n selPluginResourceType,\n conditionsFormVal,\n onClose,\n onSave,\n}: ConditionFormProps) => {\n const classes = useStyles();\n const [conditions, setConditions] = React.useState<ConditionsData>(\n conditionsFormVal ?? {\n condition: {\n rule: '',\n resourceType: selPluginResourceType,\n params: {},\n },\n },\n );\n const [criteria, setCriteria] = React.useState<keyof ConditionsData>(\n (Object.keys(conditions)[0] as keyof ConditionsData) ?? criterias.condition,\n );\n const [errors, setErrors] = React.useState<\n AccessConditionsErrors | undefined\n >(initializeErrors(criteria, conditions));\n\n const [removeAllClicked, setRemoveAllClicked] =\n React.useState<boolean>(false);\n\n const flattenConditions = (\n conditionData: Condition[],\n ): PermissionCondition[] => {\n const flatConditions: PermissionCondition[] = [];\n\n const processCondition = (condition: Condition) => {\n if ('rule' in condition) {\n flatConditions.push(condition);\n } else {\n if (condition.allOf) {\n condition.allOf.forEach(processCondition);\n }\n if (condition.anyOf) {\n condition.anyOf.forEach(processCondition);\n }\n if (condition.not) {\n if ('rule' in condition.not) {\n flatConditions.push(condition.not);\n } else {\n processCondition(condition.not);\n }\n }\n }\n };\n conditionData.forEach(processCondition);\n return flatConditions;\n };\n\n const isNoRuleSelected = () => {\n switch (criteria) {\n case criterias.condition:\n return !conditions.condition?.rule;\n case criterias.not: {\n const flatConditions = flattenConditions([\n conditions.not as PermissionCondition,\n ]);\n return flatConditions.some(c => !c.rule);\n }\n case criterias.allOf: {\n const flatConditions = flattenConditions(conditions.allOf || []);\n return flatConditions.some(c => !c.rule);\n }\n case criterias.anyOf: {\n const flatConditions = flattenConditions(conditions.anyOf || []);\n return flatConditions.some(c => !c.rule);\n }\n default:\n return true;\n }\n };\n\n const hasAnyErrors = (): boolean => {\n if (!errors) return false;\n\n if (\n criteria === criterias.condition ||\n (criteria === criterias.not &&\n isSimpleRule(conditions[criteria] as Condition))\n ) {\n return hasSimpleConditionOrNotErrors(errors, criteria);\n }\n\n if (\n criteria === criterias.not &&\n !isSimpleRule(conditions[criteria] as Condition)\n ) {\n return hasNestedNotErrors(errors, conditions, criteria);\n }\n\n if (criteria === criterias.allOf || criteria === criterias.anyOf) {\n return hasAllOfOrAnyOfErrors(errors, criteria);\n }\n\n return false;\n };\n\n const isSaveDisabled = () => {\n if (removeAllClicked) return false;\n\n return (\n hasAnyErrors() ||\n isNoRuleSelected() ||\n Object.is(conditionsFormVal, conditions)\n );\n };\n\n const hasMultiLevelNestedConditions = (): boolean => {\n if (!Array.isArray(conditions[criteria])) {\n return false;\n }\n\n return (conditions[criteria] as Condition[])\n .filter(condition => !('rule' in condition))\n .some((firstLevelNestedCondition: Condition) => {\n const nestedConditionCriteria = Object.keys(\n firstLevelNestedCondition,\n )[0];\n if (\n Array.isArray(\n firstLevelNestedCondition[\n nestedConditionCriteria as keyof Condition\n ],\n )\n ) {\n return (\n firstLevelNestedCondition[\n nestedConditionCriteria as keyof Condition\n ] as Condition[]\n ).some((con: Condition) => !('rule' in con));\n }\n\n return !Object.keys(\n firstLevelNestedCondition[\n nestedConditionCriteria as keyof Condition\n ] as Condition[],\n ).includes('rule');\n });\n };\n\n return (\n <>\n <Box className={classes.form}>\n <ConditionsFormRow\n conditionRulesData={conditionRulesData}\n conditionRow={conditions}\n criteria={criteria}\n selPluginResourceType={selPluginResourceType}\n onRuleChange={newCondition => setConditions(newCondition)}\n setCriteria={setCriteria}\n setErrors={setErrors}\n setRemoveAllClicked={setRemoveAllClicked}\n />\n {hasMultiLevelNestedConditions() && (\n <Alert\n icon={<WarningIcon />}\n style={{ margin: '1.5rem 0 1rem 0' }}\n severity=\"warning\"\n data-testid=\"multi-level-nested-conditions-warning\"\n >\n <AlertTitle data-testid=\"multi-level-nested-conditions-warning-title\">\n Multiple levels of nested conditions are not supported\n </AlertTitle>\n Only one level is displayed. Please use the CLI to view all nested\n conditions.\n </Alert>\n )}\n </Box>\n <Box className={classes.footer}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n data-testid=\"save-conditions\"\n disabled={isSaveDisabled()}\n onClick={() => {\n if (removeAllClicked) {\n onSave(undefined);\n } else onSave(conditions);\n }}\n >\n Save\n </Button>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={onClose}\n data-testid=\"cancel-conditions\"\n >\n Cancel\n </Button>\n <Button\n variant=\"text\"\n color=\"primary\"\n disabled={removeAllClicked || isNoRuleSelected()}\n onClick={() => {\n setRemoveAllClicked(true);\n setCriteria(criterias.condition);\n setConditions({\n condition: {\n rule: '',\n resourceType: selPluginResourceType,\n params: {},\n },\n });\n setErrors(resetErrors(criterias.condition));\n }}\n data-testid=\"remove-conditions\"\n >\n Remove all\n </Button>\n </Box>\n </>\n );\n};\n"],"names":[],"mappings":"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"}