@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.
- package/lib/.vite/manifest.json +40 -40
- package/lib/{AddJWTAuthorizationGrant-B9fNafs-.js → AddJWTAuthorizationGrant-CeMENUIM.js} +19 -19
- package/lib/{AddJWTAuthorizationGrant-B9fNafs-.js.map → AddJWTAuthorizationGrant-CeMENUIM.js.map} +1 -1
- package/lib/{AddKubernetesConnect-_-fIYkCu.js → AddKubernetesConnect-0RUT9aV2.js} +13 -13
- package/lib/{AddKubernetesConnect-_-fIYkCu.js.map → AddKubernetesConnect-0RUT9aV2.js.map} +1 -1
- package/lib/{AddOAuth2-GWdhXpZu.js → AddOAuth2-Cw67bzVu.js} +12 -12
- package/lib/{AddOAuth2-GWdhXpZu.js.map → AddOAuth2-Cw67bzVu.js.map} +1 -1
- package/lib/{AddSpiffeConnect-CEycf6Um.js → AddSpiffeConnect-Cd9x7mR2.js} +9 -9
- package/lib/{AddSpiffeConnect-CEycf6Um.js.map → AddSpiffeConnect-Cd9x7mR2.js.map} +1 -1
- package/lib/{CreateFlow-C1gSi1GV.js → CreateFlow-9cA71I0U.js} +10 -10
- package/lib/{CreateFlow-C1gSi1GV.js.map → CreateFlow-9cA71I0U.js.map} +1 -1
- package/lib/DetailOrganization-C14l_h62.js +204 -0
- package/lib/DetailOrganization-C14l_h62.js.map +1 -0
- package/lib/{ExecutorForm-D3r69dqU.js → ExecutorForm-BwTQyA36.js} +17 -17
- package/lib/{ExecutorForm-D3r69dqU.js.map → ExecutorForm-BwTQyA36.js.map} +1 -1
- package/lib/{FlowDetails-DNNCBfY5.js → FlowDetails-BpGnLs_D.js} +1998 -2039
- package/lib/FlowDetails-BpGnLs_D.js.map +1 -0
- package/lib/NewOrganization-SUmXcFih.js +36 -0
- package/lib/{NewOrganization-KSp9gXMo.js.map → NewOrganization-SUmXcFih.js.map} +1 -1
- package/lib/{PermissionConfigurationDetails-LVkEXehk.js → PermissionConfigurationDetails-B7AeRfGJ.js} +118 -118
- package/lib/{PermissionConfigurationDetails-LVkEXehk.js.map → PermissionConfigurationDetails-B7AeRfGJ.js.map} +1 -1
- package/lib/{PermissionDetails-DlPJ8m6r.js → PermissionDetails-CY6ytovN.js} +79 -79
- package/lib/{PermissionDetails-DlPJ8m6r.js.map → PermissionDetails-CY6ytovN.js.map} +1 -1
- package/lib/{RealmSection-BKt0CL1J.js → RealmSection-CMquQhw3.js} +26 -26
- package/lib/{RealmSection-BKt0CL1J.js.map → RealmSection-CMquQhw3.js.map} +1 -1
- package/lib/{ResourceDetails-CV230nyS.js → ResourceDetails-BsRxSUu-.js} +36 -36
- package/lib/ResourceDetails-BsRxSUu-.js.map +1 -0
- package/lib/{ScopeDetails-BleAAOMS.js → ScopeDetails-puMEG5G1.js} +27 -27
- package/lib/{ScopeDetails-BleAAOMS.js.map → ScopeDetails-puMEG5G1.js.map} +1 -1
- package/lib/{ScopePicker-BpZ35vej.js → ScopePicker-Bc9l9PJg.js} +15 -15
- package/lib/{ScopePicker-BpZ35vej.js.map → ScopePicker-Bc9l9PJg.js.map} +1 -1
- package/lib/WorkflowDetailForm-B-cQjnC9.js +147 -0
- package/lib/WorkflowDetailForm-B-cQjnC9.js.map +1 -0
- package/lib/{WorkflowsSection-C6tPZTDa.js → WorkflowsSection-BB9dHYmO.js} +20 -20
- package/lib/{WorkflowsSection-C6tPZTDa.js.map → WorkflowsSection-BB9dHYmO.js.map} +1 -1
- package/lib/client-scopes/details/oid4vciAttributes.d.ts +4 -0
- package/lib/clients/keys/Certificate.d.ts +3 -1
- package/lib/components/dynamic/MapComponent.d.ts +1 -1
- package/lib/components/key-value-form/KeyValueInput.d.ts +4 -1
- package/lib/components/realm-loa-mapping/RealmLoAMapping.d.ts +13 -0
- package/lib/components/role-mapping/queries.d.ts +1 -2
- package/lib/components/role-mapping/resource.d.ts +33 -0
- package/lib/components/view-header/ViewHeader.d.ts +2 -1
- package/lib/context/auth/admin-ui-endpoint.d.ts +1 -0
- package/lib/context/group-resource/GroupResourceContext.d.ts +9 -0
- package/lib/groups/GroupsSection.d.ts +3 -1
- package/lib/groups/MembersModal.d.ts +5 -1
- package/lib/groups/MembershipsModal.d.ts +2 -1
- package/lib/groups/routes/Groups.d.ts +3 -0
- package/lib/help-urls.d.ts +1 -0
- package/lib/i18n/constants.d.ts +1 -0
- package/lib/i18n/i18n.d.ts +0 -1
- package/lib/{index-D3mEQ9NL.js → index-iLxEY-Jz.js} +44585 -35236
- package/lib/{index-D3mEQ9NL.js.map → index-iLxEY-Jz.js.map} +1 -1
- package/lib/index.d.ts +6 -4
- package/lib/keycloak-admin-ui.css +1 -1
- package/lib/keycloak-admin-ui.js +298 -294
- package/lib/organizations/routes/EditOrganization.d.ts +1 -1
- package/lib/realm-settings/routes/ThemesTab.d.ts +1 -1
- package/lib/realm-settings/themes/BackgroundContext.d.ts +9 -0
- package/lib/realm-settings/themes/ColorControl.d.ts +8 -0
- package/lib/realm-settings/themes/DefaultColorAccordion.d.ts +7 -0
- package/lib/realm-settings/themes/FileNameDialog.d.ts +1 -1
- package/lib/realm-settings/themes/LoginPreviewWindow.d.ts +5 -0
- package/lib/realm-settings/themes/LoginThemeProperties.d.ts +63 -0
- package/lib/realm-settings/themes/PatternflyVars.d.ts +29 -8
- package/lib/realm-settings/themes/QuickTheme.d.ts +17 -0
- package/lib/realm-settings/themes/ThemeColors.d.ts +3 -3
- package/lib/realm-settings/themes/ThemesTab.d.ts +0 -6
- package/lib/realm-settings/themes/UploadJar.d.ts +1 -1
- package/lib/realm-settings/themes/fileUtils.d.ts +1 -0
- package/lib/user/UserWorkflows.d.ts +5 -0
- package/lib/user/routes/User.d.ts +1 -1
- package/lib/user/utils/user-profile.d.ts +10 -0
- package/lib/utils/useIsFeatureEnabled.d.ts +4 -1
- package/package.json +10 -9
- package/lib/DetailOrganization-CV52xkX3.js +0 -194
- package/lib/DetailOrganization-CV52xkX3.js.map +0 -1
- package/lib/FlowDetails-DNNCBfY5.js.map +0 -1
- package/lib/NewOrganization-KSp9gXMo.js +0 -36
- package/lib/ResourceDetails-CV230nyS.js.map +0 -1
- package/lib/WorkflowDetailForm-CH1O9UEB.js +0 -4938
- package/lib/WorkflowDetailForm-CH1O9UEB.js.map +0 -1
- 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" | "
|
|
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,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
|
-
|
|
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:
|
|
4
|
-
variable: string |
|
|
5
|
-
}
|
|
6
|
-
|
|
8
|
+
defaultValue: DefaultValueType;
|
|
9
|
+
variable: string | Value;
|
|
10
|
+
};
|
|
11
|
+
type FlattenedDependencyVariable = {
|
|
7
12
|
name: string;
|
|
8
|
-
defaultValue:
|
|
9
|
-
variable: string
|
|
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 './
|
|
2
|
+
import { ThemeRealmRepresentation } from './QuickTheme';
|
|
3
3
|
type ThemeColorsProps = {
|
|
4
4
|
realm: RealmRepresentation;
|
|
5
5
|
save: (realm: ThemeRealmRepresentation) => void;
|
|
6
|
-
theme
|
|
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 {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const fileToDataUri: (file: File) => Promise<string>;
|
|
@@ -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.
|
|
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": "^
|
|
91
|
+
"i18next-fetch-backend": "^7.0.0",
|
|
91
92
|
"jszip": "^3.10.1",
|
|
92
93
|
"keycloak-js": "^26.2.2",
|
|
93
|
-
"lodash-es": "^4.
|
|
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.
|
|
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.
|
|
103
|
-
"@keycloak/keycloak-admin-client": "26.
|
|
104
|
-
"@keycloak/keycloak-ui-shared": "26.
|
|
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": "^
|
|
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":"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"}
|