@keycloak/keycloak-admin-ui 26.5.7 → 26.6.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 (84) hide show
  1. package/lib/.vite/manifest.json +40 -40
  2. package/lib/{AddJWTAuthorizationGrant-B9fNafs-.js → AddJWTAuthorizationGrant-CeMENUIM.js} +19 -19
  3. package/lib/{AddJWTAuthorizationGrant-B9fNafs-.js.map → AddJWTAuthorizationGrant-CeMENUIM.js.map} +1 -1
  4. package/lib/{AddKubernetesConnect-_-fIYkCu.js → AddKubernetesConnect-0RUT9aV2.js} +13 -13
  5. package/lib/{AddKubernetesConnect-_-fIYkCu.js.map → AddKubernetesConnect-0RUT9aV2.js.map} +1 -1
  6. package/lib/{AddOAuth2-GWdhXpZu.js → AddOAuth2-Cw67bzVu.js} +12 -12
  7. package/lib/{AddOAuth2-GWdhXpZu.js.map → AddOAuth2-Cw67bzVu.js.map} +1 -1
  8. package/lib/{AddSpiffeConnect-CEycf6Um.js → AddSpiffeConnect-Cd9x7mR2.js} +9 -9
  9. package/lib/{AddSpiffeConnect-CEycf6Um.js.map → AddSpiffeConnect-Cd9x7mR2.js.map} +1 -1
  10. package/lib/{CreateFlow-C1gSi1GV.js → CreateFlow-9cA71I0U.js} +10 -10
  11. package/lib/{CreateFlow-C1gSi1GV.js.map → CreateFlow-9cA71I0U.js.map} +1 -1
  12. package/lib/DetailOrganization-C14l_h62.js +204 -0
  13. package/lib/DetailOrganization-C14l_h62.js.map +1 -0
  14. package/lib/{ExecutorForm-D3r69dqU.js → ExecutorForm-BwTQyA36.js} +17 -17
  15. package/lib/{ExecutorForm-D3r69dqU.js.map → ExecutorForm-BwTQyA36.js.map} +1 -1
  16. package/lib/{FlowDetails-DNNCBfY5.js → FlowDetails-BpGnLs_D.js} +1998 -2039
  17. package/lib/FlowDetails-BpGnLs_D.js.map +1 -0
  18. package/lib/NewOrganization-SUmXcFih.js +36 -0
  19. package/lib/{NewOrganization-KSp9gXMo.js.map → NewOrganization-SUmXcFih.js.map} +1 -1
  20. package/lib/{PermissionConfigurationDetails-LVkEXehk.js → PermissionConfigurationDetails-B7AeRfGJ.js} +118 -118
  21. package/lib/{PermissionConfigurationDetails-LVkEXehk.js.map → PermissionConfigurationDetails-B7AeRfGJ.js.map} +1 -1
  22. package/lib/{PermissionDetails-DlPJ8m6r.js → PermissionDetails-CY6ytovN.js} +79 -79
  23. package/lib/{PermissionDetails-DlPJ8m6r.js.map → PermissionDetails-CY6ytovN.js.map} +1 -1
  24. package/lib/{RealmSection-BKt0CL1J.js → RealmSection-CMquQhw3.js} +26 -26
  25. package/lib/{RealmSection-BKt0CL1J.js.map → RealmSection-CMquQhw3.js.map} +1 -1
  26. package/lib/{ResourceDetails-CV230nyS.js → ResourceDetails-BsRxSUu-.js} +36 -36
  27. package/lib/ResourceDetails-BsRxSUu-.js.map +1 -0
  28. package/lib/{ScopeDetails-BleAAOMS.js → ScopeDetails-puMEG5G1.js} +27 -27
  29. package/lib/{ScopeDetails-BleAAOMS.js.map → ScopeDetails-puMEG5G1.js.map} +1 -1
  30. package/lib/{ScopePicker-BpZ35vej.js → ScopePicker-Bc9l9PJg.js} +15 -15
  31. package/lib/{ScopePicker-BpZ35vej.js.map → ScopePicker-Bc9l9PJg.js.map} +1 -1
  32. package/lib/WorkflowDetailForm-B-cQjnC9.js +147 -0
  33. package/lib/WorkflowDetailForm-B-cQjnC9.js.map +1 -0
  34. package/lib/{WorkflowsSection-C6tPZTDa.js → WorkflowsSection-BB9dHYmO.js} +20 -20
  35. package/lib/{WorkflowsSection-C6tPZTDa.js.map → WorkflowsSection-BB9dHYmO.js.map} +1 -1
  36. package/lib/client-scopes/details/oid4vciAttributes.d.ts +4 -0
  37. package/lib/clients/keys/Certificate.d.ts +3 -1
  38. package/lib/components/dynamic/MapComponent.d.ts +1 -1
  39. package/lib/components/key-value-form/KeyValueInput.d.ts +4 -1
  40. package/lib/components/realm-loa-mapping/RealmLoAMapping.d.ts +13 -0
  41. package/lib/components/role-mapping/queries.d.ts +1 -2
  42. package/lib/components/role-mapping/resource.d.ts +33 -0
  43. package/lib/components/view-header/ViewHeader.d.ts +2 -1
  44. package/lib/context/auth/admin-ui-endpoint.d.ts +1 -0
  45. package/lib/context/group-resource/GroupResourceContext.d.ts +9 -0
  46. package/lib/groups/GroupsSection.d.ts +3 -1
  47. package/lib/groups/MembersModal.d.ts +5 -1
  48. package/lib/groups/MembershipsModal.d.ts +2 -1
  49. package/lib/groups/routes/Groups.d.ts +3 -0
  50. package/lib/help-urls.d.ts +1 -0
  51. package/lib/i18n/constants.d.ts +1 -0
  52. package/lib/i18n/i18n.d.ts +0 -1
  53. package/lib/{index-D3mEQ9NL.js → index-iLxEY-Jz.js} +44585 -35236
  54. package/lib/{index-D3mEQ9NL.js.map → index-iLxEY-Jz.js.map} +1 -1
  55. package/lib/index.d.ts +6 -4
  56. package/lib/keycloak-admin-ui.css +1 -1
  57. package/lib/keycloak-admin-ui.js +298 -294
  58. package/lib/organizations/routes/EditOrganization.d.ts +1 -1
  59. package/lib/realm-settings/routes/ThemesTab.d.ts +1 -1
  60. package/lib/realm-settings/themes/BackgroundContext.d.ts +9 -0
  61. package/lib/realm-settings/themes/ColorControl.d.ts +8 -0
  62. package/lib/realm-settings/themes/DefaultColorAccordion.d.ts +7 -0
  63. package/lib/realm-settings/themes/FileNameDialog.d.ts +1 -1
  64. package/lib/realm-settings/themes/LoginPreviewWindow.d.ts +5 -0
  65. package/lib/realm-settings/themes/LoginThemeProperties.d.ts +63 -0
  66. package/lib/realm-settings/themes/PatternflyVars.d.ts +29 -8
  67. package/lib/realm-settings/themes/QuickTheme.d.ts +17 -0
  68. package/lib/realm-settings/themes/ThemeColors.d.ts +3 -3
  69. package/lib/realm-settings/themes/ThemesTab.d.ts +0 -6
  70. package/lib/realm-settings/themes/UploadJar.d.ts +1 -1
  71. package/lib/realm-settings/themes/fileUtils.d.ts +1 -0
  72. package/lib/user/UserWorkflows.d.ts +5 -0
  73. package/lib/user/routes/User.d.ts +1 -1
  74. package/lib/user/utils/user-profile.d.ts +10 -0
  75. package/lib/utils/useIsFeatureEnabled.d.ts +4 -1
  76. package/package.json +10 -9
  77. package/lib/DetailOrganization-CV52xkX3.js +0 -194
  78. package/lib/DetailOrganization-CV52xkX3.js.map +0 -1
  79. package/lib/FlowDetails-DNNCBfY5.js.map +0 -1
  80. package/lib/NewOrganization-KSp9gXMo.js +0 -36
  81. package/lib/ResourceDetails-CV230nyS.js.map +0 -1
  82. package/lib/WorkflowDetailForm-CH1O9UEB.js +0 -4938
  83. package/lib/WorkflowDetailForm-CH1O9UEB.js.map +0 -1
  84. package/lib/theme/login.css +0 -94
