@keycloak/keycloak-admin-ui 26.7.5 → 26.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +10 -0
  2. package/lib/.vite/manifest.json +52 -42
  3. package/lib/{AddDefaultTrust-BvsWwMDh.js → AddDefaultTrust-0TzkSSVz.js} +8 -8
  4. package/lib/{AddDefaultTrust-BvsWwMDh.js.map → AddDefaultTrust-0TzkSSVz.js.map} +1 -1
  5. package/lib/{AddJWTAuthorizationGrant-ByBPPwyK.js → AddJWTAuthorizationGrant-BBVNGscZ.js} +12 -12
  6. package/lib/{AddJWTAuthorizationGrant-ByBPPwyK.js.map → AddJWTAuthorizationGrant-BBVNGscZ.js.map} +1 -1
  7. package/lib/{AddKubernetesConnect-D4xTogVo.js → AddKubernetesConnect-D_HJWqhs.js} +14 -11
  8. package/lib/AddKubernetesConnect-D_HJWqhs.js.map +1 -0
  9. package/lib/{AddOAuth2-BDmTZ-YA.js → AddOAuth2-BiNgjhyO.js} +13 -13
  10. package/lib/{AddOAuth2-BDmTZ-YA.js.map → AddOAuth2-BiNgjhyO.js.map} +1 -1
  11. package/lib/AddOid4Vp-gKawBcrP.js +73 -0
  12. package/lib/AddOid4Vp-gKawBcrP.js.map +1 -0
  13. package/lib/{AddSpiffeConnect-B6_E1i6Z.js → AddSpiffeConnect-BmHbvLbU.js} +8 -8
  14. package/lib/{AddSpiffeConnect-B6_E1i6Z.js.map → AddSpiffeConnect-BmHbvLbU.js.map} +1 -1
  15. package/lib/{CreateFlow-C5QWzOsy.js → CreateFlow-9Jjjw5b9.js} +2 -2
  16. package/lib/{CreateFlow-C5QWzOsy.js.map → CreateFlow-9Jjjw5b9.js.map} +1 -1
  17. package/lib/DetailOrganization-DZcO3bbq.js +420 -0
  18. package/lib/DetailOrganization-DZcO3bbq.js.map +1 -0
  19. package/lib/{ExecutorForm-n3e9Qvrl.js → ExecutorForm-BrHBEQVA.js} +23 -23
  20. package/lib/{ExecutorForm-n3e9Qvrl.js.map → ExecutorForm-BrHBEQVA.js.map} +1 -1
  21. package/lib/{FlowDetails-CnVZXaRP.js → FlowDetails-FqkRF9Fk.js} +243 -226
  22. package/lib/{FlowDetails-CnVZXaRP.js.map → FlowDetails-FqkRF9Fk.js.map} +1 -1
  23. package/lib/{NewOrganization-D4X_bhyD.js → NewOrganization-mwmhTgBv.js} +13 -13
  24. package/lib/NewOrganization-mwmhTgBv.js.map +1 -0
  25. package/lib/{PermissionConfigurationDetails-UjUwrvYu.js → PermissionConfigurationDetails-BWUvLMh4.js} +92 -91
  26. package/lib/PermissionConfigurationDetails-BWUvLMh4.js.map +1 -0
  27. package/lib/PermissionDetails-BkVFczt9.js +437 -0
  28. package/lib/PermissionDetails-BkVFczt9.js.map +1 -0
  29. package/lib/{RealmSection-BTCX9rHA.js → RealmSection-DJ8T80Z6.js} +26 -26
  30. package/lib/{RealmSection-BTCX9rHA.js.map → RealmSection-DJ8T80Z6.js.map} +1 -1
  31. package/lib/{ResourceDetails-C3cyeLL5.js → ResourceDetails-Cyb5CmVt.js} +24 -24
  32. package/lib/{ResourceDetails-C3cyeLL5.js.map → ResourceDetails-Cyb5CmVt.js.map} +1 -1
  33. package/lib/{ScopeDetails-C16qMBw-.js → ScopeDetails-BV7h3hMw.js} +17 -17
  34. package/lib/{ScopeDetails-C16qMBw-.js.map → ScopeDetails-BV7h3hMw.js.map} +1 -1
  35. package/lib/{ScopePicker-DbxK9g9R.js → ScopePicker-USX1qW3k.js} +18 -18
  36. package/lib/{ScopePicker-DbxK9g9R.js.map → ScopePicker-USX1qW3k.js.map} +1 -1
  37. package/lib/{WorkflowDetailForm-d5rClboG.js → WorkflowDetailForm-BDIXzgoJ.js} +31 -31
  38. package/lib/{WorkflowDetailForm-d5rClboG.js.map → WorkflowDetailForm-BDIXzgoJ.js.map} +1 -1
  39. package/lib/{WorkflowsSection-DRU3QF93.js → WorkflowsSection-Htg3cqfo.js} +16 -16
  40. package/lib/{WorkflowsSection-DRU3QF93.js.map → WorkflowsSection-Htg3cqfo.js.map} +1 -1
  41. package/lib/apps/admin-ui/src/authentication/constants.d.ts +3 -1
  42. package/lib/apps/admin-ui/src/client-scopes/details/oid4vciAttributes.d.ts +8 -3
  43. package/lib/apps/admin-ui/src/clients/ssf/tabs/CreateStreamForm.d.ts +18 -0
  44. package/lib/apps/admin-ui/src/clients/ssf/utils.d.ts +13 -0
  45. package/lib/apps/admin-ui/src/components/client/ClientSelect.d.ts +3 -4
  46. package/lib/apps/admin-ui/src/components/client/ClientSelectModal.d.ts +8 -0
  47. package/lib/apps/admin-ui/src/components/group/GroupPickerDialog.d.ts +8 -2
  48. package/lib/apps/admin-ui/src/components/role-mapping/RoleMapping.d.ts +1 -32
  49. package/lib/apps/admin-ui/src/components/role-mapping/resource.d.ts +9 -1
  50. package/lib/apps/admin-ui/src/context/identity-provider/IdentityProviderContext.d.ts +12 -0
  51. package/lib/apps/admin-ui/src/identity-providers/add/AddOid4Vp.d.ts +1 -0
  52. package/lib/apps/admin-ui/src/identity-providers/add/IdpDomainsTab.d.ts +5 -0
  53. package/lib/apps/admin-ui/src/identity-providers/add/IdpOrganizationsTab.d.ts +6 -0
  54. package/lib/apps/admin-ui/src/identity-providers/add/Oid4VpSettings.d.ts +1 -0
  55. package/lib/apps/admin-ui/src/identity-providers/routes/IdentityProvider.d.ts +1 -1
  56. package/lib/apps/admin-ui/src/identity-providers/routes/IdentityProviderOid4Vp.d.ts +7 -0
  57. package/lib/apps/admin-ui/src/organizations/DomainsTab.d.ts +1 -0
  58. package/lib/apps/admin-ui/src/organizations/IdentityProviderSelect.d.ts +4 -1
  59. package/lib/apps/admin-ui/src/organizations/MembershipTypeToggle.d.ts +9 -0
  60. package/lib/apps/admin-ui/src/organizations/OrganizationForm.d.ts +4 -1
  61. package/lib/apps/admin-ui/src/organizations/routes/EditOrganization.d.ts +1 -1
  62. package/lib/apps/admin-ui/src/realm-settings/ssf/SsfTransmitterDisableConfirmDialog.d.ts +1 -1
  63. package/lib/apps/admin-ui/src/utils/useIsFeatureEnabled.d.ts +3 -1
  64. package/lib/{index-C-D-m0EP.js → index-DsIT2BLV.js} +23888 -22978
  65. package/lib/{index-C-D-m0EP.js.map → index-DsIT2BLV.js.map} +1 -1
  66. package/lib/keycloak-admin-ui.js +75 -75
  67. package/package.json +4 -4
  68. package/lib/AddKubernetesConnect-D4xTogVo.js.map +0 -1
  69. package/lib/DetailOrganization-amJJPyq-.js +0 -204
  70. package/lib/DetailOrganization-amJJPyq-.js.map +0 -1
  71. package/lib/NewOrganization-D4X_bhyD.js.map +0 -1
  72. package/lib/PermissionConfigurationDetails-UjUwrvYu.js.map +0 -1
  73. package/lib/PermissionDetails-gUH5Lf-7.js +0 -413
  74. package/lib/PermissionDetails-gUH5Lf-7.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { jsxs as h, Fragment as g, jsx as e } from "react/jsx-runtime";