@@ -1,6 +1,6 @@
1
1
  import { Path } from 'react-router-dom';
2
2
  import { AppRouteObject } from '../../routes';
3
- export type ThemesTabType = "settings" | "lightColors" | "darkColors";
3
+ export type ThemesTabType = "settings" | "quickTheme";
4
4
  export type ThemesParams = {
5
5
  realm: string;
6
6
  tab: ThemesTabType;
@@ -0,0 +1,9 @@
1
+ import { PropsWithChildren } from 'react';
2
+ type BackgroundContextProps = {
3
+ background: string;
4
+ setBackground: (background: string) => void;
5
+ };
6
+ export declare const BackgroundPreviewContext: import('libs/ui-shared/dist/utils/createNamedContext').NamedContext<BackgroundContextProps | undefined>;
7
+ export declare const usePreviewBackground: () => BackgroundContextProps | undefined;
8
+ export declare const BackgroundContext: ({ children }: PropsWithChildren) => import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1,8 @@
1
+ import { TextInputProps } from '@patternfly/react-core';
2
+ export type ColorControlProps = TextInputProps & {
3
+ name: string;
4
+ label: string;
5
+ color: string;
6
+ onUserChange?: () => void;
7
+ };
8
+ export declare const ColorControl: ({ name, color, label, onUserChange, ...props }: ColorControlProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { ColorControlProps } from './ColorControl';
2
+ type DefaultColorAccordionProps = ColorControlProps & {
3
+ colorName?: string;
4
+ onOverride?: (colorName: string) => void;
5
+ };
6
+ export declare const DefaultColorAccordion: (props: DefaultColorAccordionProps) => import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -1,5 +1,5 @@
1
1
  type FileNameDialogProps = {
2
- onSave: (fileName: string) => void;
2
+ onSave: (themeName: string, fileName: string, themeDescription: string) => void;
3
3
  onClose: () => void;
4
4
  };
5
5
  export declare const FileNameDialog: ({ onSave, onClose }: FileNameDialogProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ type LoginPreviewWindowProps = {
2
+ cssVars: Record<string, string>;
3
+ };
4
+ export declare const LoginPreviewWindow: ({ cssVars }: LoginPreviewWindowProps) => import("react/jsx-runtime").JSX.Element;
5
+ export {};
@@ -0,0 +1,63 @@
1
+ export declare const loginThemeProperties: {
2
+ kcFormGroupClass: string;
3
+ kcFormGroupLabelClass: string;
4
+ kcFormLabelClass: string;
5
+ kcFormLabelTextClass: string;
6
+ kcLabelClass: string;
7
+ kcInputClass: string;
8
+ kcInputGroup: string;
9
+ kcFormHelperTextClass: string;
10
+ kcInputHelperTextClass: string;
11
+ kcInputHelperTextItemClass: string;
12
+ kcInputHelperTextItemTextClass: string;
13
+ kcInputGroupItemClass: string;
14
+ kcFill: string;
15
+ kcError: string;
16
+ kcCheckboxClass: string;
17
+ kcCheckboxInputClass: string;
18
+ kcCheckboxLabelClass: string;
19
+ kcCheckboxLabelRequiredClass: string;
20
+ kcInputRequiredClass: string;
21
+ kcInputErrorMessageClass: string;
22
+ kcFormControlUtilClass: string;
23
+ kcInputErrorIconStatusClass: string;
24
+ kcInputErrorIconClass: string;
25
+ kcAlertClass: string;
26
+ kcAlertIconClass: string;
27
+ kcAlertTitleClass: string;
28
+ kcAlertDescriptionClass: string;
29
+ kcFormPasswordVisibilityButtonClass: string;
30
+ kcFormPasswordVisibilityIconShow: string;
31
+ kcFormPasswordVisibilityIconHide: string;
32
+ kcFormControlToggleIcon: string;
33
+ kcFormActionGroupClass: string;
34
+ kcFormReadOnlyClass: string;
35
+ kcButtonClass: string;
36
+ kcButtonPrimaryClass: string;
37
+ kcButtonSecondaryClass: string;
38
+ kcButtonBlockClass: string;
39
+ kcButtonLinkClass: string;
40
+ kcLogin: string;
41
+ kcLoginContainer: string;
42
+ kcLoginMain: string;
43
+ kcLoginMainHeader: string;
44
+ kcLoginMainFooter: string;
45
+ kcLoginMainFooterBand: string;
46
+ kcLoginMainFooterBandItem: string;
47
+ kcLoginMainFooterHelperText: string;
48
+ kcLoginMainTitle: string;
49
+ kcLoginMainHeaderUtilities: string;
50
+ kcLoginMainBody: string;
51
+ kcLoginClass: string;
52
+ kcFormClass: string;
53
+ kcFormCardClass: string;
54
+ kcFeedbackErrorIcon: string;
55
+ kcFeedbackWarningIcon: string;
56
+ kcFeedbackSuccessIcon: string;
57
+ kcFeedbackInfoIcon: string;
58
+ kcDarkModeClass: string;
59
+ kcHtmlClass: string;
60
+ kcBodyClass: string;
61
+ kcContentWrapperClass: string;
62
+ };
63
+ export type LoginThemeProperties = typeof loginThemeProperties;
@@ -1,10 +1,31 @@
1
- export declare const lightTheme: () => {
1
+ type Value = {
2
+ light?: string;
3
+ dark?: string;
4
+ };
5
+ export type DefaultValueType = string | Value;
6
+ type DependencyVariable = {
2
7
  name: string;
3
- defaultValue: string | undefined;
4
- variable: string | undefined;
5
- }[];
6
- export declare const darkTheme: () => {
8
+ defaultValue: DefaultValueType;
9
+ variable: string | Value;
10
+ };
11
+ type FlattenedDependencyVariable = {
7
12
  name: string;
8
- defaultValue: string | undefined;
9
- variable: string | undefined;
10
- }[];
13
+ defaultValue: DefaultValueType;
14
+ variable: string;
15
+ };
16
+ type VariableDefinition = {
17
+ name: string;
18
+ defaultValue: string | Value;
19
+ variable: string | Value;
20
+ dependencies?: DependencyVariable[];
21
+ };
22
+ type ThemeType = keyof Value;
23
+ export type FlattenedVariable = Omit<VariableDefinition, "dependencies"> & {
24
+ parentName?: string;
25
+ dependencies?: FlattenedDependencyVariable[];
26
+ };
27
+ export declare const lightTheme: () => FlattenedVariable[];
28
+ export declare const darkTheme: () => FlattenedVariable[];
29
+ export declare function resolveColorToHex(colorValue: string): string;
30
+ export declare function resolveColorReferences(colorValue: DefaultValueType, parentValue: string, theme: ThemeType): string;
31
+ export {};
@@ -0,0 +1,17 @@
1
+ import { default as RealmRepresentation } from '@keycloak/keycloak-admin-client/lib/defs/realmRepresentation';
2
+ export type ThemeRealmRepresentation = RealmRepresentation & {
3
+ themeName?: string;
4
+ themeDescription?: string;
5
+ fileName?: string;
6
+ favicon?: File;
7
+ logo?: File;
8
+ bgimage?: File;
9
+ logoWidth?: string;
10
+ logoHeight?: string;
11
+ };
12
+ type QuickThemeProps = {
13
+ realm: RealmRepresentation;
14
+ theme?: "light" | "dark";
15
+ };
16
+ export declare const QuickTheme: ({ realm, theme }: QuickThemeProps) => import("react/jsx-runtime").JSX.Element;
17
+ export {};
@@ -1,9 +1,9 @@
1
1
  import { default as RealmRepresentation } from '@keycloak/keycloak-admin-client/lib/defs/realmRepresentation';
2
- import { ThemeRealmRepresentation } from './ThemesTab';
2
+ import { ThemeRealmRepresentation } from './QuickTheme';
3
3
  type ThemeColorsProps = {
4
4
  realm: RealmRepresentation;
5
5
  save: (realm: ThemeRealmRepresentation) => void;
6
- theme: "light" | "dark";
6
+ theme?: "light" | "dark";
7
7
  };
8
- export declare const ThemeColors: ({ realm, save, theme }: ThemeColorsProps) => import("react/jsx-runtime").JSX.Element;
8
+ export declare const ThemeColors: ({ realm, save, theme: initialTheme, }: ThemeColorsProps) => import("react/jsx-runtime").JSX.Element;
9
9
  export {};
@@ -3,11 +3,5 @@ type ThemesTabProps = {
3
3
  realm: RealmRepresentation;
4
4
  save: (realm: RealmRepresentation) => void;
5
5
  };
6
- export type ThemeRealmRepresentation = RealmRepresentation & {
7
- fileName?: string;
8
- favicon?: File;
9
- logo?: File;
10
- bgimage?: File;
11
- };
12
6
  export default function ThemesTab({ realm, save }: ThemesTabProps): import("react/jsx-runtime").JSX.Element;
13
7
  export {};
@@ -1,4 +1,4 @@
1
- import { ThemeRealmRepresentation } from './ThemesTab';
1
+ import { ThemeRealmRepresentation } from './QuickTheme';
2
2
  type UploadJarProps = {
3
3
  onUpload: (theme: ThemeRealmRepresentation) => void;
4
4
  };
@@ -0,0 +1 @@
1
+ export declare const fileToDataUri: (file: File) => Promise<string>;
@@ -0,0 +1,5 @@
1
+ type UserWorkflowProps = {
2
+ user?: string;
3
+ };
4
+ export declare const UserWorkflows: ({ user }: UserWorkflowProps) => import("react/jsx-runtime").JSX.Element;
5
+ export {};
@@ -1,6 +1,6 @@
1
1
  import { Path } from 'react-router-dom';
2
2
  import { AppRouteObject } from '../../routes';
3
- export type UserTab = "settings" | "groups" | "organizations" | "consents" | "attributes" | "sessions" | "credentials" | "role-mapping" | "identity-provider-links" | "events";
3
+ export type UserTab = "settings" | "groups" | "organizations" | "consents" | "attributes" | "sessions" | "credentials" | "role-mapping" | "identity-provider-links" | "events" | "workflows";
4
4
  export type UserParams = {
5
5
  realm: string;
6
6
  id: string;
@@ -1,2 +1,12 @@
1
1
  import { UserProfileAttributeMetadata } from '@keycloak/keycloak-admin-client/lib/defs/userProfileMetadata';
2
+ import { TFunction } from 'i18next';
2
3
  export declare function isRequiredAttribute({ required, validators, }: UserProfileAttributeMetadata): boolean;
4
+ /**
5
+ * Extracts error messages from a UserProfileError and formats them as a single string.
6
+ * Handles both single error and multiple errors in the responseData structure.
7
+ *
8
+ * @param error - The error object (should be a UserProfileError)
9
+ * @param t - Translation function
10
+ * @returns Formatted error message string with all errors joined by semicolons
11
+ */
12
+ export declare function extractUserProfileErrorMessages(error: unknown, t: TFunction): string;
@@ -16,6 +16,9 @@ export declare enum Feature {
16
16
  JWTAuthorizationGrant = "JWT_AUTHORIZATION_GRANT",
17
17
  Passkeys = "PASSKEYS",
18
18
  ClientAuthFederated = "CLIENT_AUTH_FEDERATED",
19
- Workflows = "WORKFLOWS"
19
+ Workflows = "WORKFLOWS",
20
+ StepUpAuthenticationSaml = "STEP_UP_AUTHENTICATION_SAML",
21
+ ScimApi = "SCIM_API",
22
+ IdentityBrokeringAPIV2 = "IDENTITY_BROKERING_API_V2"
20
23
  }
21
24
  export default function useIsFeatureEnabled(): (feature: Feature) => boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keycloak/keycloak-admin-ui",
3
- "version": "26.5.7",
3
+ "version": "26.6.0",
4
4
  "type": "module",
5
5
  "main": "lib/keycloak-admin-ui.js",
6
6
  "types": "./lib/keycloak-admin-ui.d.ts",
@@ -8,7 +8,8 @@
8
8
  ".": {
9
9
  "import": "./lib/keycloak-admin-ui.js",
10
10
  "types": "./lib/keycloak-admin-ui.d.ts"
11
- }
11
+ },
12
+ "./styles.css": "./lib/keycloak-admin-ui.css"
12
13
  },
13
14
  "files": [
14
15
  "lib"
@@ -87,21 +88,21 @@
87
88
  "file-saver": "^2.0.5",
88
89
  "flat": "^6.0.1",
89
90
  "i18next": "^25.7.3",
90
- "i18next-fetch-backend": "^6.0.0",
91
+ "i18next-fetch-backend": "^7.0.0",
91
92
  "jszip": "^3.10.1",
92
93
  "keycloak-js": "^26.2.2",
93
- "lodash-es": "^4.17.22",
94
+ "lodash-es": "^4.18.1",
94
95
  "p-debounce": "^5.1.0",
95
96
  "react": "^18.3.1",
96
97
  "react-dom": "^18.3.1",
97
98
  "react-hook-form": "^7.70.0",
98
99
  "react-i18next": "^16.5.1",
99
- "react-router-dom": "^6.30.2",
100
+ "react-router-dom": "^6.30.3",
100
101
  "reactflow": "^11.11.4",
101
102
  "use-react-router-breadcrumbs": "^4.0.1",
102
- "yaml": "^2.8.2",
103
- "@keycloak/keycloak-admin-client": "26.5.7",
104
- "@keycloak/keycloak-ui-shared": "26.5.7"
103
+ "yaml": "^2.8.3",
104
+ "@keycloak/keycloak-admin-client": "26.6.0",
105
+ "@keycloak/keycloak-ui-shared": "26.6.0"
105
106
  },
106
107
  "devDependencies": {
107
108
  "@axe-core/playwright": "^4.11.0",
@@ -124,7 +125,7 @@
124
125
  "vite": "^7.3.0",
125
126
  "vite-plugin-checker": "^0.12.0",
126
127
  "vite-plugin-dts": "^4.5.4",
127
- "vitest": "^3.2.4"
128
+ "vitest": "^4.0.16"
128
129
  },
129
130
  "author": {
130
131
  "name": "Red Hat, Inc.",
@@ -1,194 +0,0 @@
1
- import { jsxs as d, jsx as t } from "react/jsx-runtime";
2
- import { aG as y, aH as s, aI as x, aJ as n, aK as R, u as w, _ as B, a as I, ao as _, b as C, y as H, aL as M, aM as V, ap as j, P as h, F as k, aN as D, aO as G, c as N, aP as $, A as J, e as L, B as Q, aQ as U, aR as q, aS as g, aT as W, aU as X } from "./index-D3mEQ9NL.js";
3
- import { useTranslation as z } from "react-i18next";
4
- import { useState as E } from "react";
5
- const Y = () => {
6
- const { t: c } = z(), [m, b] = E("members");
7
- return /* @__PURE__ */ d(
8
- y,
9
- {
10
- activeKey: m,
11
- onSelect: (T, v) => b(v),
12
- children: [
13
- /* @__PURE__ */ t(
14
- s,
15
- {
16
- eventKey: "members",
17
- title: /* @__PURE__ */ t(n, { children: c("members") }),
18
- "data-testid": "organization-members-tab",
19
- children: /* @__PURE__ */ t(x, {})
20
- }
21
- ),
22
- /* @__PURE__ */ t(
23
- s,
24
- {
25
- eventKey: "invitations",
26
- title: /* @__PURE__ */ t(n, { children: c("invitations") }),
27
- "data-testid": "organization-invitations-tab",
28
- children: /* @__PURE__ */ t(R, {})
29
- }
30
- )
31
- ]
32
- }
33
- );
34
- };
35
- function it() {
36
- const { adminClient: c } = w(), { addAlert: m, addError: b } = B(), { realm: T, realmRepresentation: v } = I(), { id: o } = _(), { t: e } = z(), a = C(), u = async (i) => {
37
- try {
38
- const r = W(i);
39
- await c.organizations.updateById({ id: o }, r), m(e("organizationSaveSuccess"));
40
- } catch (r) {
41
- b("organizationSaveError", r);
42
- }
43
- };
44
- H(
45
- () => c.organizations.findOne({ id: o }),
46
- (i) => {
47
- if (!i)
48
- throw new Error(e("notFound"));
49
- a.reset({
50
- ...i,
51
- domains: i.domains?.map((r) => r.name),
52
- attributes: M(i.attributes)
53
- });
54
- },
55
- [o]
56
- );
57
- const l = (i) => V(
58
- X({
59
- realm: T,
60
- id: o,
61
- tab: i
62
- })
63
- ), p = l("settings"), P = l("attributes"), S = l("members"), f = l("identityProviders"), A = l("events"), { hasAccess: O } = j(), [K, F] = E("adminEvents");
64
- return /* @__PURE__ */ t(h, { variant: "light", className: "pf-v5-u-p-0", children: /* @__PURE__ */ d(k, { ...a, children: [
65
- /* @__PURE__ */ t(D, { save: () => u(a.getValues()) }),
66
- /* @__PURE__ */ d(
67
- G,
68
- {
69
- "data-testid": "organization-tabs",
70
- "aria-label": e("organization"),
71
- isBox: !0,
72
- mountOnEnter: !0,
73
- children: [
74
- /* @__PURE__ */ t(
75
- s,
76
- {
77
- id: "settings",
78
- "data-testid": "settingsTab",
79
- title: /* @__PURE__ */ t(n, { children: e("settings") }),
80
- ...p,
81
- children: /* @__PURE__ */ t(h, { children: /* @__PURE__ */ d(
82
- N,
83
- {
84
- role: "anyone",
85
- onSubmit: a.handleSubmit(u),
86
- isHorizontal: !0,
87
- children: [
88
- /* @__PURE__ */ t($, { readOnly: !0 }),
89
- /* @__PURE__ */ d(J, { children: [
90
- /* @__PURE__ */ t(
91
- L,
92
- {
93
- formState: a.formState,
94
- "data-testid": "save",
95
- children: e("save")
96
- }
97
- ),
98
- /* @__PURE__ */ t(
99
- Q,
100
- {
101
- onClick: () => a.reset(),
102
- "data-testid": "reset",
103
- variant: "link",
104
- children: e("reset")
105
- }
106
- )
107
- ] })
108
- ]
109
- }
110
- ) })
111
- }
112
- ),
113
- /* @__PURE__ */ t(
114
- s,
115
- {
116
- id: "attributes",
117
- "data-testid": "attributeTab",
118
- title: /* @__PURE__ */ t(n, { children: e("attributes") }),
119
- ...P,
120
- children: /* @__PURE__ */ t(h, { variant: "light", children: /* @__PURE__ */ t(
121
- U,
122
- {
123
- form: a,
124
- save: u,
125
- reset: () => a.reset({
126
- ...a.getValues()
127
- }),
128
- name: "attributes"
129
- }
130
- ) })
131
- }
132
- ),
133
- /* @__PURE__ */ t(
134
- s,
135
- {
136
- id: "members",
137
- "data-testid": "membersTab",
138
- title: /* @__PURE__ */ t(n, { children: e("members") }),
139
- ...S,
140
- children: /* @__PURE__ */ t(Y, {})
141
- }
142
- ),
143
- /* @__PURE__ */ t(
144
- s,
145
- {
146
- id: "identityProviders",
147
- "data-testid": "identityProvidersTab",
148
- title: /* @__PURE__ */ t(n, { children: e("identityProviders") }),
149
- ...f,
150
- children: /* @__PURE__ */ t(q, {})
151
- }
152
- ),
153
- v?.adminEventsEnabled && O("view-events") && /* @__PURE__ */ t(
154
- s,
155
- {
156
- "data-testid": "admin-events-tab",
157
- title: /* @__PURE__ */ t(n, { children: e("adminEvents") }),
158
- ...A,
159
- children: /* @__PURE__ */ d(
160
- y,
161
- {
162
- activeKey: K,
163
- onSelect: (i, r) => F(r),
164
- children: [
165
- /* @__PURE__ */ t(
166
- s,
167
- {
168
- eventKey: "adminEvents",
169
- title: /* @__PURE__ */ t(n, { children: e("adminEvents") }),
170
- children: /* @__PURE__ */ t(g, { resourcePath: `organizations/${o}` })
171
- }
172
- ),
173
- /* @__PURE__ */ t(
174
- s,
175
- {
176
- eventKey: "membershipEvents",
177
- title: /* @__PURE__ */ t(n, { children: e("membershipEvents") }),
178
- children: /* @__PURE__ */ t(g, { resourcePath: `organizations/${o}/members` })
179
- }
180
- )
181
- ]
182
- }
183
- )
184
- }
185
- )
186
- ]
187
- }
188
- )
189
- ] }) });
190
- }
191
- export {
192
- it as default
193
- };
194
- //# sourceMappingURL=DetailOrganization-CV52xkX3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DetailOrganization-CV52xkX3.js","sources":["../src/organizations/MembersSection.tsx","../src/organizations/DetailOrganization.tsx"],"sourcesContent":["import { Tab, Tabs, TabTitleText } from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Invitations } from \"./Invitations\";\nimport { Members } from \"./Members\";\n\nexport const MembersSection = () => {\n const { t } = useTranslation();\n const [activeTab, setActiveTab] = useState(\"members\");\n\n return (\n <Tabs\n activeKey={activeTab}\n onSelect={(_, key) => setActiveTab(key as string)}\n >\n <Tab\n eventKey=\"members\"\n title={<TabTitleText>{t(\"members\")}</TabTitleText>}\n data-testid=\"organization-members-tab\"\n >\n <Members />\n </Tab>\n <Tab\n eventKey=\"invitations\"\n title={<TabTitleText>{t(\"invitations\")}</TabTitleText>}\n data-testid=\"organization-invitations-tab\"\n >\n <Invitations />\n </Tab>\n </Tabs>\n );\n};\n","import {\n FormSubmitButton,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n Button,\n PageSection,\n Tab,\n Tabs,\n TabTitleText,\n} from \"@patternfly/react-core\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../admin-client\";\nimport { FormAccess } from \"../components/form/FormAccess\";\nimport { AttributesForm } from \"../components/key-value-form/AttributeForm\";\nimport { arrayToKeyValue } from \"../components/key-value-form/key-value-convert\";\nimport {\n RoutableTabs,\n useRoutableTab,\n} from \"../components/routable-tabs/RoutableTabs\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { useParams } from \"../utils/useParams\";\nimport { DetailOrganizationHeader } from \"./DetailOraganzationHeader\";\nimport { IdentityProviders } from \"./IdentityProviders\";\nimport { MembersSection } from \"./MembersSection\";\nimport {\n OrganizationForm,\n OrganizationFormType,\n convertToOrg,\n} from \"./OrganizationForm\";\nimport {\n EditOrganizationParams,\n OrganizationTab,\n toEditOrganization,\n} from \"./routes/EditOrganization\";\nimport { useAccess } from \"../context/access/Access\";\nimport { AdminEvents } from \"../events/AdminEvents\";\nimport { useState } from \"react\";\n\nexport default function DetailOrganization() {\n const { adminClient } = useAdminClient();\n const { addAlert, addError } = useAlerts();\n\n const { realm, realmRepresentation } = useRealm();\n const { id } = useParams<EditOrganizationParams>();\n const { t } = useTranslation();\n\n const form = useForm<OrganizationFormType>();\n\n const save = async (org: OrganizationFormType) => {\n try {\n const organization = convertToOrg(org);\n await adminClient.organizations.updateById({ id }, organization);\n addAlert(t(\"organizationSaveSuccess\"));\n } catch (error) {\n addError(\"organizationSaveError\", error);\n }\n };\n\n useFetch(\n () => adminClient.organizations.findOne({ id }),\n (org) => {\n if (!org) {\n throw new Error(t(\"notFound\"));\n }\n form.reset({\n ...org,\n domains: org.domains?.map((d) => d.name),\n attributes: arrayToKeyValue(org.attributes),\n });\n },\n [id],\n );\n\n const useTab = (tab: OrganizationTab) =>\n useRoutableTab(\n toEditOrganization({\n realm,\n id,\n tab,\n }),\n );\n\n const settingsTab = useTab(\"settings\");\n const attributesTab = useTab(\"attributes\");\n const membersTab = useTab(\"members\");\n const identityProvidersTab = useTab(\"identityProviders\");\n const eventsTab = useTab(\"events\");\n\n const { hasAccess } = useAccess();\n const [activeEventsTab, setActiveEventsTab] = useState(\"adminEvents\");\n\n return (\n <PageSection variant=\"light\" className=\"pf-v5-u-p-0\">\n <FormProvider {...form}>\n <DetailOrganizationHeader save={() => save(form.getValues())} />\n <RoutableTabs\n data-testid=\"organization-tabs\"\n aria-label={t(\"organization\")}\n isBox\n mountOnEnter\n >\n <Tab\n id=\"settings\"\n data-testid=\"settingsTab\"\n title={<TabTitleText>{t(\"settings\")}</TabTitleText>}\n {...settingsTab}\n >\n <PageSection>\n <FormAccess\n role=\"anyone\"\n onSubmit={form.handleSubmit(save)}\n isHorizontal\n >\n <OrganizationForm readOnly />\n <ActionGroup>\n <FormSubmitButton\n formState={form.formState}\n data-testid=\"save\"\n >\n {t(\"save\")}\n </FormSubmitButton>\n <Button\n onClick={() => form.reset()}\n data-testid=\"reset\"\n variant=\"link\"\n >\n {t(\"reset\")}\n </Button>\n </ActionGroup>\n </FormAccess>\n </PageSection>\n </Tab>\n <Tab\n id=\"attributes\"\n data-testid=\"attributeTab\"\n title={<TabTitleText>{t(\"attributes\")}</TabTitleText>}\n {...attributesTab}\n >\n <PageSection variant=\"light\">\n <AttributesForm\n form={form}\n save={save}\n reset={() =>\n form.reset({\n ...form.getValues(),\n })\n }\n name=\"attributes\"\n />\n </PageSection>\n </Tab>\n <Tab\n id=\"members\"\n data-testid=\"membersTab\"\n title={<TabTitleText>{t(\"members\")}</TabTitleText>}\n {...membersTab}\n >\n <MembersSection />\n </Tab>\n <Tab\n id=\"identityProviders\"\n data-testid=\"identityProvidersTab\"\n title={<TabTitleText>{t(\"identityProviders\")}</TabTitleText>}\n {...identityProvidersTab}\n >\n <IdentityProviders />\n </Tab>\n {realmRepresentation?.adminEventsEnabled &&\n hasAccess(\"view-events\") && (\n <Tab\n data-testid=\"admin-events-tab\"\n title={<TabTitleText>{t(\"adminEvents\")}</TabTitleText>}\n {...eventsTab}\n >\n <Tabs\n activeKey={activeEventsTab}\n onSelect={(_, key) => setActiveEventsTab(key as string)}\n >\n <Tab\n eventKey=\"adminEvents\"\n title={<TabTitleText>{t(\"adminEvents\")}</TabTitleText>}\n >\n <AdminEvents resourcePath={`organizations/${id}`} />\n </Tab>\n <Tab\n eventKey=\"membershipEvents\"\n title={<TabTitleText>{t(\"membershipEvents\")}</TabTitleText>}\n >\n <AdminEvents resourcePath={`organizations/${id}/members`} />\n </Tab>\n </Tabs>\n </Tab>\n )}\n </RoutableTabs>\n </FormProvider>\n </PageSection>\n );\n}\n"],"names":["MembersSection","t","useTranslation","activeTab","setActiveTab","useState","jsxs","Tabs","_","key","jsx","Tab","TabTitleText","Members","Invitations","DetailOrganization","adminClient","useAdminClient","addAlert","addError","useAlerts","realm","realmRepresentation","useRealm","id","useParams","form","useForm","save","org","organization","convertToOrg","error","useFetch","d","arrayToKeyValue","useTab","tab","useRoutableTab","toEditOrganization","settingsTab","attributesTab","membersTab","identityProvidersTab","eventsTab","hasAccess","useAccess","activeEventsTab","setActiveEventsTab","PageSection","FormProvider","DetailOrganizationHeader","RoutableTabs","FormAccess","OrganizationForm","ActionGroup","FormSubmitButton","Button","AttributesForm","IdentityProviders","AdminEvents"],"mappings":";;;;AAMO,MAAMA,IAAiB,MAAM;AAClC,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACR,CAACC,GAAWC,CAAY,IAAIC,EAAS,SAAS;AAEpD,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWJ;AAAA,MACX,UAAU,CAACK,GAAGC,MAAQL,EAAaK,CAAa;AAAA,MAEhD,UAAA;AAAA,QAAA,gBAAAC;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,UAAS;AAAA,YACT,OAAO,gBAAAD,EAACE,GAAA,EAAc,UAAAX,EAAE,SAAS,GAAE;AAAA,YACnC,eAAY;AAAA,YAEZ,4BAACY,GAAA,CAAA,CAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAEX,gBAAAH;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,UAAS;AAAA,YACT,OAAO,gBAAAD,EAACE,GAAA,EAAc,UAAAX,EAAE,aAAa,GAAE;AAAA,YACvC,eAAY;AAAA,YAEZ,4BAACa,GAAA,CAAA,CAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MACf;AAAA,IAAA;AAAA,EAAA;AAGN;ACWA,SAAwBC,KAAqB;AAC3C,QAAM,EAAE,aAAAC,EAAA,IAAgBC,EAAA,GAClB,EAAE,UAAAC,GAAU,UAAAC,EAAA,IAAaC,EAAA,GAEzB,EAAE,OAAAC,GAAO,qBAAAC,EAAA,IAAwBC,EAAA,GACjC,EAAE,IAAAC,EAAA,IAAOC,EAAA,GACT,EAAE,GAAAxB,EAAA,IAAMC,EAAA,GAERwB,IAAOC,EAAA,GAEPC,IAAO,OAAOC,MAA8B;AAChD,QAAI;AACF,YAAMC,IAAeC,EAAaF,CAAG;AACrC,YAAMb,EAAY,cAAc,WAAW,EAAE,IAAAQ,EAAA,GAAMM,CAAY,GAC/DZ,EAASjB,EAAE,yBAAyB,CAAC;AAAA,IACvC,SAAS+B,GAAO;AACd,MAAAb,EAAS,yBAAyBa,CAAK;AAAA,IACzC;AAAA,EACF;AAEAC,EAAAA;AAAAA,IACE,MAAMjB,EAAY,cAAc,QAAQ,EAAE,IAAAQ,GAAI;AAAA,IAC9C,CAACK,MAAQ;AACP,UAAI,CAACA;AACH,cAAM,IAAI,MAAM5B,EAAE,UAAU,CAAC;AAE/B,MAAAyB,EAAK,MAAM;AAAA,QACT,GAAGG;AAAA,QACH,SAASA,EAAI,SAAS,IAAI,CAACK,MAAMA,EAAE,IAAI;AAAA,QACvC,YAAYC,EAAgBN,EAAI,UAAU;AAAA,MAAA,CAC3C;AAAA,IACH;AAAA,IACA,CAACL,CAAE;AAAA,EAAA;AAGL,QAAMY,IAAS,CAACC,MACdC;AAAA,IACEC,EAAmB;AAAA,MACjB,OAAAlB;AAAA,MACA,IAAAG;AAAA,MACA,KAAAa;AAAA,IAAA,CACD;AAAA,EAAA,GAGCG,IAAcJ,EAAO,UAAU,GAC/BK,IAAgBL,EAAO,YAAY,GACnCM,IAAaN,EAAO,SAAS,GAC7BO,IAAuBP,EAAO,mBAAmB,GACjDQ,IAAYR,EAAO,QAAQ,GAE3B,EAAE,WAAAS,EAAA,IAAcC,EAAA,GAChB,CAACC,GAAiBC,CAAkB,IAAI3C,EAAS,aAAa;AAEpE,SACE,gBAAAK,EAACuC,KAAY,SAAQ,SAAQ,WAAU,eACrC,UAAA,gBAAA3C,EAAC4C,GAAA,EAAc,GAAGxB,GAChB,UAAA;AAAA,IAAA,gBAAAhB,EAACyC,KAAyB,MAAM,MAAMvB,EAAKF,EAAK,UAAA,CAAW,GAAG;AAAA,IAC9D,gBAAApB;AAAA,MAAC8C;AAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,cAAYnD,EAAE,cAAc;AAAA,QAC5B,OAAK;AAAA,QACL,cAAY;AAAA,QAEZ,UAAA;AAAA,UAAA,gBAAAS;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAG;AAAA,cACH,eAAY;AAAA,cACZ,OAAO,gBAAAD,EAACE,GAAA,EAAc,UAAAX,EAAE,UAAU,GAAE;AAAA,cACnC,GAAGuC;AAAA,cAEJ,4BAACS,GAAA,EACC,UAAA,gBAAA3C;AAAA,gBAAC+C;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,UAAU3B,EAAK,aAAaE,CAAI;AAAA,kBAChC,cAAY;AAAA,kBAEZ,UAAA;AAAA,oBAAA,gBAAAlB,EAAC4C,GAAA,EAAiB,UAAQ,GAAA,CAAC;AAAA,sCAC1BC,GAAA,EACC,UAAA;AAAA,sBAAA,gBAAA7C;AAAA,wBAAC8C;AAAAA,wBAAA;AAAA,0BACC,WAAW9B,EAAK;AAAA,0BAChB,eAAY;AAAA,0BAEX,YAAE,MAAM;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAEX,gBAAAhB;AAAA,wBAAC+C;AAAA,wBAAA;AAAA,0BACC,SAAS,MAAM/B,EAAK,MAAA;AAAA,0BACpB,eAAY;AAAA,0BACZ,SAAQ;AAAA,0BAEP,YAAE,OAAO;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACZ,EAAA,CACF;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA,EACF,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,UAEF,gBAAAhB;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAG;AAAA,cACH,eAAY;AAAA,cACZ,OAAO,gBAAAD,EAACE,GAAA,EAAc,UAAAX,EAAE,YAAY,GAAE;AAAA,cACrC,GAAGwC;AAAA,cAEJ,UAAA,gBAAA/B,EAACuC,GAAA,EAAY,SAAQ,SACnB,UAAA,gBAAAvC;AAAA,gBAACgD;AAAA,gBAAA;AAAA,kBACC,MAAAhC;AAAA,kBACA,MAAAE;AAAA,kBACA,OAAO,MACLF,EAAK,MAAM;AAAA,oBACT,GAAGA,EAAK,UAAA;AAAA,kBAAU,CACnB;AAAA,kBAEH,MAAK;AAAA,gBAAA;AAAA,cAAA,EACP,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,UAEF,gBAAAhB;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAG;AAAA,cACH,eAAY;AAAA,cACZ,OAAO,gBAAAD,EAACE,GAAA,EAAc,UAAAX,EAAE,SAAS,GAAE;AAAA,cAClC,GAAGyC;AAAA,cAEJ,4BAAC1C,GAAA,CAAA,CAAe;AAAA,YAAA;AAAA,UAAA;AAAA,UAElB,gBAAAU;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAG;AAAA,cACH,eAAY;AAAA,cACZ,OAAO,gBAAAD,EAACE,GAAA,EAAc,UAAAX,EAAE,mBAAmB,GAAE;AAAA,cAC5C,GAAG0C;AAAA,cAEJ,4BAACgB,GAAA,CAAA,CAAkB;AAAA,YAAA;AAAA,UAAA;AAAA,UAEpBrC,GAAqB,sBACpBuB,EAAU,aAAa,KACrB,gBAAAnC;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,eAAY;AAAA,cACZ,OAAO,gBAAAD,EAACE,GAAA,EAAc,UAAAX,EAAE,aAAa,GAAE;AAAA,cACtC,GAAG2C;AAAA,cAEJ,UAAA,gBAAAtC;AAAA,gBAACC;AAAA,gBAAA;AAAA,kBACC,WAAWwC;AAAA,kBACX,UAAU,CAACvC,GAAGC,MAAQuC,EAAmBvC,CAAa;AAAA,kBAEtD,UAAA;AAAA,oBAAA,gBAAAC;AAAA,sBAACC;AAAA,sBAAA;AAAA,wBACC,UAAS;AAAA,wBACT,OAAO,gBAAAD,EAACE,GAAA,EAAc,UAAAX,EAAE,aAAa,GAAE;AAAA,wBAEvC,UAAA,gBAAAS,EAACkD,GAAA,EAAY,cAAc,iBAAiBpC,CAAE,GAAA,CAAI;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEpD,gBAAAd;AAAA,sBAACC;AAAA,sBAAA;AAAA,wBACC,UAAS;AAAA,wBACT,OAAO,gBAAAD,EAACE,GAAA,EAAc,UAAAX,EAAE,kBAAkB,GAAE;AAAA,wBAE5C,UAAA,gBAAAS,EAACkD,GAAA,EAAY,cAAc,iBAAiBpC,CAAE,WAAA,CAAY;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAC5D;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAEN,EAAA,CACF,EAAA,CACF;AAEJ;"}