2
- import { a_ as F, a as L, a$ as V, u as U, q as $, aa as j, e as q, b0 as M, b1 as W, V as H, P as Q, b2 as _, b3 as S, b4 as z, b5 as G, b6 as v, b7 as J, af as f, B as X, b8 as Y, b9 as Z, ba as ee, O as k, Q as O, S as K, U as A, bb as ae } from "./index-C-D-m0EP.js";
2
+ import { b1 as F, a as L, b2 as V, u as W, K as j, aa as H, e as M, b3 as U, b4 as $, V as Q, P as q, aI as z, b5 as S, b6 as G, b7 as J, b8 as v, b9 as X, af as f, B as Y, ba as Z, bb as _, bc as ee, Q as k, S as K, U as O, W as A, bd as ae } from "./index-DsIT2BLV.js";
3
3
  import { useState as m } from "react";
4
4
  import { useTranslation as p } from "react-i18next";
5
- import { useNavigate as te, Link as N } from "react-router-dom";
5
+ import { useNavigate as te, Link as I } from "react-router-dom";
6
6
  const ne = () => {
7
7
  const { t: n } = p(), [o, i] = m(!1), r = ee();
8
8
  return r.length < 3 ? null : /* @__PURE__ */ e(
@@ -21,10 +21,10 @@ const ne = () => {
21
21
  }
22
22
  ),
23
23
  isOpen: o,
24
- children: /* @__PURE__ */ e(O, { children: r.map(({ name: t }) => /* @__PURE__ */ e(
25
- K,
24
+ children: /* @__PURE__ */ e(K, { children: r.map(({ name: t }) => /* @__PURE__ */ e(
25
+ O,
26
26
  {
27
- component: (s) => /* @__PURE__ */ e(N, { ...s, to: S({ realm: t }) }),
27
+ component: (s) => /* @__PURE__ */ e(I, { ...s, to: S({ realm: t }) }),
28
28
  children: t
29
29
  },
30
30
  "server info"
@@ -51,8 +51,8 @@ const ne = () => {
51
51
  }
52
52
  ),
53
53
  isOpen: r,
54
- children: /* @__PURE__ */ e(O, { children: /* @__PURE__ */ e(
55
- K,
54
+ children: /* @__PURE__ */ e(K, { children: /* @__PURE__ */ e(
55
+ O,
56
56
  {
57
57
  "data-testid": "delete",
58
58
  onClick: () => {
@@ -65,19 +65,19 @@ const ne = () => {
65
65
  );
66
66
  };
67
67
  function me() {
68
- const { t: n } = p(), o = te(), { whoAmI: i } = F(), { realm: r } = L(), { environment: t } = V(), { adminClient: s } = U(), { addAlert: b, addError: I } = $(), [c, u] = m([]), [x, R] = m(!1), [C, P] = m(0), w = () => P(C + 1), T = async (a, l, B) => {
68
+ const { t: n } = p(), o = te(), { whoAmI: i } = F(), { realm: r } = L(), { environment: t } = V(), { adminClient: s } = W(), { addAlert: b, addError: N } = j(), [c, u] = m([]), [x, R] = m(!1), [C, E] = m(0), w = () => E(C + 1), P = async (a, l, B) => {
69
69
  try {
70
- return (await Y(
70
+ return (await Z(
71
71
  s,
72
72
  "ui-ext/realms/names",
73
73
  { first: `${a}`, max: `${l}`, search: B || "" }
74
74
  )).map((D) => ({ ...D, id: D.name }));
75
75
  } catch (d) {
76
- if (d instanceof Z && d.response.status < 500)
76
+ if (d instanceof _ && d.response.status < 500)
77
77
  return [];
78
78
  throw d;
79
79
  }
80
- }, [y, E] = j({
80
+ }, [y, T] = H({
81
81
  titleKey: n("deleteConfirmRealm", {
82
82
  count: c.length,
83
83
  name: c[0]?.name
@@ -86,7 +86,7 @@ function me() {
86
86
  continueButtonLabel: "delete",
87
87
  onConfirm: async () => {
88
88
  try {
89
- c.some(({ name: l }) => l === t.masterRealm) && b(n("cantDeleteMasterRealm"), q.warning);
89
+ c.some(({ name: l }) => l === t.masterRealm) && b(n("cantDeleteMasterRealm"), M.warning);
90
90
  const a = c.filter(
91
91
  ({ name: l }) => l !== t.masterRealm
92
92
  );
@@ -95,27 +95,27 @@ function me() {
95
95
  a.map(
96
96
  ({ name: l }) => s.realms.del({ realm: l })
97
97
  )
98
- ), b(n("deletedSuccessRealmSetting")), c.some(({ name: l }) => l === r) && o(M({ realm: t.masterRealm })), w(), u([]);
98
+ ), b(n("deletedSuccessRealmSetting")), c.some(({ name: l }) => l === r) && o(U({ realm: t.masterRealm })), w(), u([]);
99
99
  } catch (a) {
100
- I("deleteError", a);
100
+ N("deleteError", a);
101
101
  }
102
102
  }
103
103
  });
104
104
  return /* @__PURE__ */ h(g, { children: [
105
- /* @__PURE__ */ e(E, {}),
105
+ /* @__PURE__ */ e(T, {}),
106
106
  x && /* @__PURE__ */ e(
107
- W,
107
+ $,
108
108
  {
109
109
  onClose: () => {
110
110
  R(!1), w();
111
111
  }
112
112
  }
113
113
  ),
114
- /* @__PURE__ */ e(H, { titleKey: "manageRealms", divider: !1 }),
115
- /* @__PURE__ */ e(Q, { variant: "light", className: "pf-v5-u-p-0", children: /* @__PURE__ */ e(
116
- _,
114
+ /* @__PURE__ */ e(Q, { titleKey: "manageRealms", divider: !1 }),
115
+ /* @__PURE__ */ e(q, { variant: "light", className: "pf-v5-u-p-0", children: /* @__PURE__ */ e(
116
+ z,
117
117
  {
118
- loader: T,
118
+ loader: P,
119
119
  isPaginated: !0,
120
120
  onSelect: u,
121
121
  canSelectAll: !0,
@@ -131,7 +131,7 @@ function me() {
131
131
  ],
132
132
  toolbarItem: /* @__PURE__ */ h(g, { children: [
133
133
  /* @__PURE__ */ e(f, { children: i.createRealm && /* @__PURE__ */ e(
134
- X,
134
+ Y,
135
135
  {
136
136
  onClick: () => R(!0),
137
137
  "data-testid": "add-realm",
@@ -151,15 +151,15 @@ function me() {
151
151
  {
152
152
  name: "name",
153
153
  transforms: [v(20)],
154
- cellRenderer: ({ name: a }) => a !== r ? /* @__PURE__ */ e(N, { to: S({ realm: a }), children: a }) : /* @__PURE__ */ e(
155
- z,
154
+ cellRenderer: ({ name: a }) => a !== r ? /* @__PURE__ */ e(I, { to: S({ realm: a }), children: a }) : /* @__PURE__ */ e(
155
+ G,
156
156
  {
157
157
  bodyContent: n("currentRealmExplain"),
158
158
  triggerAction: "hover",
159
159
  children: /* @__PURE__ */ h(g, { children: [
160
160
  a,
161
161
  " ",
162
- /* @__PURE__ */ e(G, { isRead: !0, children: n("currentRealm") })
162
+ /* @__PURE__ */ e(J, { isRead: !0, children: n("currentRealm") })
163
163
  ] })
164
164
  }
165
165
  )
@@ -167,7 +167,7 @@ function me() {
167
167
  {
168
168
  name: "displayName",
169
169
  transforms: [v(80)],
170
- cellRenderer: ({ displayName: a }) => J(n, a, "—")
170
+ cellRenderer: ({ displayName: a }) => X(n, a, "—")
171
171
  }
172
172
  ]
173
173
  },
@@ -178,4 +178,4 @@ function me() {
178
178
  export {
179
179
  me as default
180
180
  };
181
- //# sourceMappingURL=RealmSection-BTCX9rHA.js.map
181
+ //# sourceMappingURL=RealmSection-DJ8T80Z6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RealmSection-BTCX9rHA.js","sources":["../src/realm/RealmSection.tsx"],"sourcesContent":["import { NetworkError } from \"@keycloak/keycloak-admin-client\";\nimport {\n KeycloakDataTable,\n useAlerts,\n useEnvironment,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n AlertVariant,\n Badge,\n Button,\n Dropdown,\n DropdownItem,\n DropdownList,\n MenuToggle,\n PageSection,\n Popover,\n ToolbarItem,\n} from \"@patternfly/react-core\";\nimport { EllipsisVIcon } from \"@patternfly/react-icons\";\nimport { cellWidth } from \"@patternfly/react-table\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { ViewHeader } from \"../components/view-header/ViewHeader\";\nimport { fetchAdminUI } from \"../context/auth/admin-ui-endpoint\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { useRecentRealms } from \"../context/RecentRealms\";\nimport { useWhoAmI } from \"../context/whoami/WhoAmI\";\nimport type { Environment } from \"../environment-types\";\nimport { resolveDisplayName } from \"../util\";\nimport NewRealmForm from \"./add/NewRealmForm\";\nimport { toRealm } from \"./RealmRoutes\";\nimport { toDashboard } from \"../dashboard/routes/Dashboard\";\n\nexport type RealmNameRepresentation = {\n name: string;\n displayName?: string;\n};\n\nconst RecentRealmsDropdown = () => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n const recentRealms = useRecentRealms();\n\n if (recentRealms.length < 3) return null;\n return (\n <Dropdown\n shouldFocusToggleOnSelect\n onOpenChange={(isOpen) => setOpen(isOpen)}\n toggle={(ref) => (\n <MenuToggle\n data-testid=\"kebab\"\n aria-label=\"Kebab toggle\"\n ref={ref}\n onClick={() => setOpen(!open)}\n >\n {t(\"recentRealms\")}\n </MenuToggle>\n )}\n isOpen={open}\n >\n <DropdownList>\n {recentRealms.map(({ name }) => (\n <DropdownItem\n key=\"server info\"\n component={(props) => (\n <Link {...props} to={toDashboard({ realm: name })} />\n )}\n >\n {name}\n </DropdownItem>\n ))}\n </DropdownList>\n </Dropdown>\n );\n};\n\ntype KebabDropdownProps = {\n onClick: () => void;\n isDisabled?: boolean;\n};\n\nconst KebabDropdown = ({ onClick, isDisabled }: KebabDropdownProps) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n return (\n <Dropdown\n shouldFocusToggleOnSelect\n onOpenChange={(isOpen) => setOpen(isOpen)}\n toggle={(ref) => (\n <MenuToggle\n data-testid=\"kebab\"\n aria-label=\"Kebab toggle\"\n ref={ref}\n onClick={() => setOpen(!open)}\n variant=\"plain\"\n isDisabled={isDisabled}\n >\n <EllipsisVIcon />\n </MenuToggle>\n )}\n isOpen={open}\n >\n <DropdownList>\n <DropdownItem\n data-testid=\"delete\"\n onClick={() => {\n setOpen(false);\n onClick();\n }}\n >\n {t(\"delete\")}\n </DropdownItem>\n </DropdownList>\n </Dropdown>\n );\n};\n\ntype RealmRow = RealmNameRepresentation & { id: string };\n\nexport default function RealmSection() {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { whoAmI } = useWhoAmI();\n const { realm } = useRealm();\n const { environment } = useEnvironment<Environment>();\n const { adminClient } = useAdminClient();\n const { addAlert, addError } = useAlerts();\n\n const [selected, setSelected] = useState<RealmRow[]>([]);\n const [openNewRealm, setOpenNewRealm] = useState(false);\n const [key, setKey] = useState(0);\n const refresh = () => setKey(key + 1);\n\n const loader = async (first?: number, max?: number, search?: string) => {\n try {\n const result = await fetchAdminUI<RealmNameRepresentation[]>(\n adminClient,\n \"ui-ext/realms/names\",\n { first: `${first}`, max: `${max}`, search: search || \"\" },\n );\n return result.map((r) => ({ ...r, id: r.name }));\n } catch (error) {\n if (error instanceof NetworkError && error.response.status < 500) {\n return [];\n }\n\n throw error;\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: t(\"deleteConfirmRealm\", {\n count: selected.length,\n name: selected[0]?.name,\n }),\n messageKey: \"deleteConfirmRealmSetting\",\n continueButtonLabel: \"delete\",\n onConfirm: async () => {\n try {\n if (selected.some(({ name }) => name === environment.masterRealm)) {\n addAlert(t(\"cantDeleteMasterRealm\"), AlertVariant.warning);\n }\n const filtered = selected.filter(\n ({ name }) => name !== environment.masterRealm,\n );\n if (filtered.length === 0) return;\n await Promise.all(\n filtered.map(({ name: realmName }) =>\n adminClient.realms.del({ realm: realmName }),\n ),\n );\n addAlert(t(\"deletedSuccessRealmSetting\"));\n if (selected.some(({ name }) => name === realm)) {\n void navigate(toRealm({ realm: environment.masterRealm }));\n }\n refresh();\n setSelected([]);\n } catch (error) {\n addError(\"deleteError\", error);\n }\n },\n });\n\n return (\n <>\n <DeleteConfirm />\n {openNewRealm && (\n <NewRealmForm\n onClose={() => {\n setOpenNewRealm(false);\n refresh();\n }}\n />\n )}\n <ViewHeader titleKey=\"manageRealms\" divider={false} />\n <PageSection variant=\"light\" className=\"pf-v5-u-p-0\">\n <KeycloakDataTable\n key={key}\n loader={loader}\n isPaginated\n onSelect={setSelected}\n canSelectAll\n ariaLabelKey=\"selectRealm\"\n searchPlaceholderKey=\"search\"\n actions={[\n {\n title: t(\"delete\"),\n onRowClick: (selected) => {\n setSelected([selected]);\n toggleDeleteDialog();\n },\n },\n ]}\n toolbarItem={\n <>\n <ToolbarItem>\n {whoAmI.createRealm && (\n <Button\n onClick={() => setOpenNewRealm(true)}\n data-testid=\"add-realm\"\n >\n {t(\"createRealm\")}\n </Button>\n )}\n </ToolbarItem>\n <ToolbarItem>\n <RecentRealmsDropdown />\n </ToolbarItem>\n <ToolbarItem>\n <KebabDropdown\n onClick={toggleDeleteDialog}\n isDisabled={selected.length === 0}\n />\n </ToolbarItem>\n </>\n }\n columns={[\n {\n name: \"name\",\n transforms: [cellWidth(20)],\n cellRenderer: ({ name }) =>\n name !== realm ? (\n <Link to={toDashboard({ realm: name })}>{name}</Link>\n ) : (\n <Popover\n bodyContent={t(\"currentRealmExplain\")}\n triggerAction=\"hover\"\n >\n <>\n {name} <Badge isRead>{t(\"currentRealm\")}</Badge>\n </>\n </Popover>\n ),\n },\n {\n name: \"displayName\",\n transforms: [cellWidth(80)],\n cellRenderer: ({ displayName }) =>\n resolveDisplayName(t, displayName, \"—\"),\n },\n ]}\n />\n </PageSection>\n </>\n );\n}\n"],"names":["RecentRealmsDropdown","t","useTranslation","open","setOpen","useState","recentRealms","useRecentRealms","jsx","Dropdown","isOpen","ref","MenuToggle","DropdownList","name","DropdownItem","props","Link","toDashboard","KebabDropdown","onClick","isDisabled","EllipsisVIcon","RealmSection","navigate","useNavigate","whoAmI","useWhoAmI","realm","useRealm","environment","useEnvironment","adminClient","useAdminClient","addAlert","addError","useAlerts","selected","setSelected","openNewRealm","setOpenNewRealm","key","setKey","refresh","loader","first","max","search","fetchAdminUI","r","error","NetworkError","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","AlertVariant","filtered","realmName","toRealm","jsxs","Fragment","NewRealmForm","ViewHeader","PageSection","KeycloakDataTable","ToolbarItem","Button","cellWidth","Popover","Badge","displayName","resolveDisplayName"],"mappings":"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"}
1
+ {"version":3,"file":"RealmSection-DJ8T80Z6.js","sources":["../src/realm/RealmSection.tsx"],"sourcesContent":["import { NetworkError } from \"@keycloak/keycloak-admin-client\";\nimport {\n KeycloakDataTable,\n useAlerts,\n useEnvironment,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n AlertVariant,\n Badge,\n Button,\n Dropdown,\n DropdownItem,\n DropdownList,\n MenuToggle,\n PageSection,\n Popover,\n ToolbarItem,\n} from \"@patternfly/react-core\";\nimport { EllipsisVIcon } from \"@patternfly/react-icons\";\nimport { cellWidth } from \"@patternfly/react-table\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { ViewHeader } from \"../components/view-header/ViewHeader\";\nimport { fetchAdminUI } from \"../context/auth/admin-ui-endpoint\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { useRecentRealms } from \"../context/RecentRealms\";\nimport { useWhoAmI } from \"../context/whoami/WhoAmI\";\nimport type { Environment } from \"../environment-types\";\nimport { resolveDisplayName } from \"../util\";\nimport NewRealmForm from \"./add/NewRealmForm\";\nimport { toRealm } from \"./RealmRoutes\";\nimport { toDashboard } from \"../dashboard/routes/Dashboard\";\n\nexport type RealmNameRepresentation = {\n name: string;\n displayName?: string;\n};\n\nconst RecentRealmsDropdown = () => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n const recentRealms = useRecentRealms();\n\n if (recentRealms.length < 3) return null;\n return (\n <Dropdown\n shouldFocusToggleOnSelect\n onOpenChange={(isOpen) => setOpen(isOpen)}\n toggle={(ref) => (\n <MenuToggle\n data-testid=\"kebab\"\n aria-label=\"Kebab toggle\"\n ref={ref}\n onClick={() => setOpen(!open)}\n >\n {t(\"recentRealms\")}\n </MenuToggle>\n )}\n isOpen={open}\n >\n <DropdownList>\n {recentRealms.map(({ name }) => (\n <DropdownItem\n key=\"server info\"\n component={(props) => (\n <Link {...props} to={toDashboard({ realm: name })} />\n )}\n >\n {name}\n </DropdownItem>\n ))}\n </DropdownList>\n </Dropdown>\n );\n};\n\ntype KebabDropdownProps = {\n onClick: () => void;\n isDisabled?: boolean;\n};\n\nconst KebabDropdown = ({ onClick, isDisabled }: KebabDropdownProps) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n return (\n <Dropdown\n shouldFocusToggleOnSelect\n onOpenChange={(isOpen) => setOpen(isOpen)}\n toggle={(ref) => (\n <MenuToggle\n data-testid=\"kebab\"\n aria-label=\"Kebab toggle\"\n ref={ref}\n onClick={() => setOpen(!open)}\n variant=\"plain\"\n isDisabled={isDisabled}\n >\n <EllipsisVIcon />\n </MenuToggle>\n )}\n isOpen={open}\n >\n <DropdownList>\n <DropdownItem\n data-testid=\"delete\"\n onClick={() => {\n setOpen(false);\n onClick();\n }}\n >\n {t(\"delete\")}\n </DropdownItem>\n </DropdownList>\n </Dropdown>\n );\n};\n\ntype RealmRow = RealmNameRepresentation & { id: string };\n\nexport default function RealmSection() {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { whoAmI } = useWhoAmI();\n const { realm } = useRealm();\n const { environment } = useEnvironment<Environment>();\n const { adminClient } = useAdminClient();\n const { addAlert, addError } = useAlerts();\n\n const [selected, setSelected] = useState<RealmRow[]>([]);\n const [openNewRealm, setOpenNewRealm] = useState(false);\n const [key, setKey] = useState(0);\n const refresh = () => setKey(key + 1);\n\n const loader = async (first?: number, max?: number, search?: string) => {\n try {\n const result = await fetchAdminUI<RealmNameRepresentation[]>(\n adminClient,\n \"ui-ext/realms/names\",\n { first: `${first}`, max: `${max}`, search: search || \"\" },\n );\n return result.map((r) => ({ ...r, id: r.name }));\n } catch (error) {\n if (error instanceof NetworkError && error.response.status < 500) {\n return [];\n }\n\n throw error;\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: t(\"deleteConfirmRealm\", {\n count: selected.length,\n name: selected[0]?.name,\n }),\n messageKey: \"deleteConfirmRealmSetting\",\n continueButtonLabel: \"delete\",\n onConfirm: async () => {\n try {\n if (selected.some(({ name }) => name === environment.masterRealm)) {\n addAlert(t(\"cantDeleteMasterRealm\"), AlertVariant.warning);\n }\n const filtered = selected.filter(\n ({ name }) => name !== environment.masterRealm,\n );\n if (filtered.length === 0) return;\n await Promise.all(\n filtered.map(({ name: realmName }) =>\n adminClient.realms.del({ realm: realmName }),\n ),\n );\n addAlert(t(\"deletedSuccessRealmSetting\"));\n if (selected.some(({ name }) => name === realm)) {\n void navigate(toRealm({ realm: environment.masterRealm }));\n }\n refresh();\n setSelected([]);\n } catch (error) {\n addError(\"deleteError\", error);\n }\n },\n });\n\n return (\n <>\n <DeleteConfirm />\n {openNewRealm && (\n <NewRealmForm\n onClose={() => {\n setOpenNewRealm(false);\n refresh();\n }}\n />\n )}\n <ViewHeader titleKey=\"manageRealms\" divider={false} />\n <PageSection variant=\"light\" className=\"pf-v5-u-p-0\">\n <KeycloakDataTable\n key={key}\n loader={loader}\n isPaginated\n onSelect={setSelected}\n canSelectAll\n ariaLabelKey=\"selectRealm\"\n searchPlaceholderKey=\"search\"\n actions={[\n {\n title: t(\"delete\"),\n onRowClick: (selected) => {\n setSelected([selected]);\n toggleDeleteDialog();\n },\n },\n ]}\n toolbarItem={\n <>\n <ToolbarItem>\n {whoAmI.createRealm && (\n <Button\n onClick={() => setOpenNewRealm(true)}\n data-testid=\"add-realm\"\n >\n {t(\"createRealm\")}\n </Button>\n )}\n </ToolbarItem>\n <ToolbarItem>\n <RecentRealmsDropdown />\n </ToolbarItem>\n <ToolbarItem>\n <KebabDropdown\n onClick={toggleDeleteDialog}\n isDisabled={selected.length === 0}\n />\n </ToolbarItem>\n </>\n }\n columns={[\n {\n name: \"name\",\n transforms: [cellWidth(20)],\n cellRenderer: ({ name }) =>\n name !== realm ? (\n <Link to={toDashboard({ realm: name })}>{name}</Link>\n ) : (\n <Popover\n bodyContent={t(\"currentRealmExplain\")}\n triggerAction=\"hover\"\n >\n <>\n {name} <Badge isRead>{t(\"currentRealm\")}</Badge>\n </>\n </Popover>\n ),\n },\n {\n name: \"displayName\",\n transforms: [cellWidth(80)],\n cellRenderer: ({ displayName }) =>\n resolveDisplayName(t, displayName, \"—\"),\n },\n ]}\n />\n </PageSection>\n </>\n );\n}\n"],"names":["RecentRealmsDropdown","t","useTranslation","open","setOpen","useState","recentRealms","useRecentRealms","jsx","Dropdown","isOpen","ref","MenuToggle","DropdownList","name","DropdownItem","props","Link","toDashboard","KebabDropdown","onClick","isDisabled","EllipsisVIcon","RealmSection","navigate","useNavigate","whoAmI","useWhoAmI","realm","useRealm","environment","useEnvironment","adminClient","useAdminClient","addAlert","addError","useAlerts","selected","setSelected","openNewRealm","setOpenNewRealm","key","setKey","refresh","loader","first","max","search","fetchAdminUI","r","error","NetworkError","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","AlertVariant","filtered","realmName","toRealm","jsxs","Fragment","NewRealmForm","ViewHeader","PageSection","KeycloakDataTable","ToolbarItem","Button","cellWidth","Popover","Badge","displayName","resolveDisplayName"],"mappings":"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"}
@@ -1,16 +1,16 @@
1
1
  import { jsxs as c, Fragment as y, jsx as a } from "react/jsx-runtime";
2
- import { u as x, q as B, b as L, aq as E, ar as z, v as M, aa as j, e as w, as as A, aC as G, au as K, V as O, S as U, P as X, F as W, c as J, X as l, aw as D, aD as Q, a7 as R, aE as Y, aF as Z, A as $, B as P, l as ee, a2 as ae, a3 as re, aG as se } from "./index-C-D-m0EP.js";
2
+ import { u as L, K as _, b as q, ar as E, as as K, n as z, aa as M, e as w, at as A, aC as U, au as j, V as G, U as O, P as W, F as J, c as Q, q as l, aw as D, aD as X, a7 as R, aE as Y, aF as Z, A as $, B as N, l as ee, a2 as ae, a3 as re, aG as se } from "./index-DsIT2BLV.js";
3
3
  import { useState as d } from "react";
4
4
  import { useTranslation as te } from "react-i18next";
5
5
  import { useNavigate as oe, Link as ne } from "react-router-dom";
6
- import { S as ie } from "./ScopePicker-DbxK9g9R.js";
6
+ import { S as ie } from "./ScopePicker-USX1qW3k.js";
7
7
  function be() {
8
- const { adminClient: o } = x(), { t: e } = te(), [m, C] = d(), [F, p] = d(), [b, N] = d(), { addAlert: h, addError: f } = B(), v = L({
8
+ const { adminClient: o } = L(), { t: e } = te(), [m, P] = d(), [C, p] = d(), [b, F] = d(), { addAlert: h, addError: f } = _(), v = q({
9
9
  mode: "onChange"
10
- }), { setValue: S, handleSubmit: H } = v, { id: t, resourceId: s, realm: u } = E(), I = oe(), V = (r = {}) => {
11
- ae(r, S);
12
- }, { hasAccess: T } = z(), g = !T("manage-authorization");
13
- M(
10
+ }), { setValue: H, handleSubmit: S } = v, { id: t, resourceId: s, realm: u } = E(), I = oe(), V = (r = {}) => {
11
+ ae(r, H);
12
+ }, { hasAccess: T } = K(), g = !T("manage-authorization");
13
+ z(
14
14
  () => Promise.all([
15
15
  o.clients.findOne({ id: t }),
16
16
  s ? o.clients.getResource({ id: t, resourceId: s }) : Promise.resolve(void 0),
@@ -19,11 +19,11 @@ function be() {
19
19
  ([r, n, i]) => {
20
20
  if (!r)
21
21
  throw new Error(e("notFound"));
22
- C(r), N(i), p(n), V(n);
22
+ P(r), F(i), p(n), V(n);
23
23
  },
24
24
  []
25
25
  );
26
- const q = async (r) => {
26
+ const k = async (r) => {
27
27
  const n = re(r);
28
28
  try {
29
29
  if (s)
@@ -44,12 +44,12 @@ function be() {
44
44
  } catch (i) {
45
45
  f("resourceSaveError", i);
46
46
  }
47
- }, [_, k] = j({
47
+ }, [x, B] = M({
48
48
  titleKey: "deleteResource",
49
49
  children: /* @__PURE__ */ c(y, { children: [
50
50
  e("deleteResourceConfirm"),
51
51
  b?.length !== 0 && /* @__PURE__ */ a(
52
- G,
52
+ U,
53
53
  {
54
54
  variant: "warning",
55
55
  isInline: !0,
@@ -75,18 +75,18 @@ function be() {
75
75
  }
76
76
  });
77
77
  return m ? /* @__PURE__ */ c(y, { children: [
78
- /* @__PURE__ */ a(k, {}),
78
+ /* @__PURE__ */ a(B, {}),
79
79
  /* @__PURE__ */ a(
80
- O,
80
+ G,
81
81
  {
82
- titleKey: s ? F?.name : "createResource",
82
+ titleKey: s ? C?.name : "createResource",
83
83
  dropdownItems: s ? [
84
84
  /* @__PURE__ */ a(
85
- U,
85
+ O,
86
86
  {
87
87
  "data-testid": "delete-resource",
88
88
  isDisabled: g,
89
- onClick: () => _(),
89
+ onClick: () => x(),
90
90
  children: e("delete")
91
91
  },
92
92
  "delete"
@@ -94,13 +94,13 @@ function be() {
94
94
  ] : void 0
95
95
  }
96
96
  ),
97
- /* @__PURE__ */ a(X, { variant: "light", children: /* @__PURE__ */ a(W, { ...v, children: /* @__PURE__ */ c(
98
- J,
97
+ /* @__PURE__ */ a(W, { variant: "light", children: /* @__PURE__ */ a(J, { ...v, children: /* @__PURE__ */ c(
98
+ Q,
99
99
  {
100
100
  isHorizontal: !0,
101
101
  role: "manage-authorization",
102
102
  className: "keycloak__resource-details__form",
103
- onSubmit: H(q),
103
+ onSubmit: S(k),
104
104
  children: [
105
105
  /* @__PURE__ */ a(
106
106
  l,
@@ -145,7 +145,7 @@ function be() {
145
145
  fieldId: "uris",
146
146
  labelIcon: /* @__PURE__ */ a(R, { helpText: e("urisHelp"), fieldLabelId: "uris" }),
147
147
  children: /* @__PURE__ */ a(
148
- Q,
148
+ X,
149
149
  {
150
150
  name: "uris",
151
151
  type: "url",
@@ -191,7 +191,7 @@ function be() {
191
191
  ),
192
192
  /* @__PURE__ */ a($, { children: /* @__PURE__ */ c("div", { className: "pf-v5-u-mt-md", children: [
193
193
  /* @__PURE__ */ a(
194
- P,
194
+ N,
195
195
  {
196
196
  variant: ee.primary,
197
197
  type: "submit",
@@ -200,7 +200,7 @@ function be() {
200
200
  }
201
201
  ),
202
202
  /* @__PURE__ */ a(
203
- P,
203
+ N,
204
204
  {
205
205
  variant: "link",
206
206
  "data-testid": "cancel",
@@ -222,9 +222,9 @@ function be() {
222
222
  ]
223
223
  }
224
224
  ) }) })
225
- ] }) : /* @__PURE__ */ a(K, {});
225
+ ] }) : /* @__PURE__ */ a(j, {});
226
226
  }
227
227
  export {
228
228
  be as default
229
229
  };
230
- //# sourceMappingURL=ResourceDetails-C3cyeLL5.js.map
230
+ //# sourceMappingURL=ResourceDetails-Cyb5CmVt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceDetails-C3cyeLL5.js","sources":["../src/clients/authorization/ResourceDetails.tsx"],"sourcesContent":["import type ClientRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientRepresentation\";\nimport type PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport type ResourceRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceRepresentation\";\nimport {\n HelpItem,\n TextControl,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n Alert,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n FormGroup,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { DefaultSwitchControl } from \"../../components/SwitchControl\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { KeyValueInput } from \"../../components/key-value-form/KeyValueInput\";\nimport type { KeyValueType } from \"../../components/key-value-form/key-value-convert\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { MultiLineInput } from \"../../components/multi-line-input/MultiLineInput\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useAccess } from \"../../context/access/Access\";\nimport { convertFormValuesToObject, convertToFormValues } from \"../../util\";\nimport { useParams } from \"../../utils/useParams\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport { ResourceDetailsParams, toResourceDetails } from \"../routes/Resource\";\nimport { ScopePicker } from \"./ScopePicker\";\nimport \"./resource-details.css\";\n\ntype SubmittedResource = Omit<\n ResourceRepresentation,\n \"attributes\" | \"scopes\"\n> & {\n attributes: KeyValueType[];\n};\n\nexport default function ResourceDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const [client, setClient] = useState<ClientRepresentation>();\n const [resource, setResource] = useState<ResourceRepresentation>();\n\n const [permissions, setPermission] = useState<PolicyRepresentation[]>();\n\n const { addAlert, addError } = useAlerts();\n const form = useForm<SubmittedResource>({\n mode: \"onChange\",\n });\n const { setValue, handleSubmit } = form;\n\n const { id, resourceId, realm } = useParams<ResourceDetailsParams>();\n const navigate = useNavigate();\n\n const setupForm = (resource: ResourceRepresentation = {}) => {\n convertToFormValues(resource, setValue);\n };\n\n const { hasAccess } = useAccess();\n\n const isDisabled = !hasAccess(\"manage-authorization\");\n\n useFetch(\n () =>\n Promise.all([\n adminClient.clients.findOne({ id }),\n resourceId\n ? adminClient.clients.getResource({ id, resourceId })\n : Promise.resolve(undefined),\n resourceId\n ? adminClient.clients.listPermissionsByResource({ id, resourceId })\n : Promise.resolve(undefined),\n ]),\n ([client, resource, permissions]) => {\n if (!client) {\n throw new Error(t(\"notFound\"));\n }\n setClient(client);\n setPermission(permissions);\n setResource(resource);\n setupForm(resource);\n },\n [],\n );\n\n const submit = async (submitted: SubmittedResource) => {\n const resource = convertFormValuesToObject<\n SubmittedResource,\n ResourceRepresentation\n >(submitted);\n\n try {\n if (resourceId) {\n await adminClient.clients.updateResource({ id, resourceId }, resource);\n } else {\n const result = await adminClient.clients.createResource(\n { id },\n resource,\n );\n setResource(resource);\n void navigate(\n toResourceDetails({ realm, id, resourceId: result._id! }),\n );\n }\n addAlert(\n t((resourceId ? \"update\" : \"create\") + \"ResourceSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"resourceSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deleteResource\",\n children: (\n <>\n {t(\"deleteResourceConfirm\")}\n {permissions?.length !== 0 && (\n <Alert\n variant=\"warning\"\n isInline\n isPlain\n title={t(\"deleteResourceWarning\")}\n className=\"pf-v5-u-pt-lg\"\n >\n <p className=\"pf-v5-u-pt-xs\">\n {permissions?.map((permission) => (\n <strong key={permission.id} className=\"pf-v5-u-pr-md\">\n {permission.name}\n </strong>\n ))}\n </p>\n </Alert>\n )}\n </>\n ),\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delResource({\n id,\n resourceId: resourceId!,\n });\n addAlert(t(\"resourceDeletedSuccess\"), AlertVariant.success);\n void navigate(\n toAuthorizationTab({ realm, clientId: id, tab: \"resources\" }),\n );\n } catch (error) {\n addError(\"resourceDeletedError\", error);\n }\n },\n });\n\n if (!client) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={resourceId ? resource?.name! : \"createResource\"}\n dropdownItems={\n resourceId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n isDisabled={isDisabled}\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n className=\"keycloak__resource-details__form\"\n onSubmit={handleSubmit(submit)}\n >\n <TextControl\n name={resourceId ? \"owner.name\" : \"\"}\n label={t(\"owner\")}\n labelIcon={t(\"ownerHelp\")}\n defaultValue={client.clientId}\n readOnly\n />\n <TextControl\n name={\"name\"}\n label={t(\"name\")}\n labelIcon={t(\"resourceNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"displayNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"type\"\n label={t(\"type\")}\n labelIcon={t(\"resourceDetailsTypeHelp\")}\n />\n <FormGroup\n label={t(\"uris\")}\n fieldId=\"uris\"\n labelIcon={\n <HelpItem helpText={t(\"urisHelp\")} fieldLabelId=\"uris\" />\n }\n >\n <MultiLineInput\n name=\"uris\"\n type=\"url\"\n aria-label={t(\"uris\")}\n addButtonLabel=\"addUri\"\n />\n </FormGroup>\n <ScopePicker clientId={id} />\n <TextControl\n name=\"icon_uri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n type=\"url\"\n />\n <DefaultSwitchControl\n name=\"ownerManagedAccess\"\n label={t(\"ownerManagedAccess\")}\n labelIcon={t(\"ownerManagedAccessHelp\")}\n />\n <FormGroup\n hasNoPaddingTop\n label={t(\"resourceAttribute\")}\n labelIcon={\n <HelpItem\n helpText={t(\"resourceAttributeHelp\")}\n fieldLabelId=\"resourceAttribute\"\n />\n }\n fieldId=\"resourceAttribute\"\n >\n <KeyValueInput name=\"attributes\" isDisabled={isDisabled} />\n </FormGroup>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"resources\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ResourceDetails","adminClient","useAdminClient","t","useTranslation","client","setClient","useState","resource","setResource","permissions","setPermission","addAlert","addError","useAlerts","form","useForm","setValue","handleSubmit","id","resourceId","realm","useParams","navigate","useNavigate","setupForm","convertToFormValues","hasAccess","useAccess","isDisabled","useFetch","submit","submitted","convertFormValuesToObject","result","toResourceDetails","AlertVariant","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","jsxs","Fragment","jsx","Alert","permission","toAuthorizationTab","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","FormGroup","HelpItem","MultiLineInput","ScopePicker","DefaultSwitchControl","KeyValueInput","ActionGroup","Button","ButtonVariant","props","Link","KeycloakSpinner"],"mappings":"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"}
1
+ {"version":3,"file":"ResourceDetails-Cyb5CmVt.js","sources":["../src/clients/authorization/ResourceDetails.tsx"],"sourcesContent":["import type ClientRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientRepresentation\";\nimport type PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport type ResourceRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceRepresentation\";\nimport {\n HelpItem,\n TextControl,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n Alert,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n FormGroup,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { DefaultSwitchControl } from \"../../components/SwitchControl\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { KeyValueInput } from \"../../components/key-value-form/KeyValueInput\";\nimport type { KeyValueType } from \"../../components/key-value-form/key-value-convert\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { MultiLineInput } from \"../../components/multi-line-input/MultiLineInput\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useAccess } from \"../../context/access/Access\";\nimport { convertFormValuesToObject, convertToFormValues } from \"../../util\";\nimport { useParams } from \"../../utils/useParams\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport { ResourceDetailsParams, toResourceDetails } from \"../routes/Resource\";\nimport { ScopePicker } from \"./ScopePicker\";\nimport \"./resource-details.css\";\n\ntype SubmittedResource = Omit<\n ResourceRepresentation,\n \"attributes\" | \"scopes\"\n> & {\n attributes: KeyValueType[];\n};\n\nexport default function ResourceDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const [client, setClient] = useState<ClientRepresentation>();\n const [resource, setResource] = useState<ResourceRepresentation>();\n\n const [permissions, setPermission] = useState<PolicyRepresentation[]>();\n\n const { addAlert, addError } = useAlerts();\n const form = useForm<SubmittedResource>({\n mode: \"onChange\",\n });\n const { setValue, handleSubmit } = form;\n\n const { id, resourceId, realm } = useParams<ResourceDetailsParams>();\n const navigate = useNavigate();\n\n const setupForm = (resource: ResourceRepresentation = {}) => {\n convertToFormValues(resource, setValue);\n };\n\n const { hasAccess } = useAccess();\n\n const isDisabled = !hasAccess(\"manage-authorization\");\n\n useFetch(\n () =>\n Promise.all([\n adminClient.clients.findOne({ id }),\n resourceId\n ? adminClient.clients.getResource({ id, resourceId })\n : Promise.resolve(undefined),\n resourceId\n ? adminClient.clients.listPermissionsByResource({ id, resourceId })\n : Promise.resolve(undefined),\n ]),\n ([client, resource, permissions]) => {\n if (!client) {\n throw new Error(t(\"notFound\"));\n }\n setClient(client);\n setPermission(permissions);\n setResource(resource);\n setupForm(resource);\n },\n [],\n );\n\n const submit = async (submitted: SubmittedResource) => {\n const resource = convertFormValuesToObject<\n SubmittedResource,\n ResourceRepresentation\n >(submitted);\n\n try {\n if (resourceId) {\n await adminClient.clients.updateResource({ id, resourceId }, resource);\n } else {\n const result = await adminClient.clients.createResource(\n { id },\n resource,\n );\n setResource(resource);\n void navigate(\n toResourceDetails({ realm, id, resourceId: result._id! }),\n );\n }\n addAlert(\n t((resourceId ? \"update\" : \"create\") + \"ResourceSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"resourceSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deleteResource\",\n children: (\n <>\n {t(\"deleteResourceConfirm\")}\n {permissions?.length !== 0 && (\n <Alert\n variant=\"warning\"\n isInline\n isPlain\n title={t(\"deleteResourceWarning\")}\n className=\"pf-v5-u-pt-lg\"\n >\n <p className=\"pf-v5-u-pt-xs\">\n {permissions?.map((permission) => (\n <strong key={permission.id} className=\"pf-v5-u-pr-md\">\n {permission.name}\n </strong>\n ))}\n </p>\n </Alert>\n )}\n </>\n ),\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delResource({\n id,\n resourceId: resourceId!,\n });\n addAlert(t(\"resourceDeletedSuccess\"), AlertVariant.success);\n void navigate(\n toAuthorizationTab({ realm, clientId: id, tab: \"resources\" }),\n );\n } catch (error) {\n addError(\"resourceDeletedError\", error);\n }\n },\n });\n\n if (!client) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={resourceId ? resource?.name! : \"createResource\"}\n dropdownItems={\n resourceId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n isDisabled={isDisabled}\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n className=\"keycloak__resource-details__form\"\n onSubmit={handleSubmit(submit)}\n >\n <TextControl\n name={resourceId ? \"owner.name\" : \"\"}\n label={t(\"owner\")}\n labelIcon={t(\"ownerHelp\")}\n defaultValue={client.clientId}\n readOnly\n />\n <TextControl\n name={\"name\"}\n label={t(\"name\")}\n labelIcon={t(\"resourceNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"displayNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"type\"\n label={t(\"type\")}\n labelIcon={t(\"resourceDetailsTypeHelp\")}\n />\n <FormGroup\n label={t(\"uris\")}\n fieldId=\"uris\"\n labelIcon={\n <HelpItem helpText={t(\"urisHelp\")} fieldLabelId=\"uris\" />\n }\n >\n <MultiLineInput\n name=\"uris\"\n type=\"url\"\n aria-label={t(\"uris\")}\n addButtonLabel=\"addUri\"\n />\n </FormGroup>\n <ScopePicker clientId={id} />\n <TextControl\n name=\"icon_uri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n type=\"url\"\n />\n <DefaultSwitchControl\n name=\"ownerManagedAccess\"\n label={t(\"ownerManagedAccess\")}\n labelIcon={t(\"ownerManagedAccessHelp\")}\n />\n <FormGroup\n hasNoPaddingTop\n label={t(\"resourceAttribute\")}\n labelIcon={\n <HelpItem\n helpText={t(\"resourceAttributeHelp\")}\n fieldLabelId=\"resourceAttribute\"\n />\n }\n fieldId=\"resourceAttribute\"\n >\n <KeyValueInput name=\"attributes\" isDisabled={isDisabled} />\n </FormGroup>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"resources\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ResourceDetails","adminClient","useAdminClient","t","useTranslation","client","setClient","useState","resource","setResource","permissions","setPermission","addAlert","addError","useAlerts","form","useForm","setValue","handleSubmit","id","resourceId","realm","useParams","navigate","useNavigate","setupForm","convertToFormValues","hasAccess","useAccess","isDisabled","useFetch","submit","submitted","convertFormValuesToObject","result","toResourceDetails","AlertVariant","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","jsxs","Fragment","jsx","Alert","permission","toAuthorizationTab","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","FormGroup","HelpItem","MultiLineInput","ScopePicker","DefaultSwitchControl","KeyValueInput","ActionGroup","Button","ButtonVariant","props","Link","KeycloakSpinner"],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  import { jsxs as c, Fragment as D, jsx as a } from "react/jsx-runtime";
2
- import { u as N, aq as z, q as w, W as H, b as k, v as q, aH as C, as as l, V as F, S as U, P, F as V, c as x, X as d, A as B, B as m, l as T, e as j } from "./index-C-D-m0EP.js";
3
- import { useState as E } from "react";
4
- import { useTranslation as X } from "react-i18next";
5
- import { useNavigate as G, Link as K } from "react-router-dom";
6
- function Q() {
7
- const { adminClient: r } = N(), { t: e } = X(), { id: i, scopeId: o, realm: s } = z(), p = G(), { addAlert: S, addError: b } = w(), [f, u] = H(), [n, h] = E(), v = k({
2
+ import { u as N, ar as z, K as k, X as w, b as H, n as U, aH as C, at as l, V as F, U as P, P as V, F as q, c as x, q as d, A as B, B as m, l as K, e as T } from "./index-DsIT2BLV.js";
3
+ import { useState as j } from "react";
4
+ import { useTranslation as E } from "react-i18next";
5
+ import { useNavigate as G, Link as L } from "react-router-dom";
6
+ function R() {
7
+ const { adminClient: r } = N(), { t: e } = E(), { id: i, scopeId: o, realm: s } = z(), p = G(), { addAlert: S, addError: b } = k(), [f, u] = w(), [n, h] = j(), g = H({
8
8
  mode: "onChange"
9
- }), { reset: g, handleSubmit: y } = v;
10
- q(
9
+ }), { reset: v, handleSubmit: y } = g;
10
+ U(
11
11
  async () => {
12
12
  if (o)
13
13
  return await r.clients.getAuthorizationScope({
@@ -16,7 +16,7 @@ function Q() {
16
16
  });
17
17
  },
18
18
  (t) => {
19
- h(t), g({ ...t });
19
+ h(t), v({ ...t });
20
20
  },
21
21
  []
22
22
  );
@@ -36,7 +36,7 @@ function Q() {
36
36
  l({ realm: s, clientId: i, tab: "scopes" })
37
37
  )), S(
38
38
  e((o ? "update" : "create") + "ScopeSuccess"),
39
- j.success
39
+ T.success
40
40
  );
41
41
  } catch (I) {
42
42
  b("scopeSaveError", I);
@@ -63,7 +63,7 @@ function Q() {
63
63
  titleKey: o ? n?.name : e("createAuthorizationScope"),
64
64
  dropdownItems: o ? [
65
65
  /* @__PURE__ */ a(
66
- U,
66
+ P,
67
67
  {
68
68
  "data-testid": "delete-resource",
69
69
  onClick: () => u(),
@@ -74,7 +74,7 @@ function Q() {
74
74
  ] : void 0
75
75
  }
76
76
  ),
77
- /* @__PURE__ */ a(P, { variant: "light", children: /* @__PURE__ */ a(V, { ...v, children: /* @__PURE__ */ c(
77
+ /* @__PURE__ */ a(V, { variant: "light", children: /* @__PURE__ */ a(q, { ...g, children: /* @__PURE__ */ c(
78
78
  x,
79
79
  {
80
80
  isHorizontal: !0,
@@ -110,7 +110,7 @@ function Q() {
110
110
  /* @__PURE__ */ a(
111
111
  m,
112
112
  {
113
- variant: T.primary,
113
+ variant: K.primary,
114
114
  type: "submit",
115
115
  "data-testid": "save",
116
116
  children: e("save")
@@ -121,7 +121,7 @@ function Q() {
121
121
  {
122
122
  variant: "link",
123
123
  "data-testid": "revert",
124
- onClick: () => g({ ...n }),
124
+ onClick: () => v({ ...n }),
125
125
  children: e("revert")
126
126
  }
127
127
  ) : /* @__PURE__ */ a(
@@ -130,7 +130,7 @@ function Q() {
130
130
  variant: "link",
131
131
  "data-testid": "cancel",
132
132
  component: (t) => /* @__PURE__ */ a(
133
- K,
133
+ L,
134
134
  {
135
135
  ...t,
136
136
  to: l({
@@ -150,6 +150,6 @@ function Q() {
150
150
  ] });
151
151
  }
152
152
  export {
153
- Q as default
153
+ R as default
154
154
  };
155
- //# sourceMappingURL=ScopeDetails-C16qMBw-.js.map
155
+ //# sourceMappingURL=ScopeDetails-BV7h3hMw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScopeDetails-C16qMBw-.js","sources":["../src/clients/authorization/ScopeDetails.tsx"],"sourcesContent":["import type ScopeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/scopeRepresentation\";\nimport { TextControl, useAlerts, useFetch } from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useParams } from \"../../utils/useParams\";\nimport useToggle from \"../../utils/useToggle\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport type { ScopeDetailsParams } from \"../routes/Scope\";\nimport { DeleteScopeDialog } from \"./DeleteScopeDialog\";\n\ntype FormFields = Omit<ScopeRepresentation, \"resources\">;\n\nexport default function ScopeDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const { id, scopeId, realm } = useParams<ScopeDetailsParams>();\n const navigate = useNavigate();\n const { addAlert, addError } = useAlerts();\n const [deleteDialog, toggleDeleteDialog] = useToggle();\n const [scope, setScope] = useState<ScopeRepresentation>();\n const form = useForm<FormFields>({\n mode: \"onChange\",\n });\n const { reset, handleSubmit } = form;\n\n useFetch(\n async () => {\n if (scopeId) {\n const scope = await adminClient.clients.getAuthorizationScope({\n id,\n scopeId,\n });\n return scope;\n }\n },\n (scope) => {\n setScope(scope);\n reset({ ...scope });\n },\n [],\n );\n\n const onSubmit = async (scope: ScopeRepresentation) => {\n try {\n if (scopeId) {\n await adminClient.clients.updateAuthorizationScope(\n { id, scopeId },\n scope,\n );\n setScope(scope);\n } else {\n await adminClient.clients.createAuthorizationScope(\n { id },\n {\n name: scope.name!,\n displayName: scope.displayName,\n iconUri: scope.iconUri,\n },\n );\n void navigate(\n toAuthorizationTab({ realm, clientId: id, tab: \"scopes\" }),\n );\n }\n addAlert(\n t((scopeId ? \"update\" : \"create\") + \"ScopeSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"scopeSaveError\", error);\n }\n };\n\n return (\n <>\n <DeleteScopeDialog\n clientId={id}\n open={deleteDialog}\n toggleDialog={toggleDeleteDialog}\n selectedScope={scope}\n refresh={() =>\n void navigate(\n toAuthorizationTab({ realm, clientId: id, tab: \"scopes\" }),\n )\n }\n />\n <ViewHeader\n titleKey={scopeId ? scope?.name! : t(\"createAuthorizationScope\")}\n dropdownItems={\n scopeId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <TextControl\n name=\"name\"\n label={t(\"name\")}\n labelIcon={t(\"scopeNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"scopeDisplayNameHelp\")}\n />\n <TextControl\n name=\"iconUri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n />\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n {!scope ? (\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"scopes\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n ) : (\n <Button\n variant=\"link\"\n data-testid=\"revert\"\n onClick={() => reset({ ...scope })}\n >\n {t(\"revert\")}\n </Button>\n )}\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ScopeDetails","adminClient","useAdminClient","t","useTranslation","id","scopeId","realm","useParams","navigate","useNavigate","addAlert","addError","useAlerts","deleteDialog","toggleDeleteDialog","useToggle","scope","setScope","useState","form","useForm","reset","handleSubmit","useFetch","onSubmit","toAuthorizationTab","AlertVariant","error","jsxs","Fragment","jsx","DeleteScopeDialog","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","ActionGroup","Button","ButtonVariant","props","Link"],"mappings":"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"}
1
+ {"version":3,"file":"ScopeDetails-BV7h3hMw.js","sources":["../src/clients/authorization/ScopeDetails.tsx"],"sourcesContent":["import type ScopeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/scopeRepresentation\";\nimport { TextControl, useAlerts, useFetch } from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useParams } from \"../../utils/useParams\";\nimport useToggle from \"../../utils/useToggle\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport type { ScopeDetailsParams } from \"../routes/Scope\";\nimport { DeleteScopeDialog } from \"./DeleteScopeDialog\";\n\ntype FormFields = Omit<ScopeRepresentation, \"resources\">;\n\nexport default function ScopeDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const { id, scopeId, realm } = useParams<ScopeDetailsParams>();\n const navigate = useNavigate();\n const { addAlert, addError } = useAlerts();\n const [deleteDialog, toggleDeleteDialog] = useToggle();\n const [scope, setScope] = useState<ScopeRepresentation>();\n const form = useForm<FormFields>({\n mode: \"onChange\",\n });\n const { reset, handleSubmit } = form;\n\n useFetch(\n async () => {\n if (scopeId) {\n const scope = await adminClient.clients.getAuthorizationScope({\n id,\n scopeId,\n });\n return scope;\n }\n },\n (scope) => {\n setScope(scope);\n reset({ ...scope });\n },\n [],\n );\n\n const onSubmit = async (scope: ScopeRepresentation) => {\n try {\n if (scopeId) {\n await adminClient.clients.updateAuthorizationScope(\n { id, scopeId },\n scope,\n );\n setScope(scope);\n } else {\n await adminClient.clients.createAuthorizationScope(\n { id },\n {\n name: scope.name!,\n displayName: scope.displayName,\n iconUri: scope.iconUri,\n },\n );\n void navigate(\n toAuthorizationTab({ realm, clientId: id, tab: \"scopes\" }),\n );\n }\n addAlert(\n t((scopeId ? \"update\" : \"create\") + \"ScopeSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"scopeSaveError\", error);\n }\n };\n\n return (\n <>\n <DeleteScopeDialog\n clientId={id}\n open={deleteDialog}\n toggleDialog={toggleDeleteDialog}\n selectedScope={scope}\n refresh={() =>\n void navigate(\n toAuthorizationTab({ realm, clientId: id, tab: \"scopes\" }),\n )\n }\n />\n <ViewHeader\n titleKey={scopeId ? scope?.name! : t(\"createAuthorizationScope\")}\n dropdownItems={\n scopeId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <TextControl\n name=\"name\"\n label={t(\"name\")}\n labelIcon={t(\"scopeNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"scopeDisplayNameHelp\")}\n />\n <TextControl\n name=\"iconUri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n />\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n {!scope ? (\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"scopes\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n ) : (\n <Button\n variant=\"link\"\n data-testid=\"revert\"\n onClick={() => reset({ ...scope })}\n >\n {t(\"revert\")}\n </Button>\n )}\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ScopeDetails","adminClient","useAdminClient","t","useTranslation","id","scopeId","realm","useParams","navigate","useNavigate","addAlert","addError","useAlerts","deleteDialog","toggleDeleteDialog","useToggle","scope","setScope","useState","form","useForm","reset","handleSubmit","useFetch","onSubmit","toAuthorizationTab","AlertVariant","error","jsxs","Fragment","jsx","DeleteScopeDialog","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","ActionGroup","Button","ButtonVariant","props","Link"],"mappings":"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"}