moved AdminEnvironment to seperate file (#48039)

* moved AdminEnvironment to seperate file

fixes: #48038
Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* code review

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

---------

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
This commit is contained in:
Erik Jan de Wit
2026-05-26 13:19:08 +02:00
committed by GitHub
parent 00afdeeb0b
commit 71e63e99dc
14 changed files with 41 additions and 42 deletions
+1 -1
View File
@@ -22,7 +22,7 @@ import { AccessContextProvider } from "./context/access/Access";
import { RealmContextProvider } from "./context/realm-context/RealmContext"; import { RealmContextProvider } from "./context/realm-context/RealmContext";
import { ServerInfoProvider } from "./context/server-info/ServerInfoProvider"; import { ServerInfoProvider } from "./context/server-info/ServerInfoProvider";
import { WhoAmIContextProvider } from "./context/whoami/WhoAmI"; import { WhoAmIContextProvider } from "./context/whoami/WhoAmI";
import type { Environment } from "./environment"; import type { Environment } from "./environment-types";
import { SubGroups } from "./groups/SubGroupsContext"; import { SubGroups } from "./groups/SubGroupsContext";
import { AuthWall } from "./root/AuthWall"; import { AuthWall } from "./root/AuthWall";
import { Banners } from "./Banners"; import { Banners } from "./Banners";
+1 -1
View File
@@ -12,7 +12,7 @@ import { NavLink, useNavigate } from "react-router-dom";
import { useAccess } from "./context/access/Access"; import { useAccess } from "./context/access/Access";
import { useRealm } from "./context/realm-context/RealmContext"; import { useRealm } from "./context/realm-context/RealmContext";
import { useServerInfo } from "./context/server-info/ServerInfoProvider"; import { useServerInfo } from "./context/server-info/ServerInfoProvider";
import { Environment } from "./environment"; import type { Environment } from "./environment-types";
import { toPage } from "./page/routes"; import { toPage } from "./page/routes";
import { routes } from "./routes"; import { routes } from "./routes";
import { resolveDisplayName } from "./util"; import { resolveDisplayName } from "./util";
+1 -1
View File
@@ -4,7 +4,7 @@ import {
useRequiredContext, useRequiredContext,
} from "@keycloak/keycloak-ui-shared"; } from "@keycloak/keycloak-ui-shared";
import type Keycloak from "keycloak-js"; import type Keycloak from "keycloak-js";
import type { Environment } from "./environment"; import type { Environment } from "./environment-types";
export type AdminClientProps = { export type AdminClientProps = {
keycloak: Keycloak; keycloak: Keycloak;
@@ -28,7 +28,7 @@ import { Action, KeycloakDataTable } from "@keycloak/keycloak-ui-shared";
import { ViewHeader } from "../components/view-header/ViewHeader"; import { ViewHeader } from "../components/view-header/ViewHeader";
import { useAccess } from "../context/access/Access"; import { useAccess } from "../context/access/Access";
import { useRealm } from "../context/realm-context/RealmContext"; import { useRealm } from "../context/realm-context/RealmContext";
import { Environment } from "../environment"; import { Environment } from "../environment-types";
import helpUrls from "../help-urls"; import helpUrls from "../help-urls";
import { emptyFormatter, exportClient } from "../util"; import { emptyFormatter, exportClient } from "../util";
import { convertClientToUrl } from "../utils/client-url"; import { convertClientToUrl } from "../utils/client-url";
+19
View File
@@ -0,0 +1,19 @@
import type { BaseEnvironment } from "@keycloak/keycloak-ui-shared";
export type Environment = BaseEnvironment & {
/**
* The URL to the root of the Administration Console, including the path if present, this takes into account the configured hostname of the Administration Console.
* For example, the Keycloak server could be hosted on `auth.example.com` and Admin Console may be hosted on `admin.example.com/some/path`.
*
* Note that this URL is normalized not to include a trailing slash, so take this into account when constructing URLs.
*
* @see {@link https://www.keycloak.org/server/hostname#_administration_console}
*/
adminBaseUrl: string;
/** The URL to the base of the Admin Console. */
consoleBaseUrl: string;
/** The name of the master realm. */
masterRealm: string;
/** The version hash of the auth server. */
resourceVersion: string;
};
+2 -22
View File
@@ -1,24 +1,4 @@
import { import { getInjectedEnvironment } from "@keycloak/keycloak-ui-shared";
getInjectedEnvironment, import type { Environment } from "./environment-types";
type BaseEnvironment,
} from "@keycloak/keycloak-ui-shared";
export type Environment = BaseEnvironment & {
/**
* The URL to the root of the Administration Console, including the path if present, this takes into account the configured hostname of the Administration Console.
* For example, the Keycloak server could be hosted on `auth.example.com` and Admin Console may be hosted on `admin.example.com/some/path`.
*
* Note that this URL is normalized not to include a trailing slash, so take this into account when constructing URLs.
*
* @see {@link https://www.keycloak.org/server/hostname#_administration_console}
*/
adminBaseUrl: string;
/** The URL to the base of the Admin Console. */
consoleBaseUrl: string;
/** The name of the master realm. */
masterRealm: string;
/** The version hash of the auth server. */
resourceVersion: string;
};
export const environment = getInjectedEnvironment<Environment>(); export const environment = getInjectedEnvironment<Environment>();
@@ -13,7 +13,7 @@ import { useTranslation } from "react-i18next";
import { useAdminClient } from "../../admin-client"; import { useAdminClient } from "../../admin-client";
import { FileUploadForm } from "../../components/json-file-upload/FileUploadForm"; import { FileUploadForm } from "../../components/json-file-upload/FileUploadForm";
import { useRealm } from "../../context/realm-context/RealmContext"; import { useRealm } from "../../context/realm-context/RealmContext";
import type { Environment } from "../../environment"; import type { Environment } from "../../environment-types";
import { addTrailingSlash } from "../../util"; import { addTrailingSlash } from "../../util";
import { getAuthorizationHeaders } from "../../utils/getAuthorizationHeaders"; import { getAuthorizationHeaders } from "../../utils/getAuthorizationHeaders";
import { DiscoveryEndpointField } from "../component/DiscoveryEndpointField"; import { DiscoveryEndpointField } from "../component/DiscoveryEndpointField";
@@ -9,7 +9,7 @@ import { useTranslation } from "react-i18next";
import { FormattedLink } from "../../components/external-link/FormattedLink"; import { FormattedLink } from "../../components/external-link/FormattedLink";
import { useRealm } from "../../context/realm-context/RealmContext"; import { useRealm } from "../../context/realm-context/RealmContext";
import type { Environment } from "../../environment"; import type { Environment } from "../../environment-types";
import { DisplayOrder } from "../component/DisplayOrder"; import { DisplayOrder } from "../component/DisplayOrder";
import { RedirectUrl } from "../component/RedirectUrl"; import { RedirectUrl } from "../component/RedirectUrl";
+1 -1
View File
@@ -322,7 +322,7 @@ export { Header } from "./PageHeader";
export { PageNav } from "./PageNav"; export { PageNav } from "./PageNav";
export { PageNotFoundSection } from "./PageNotFoundSection"; export { PageNotFoundSection } from "./PageNotFoundSection";
export { App as AdminUi } from "./App"; export { App as AdminUi } from "./App";
export type { Environment as AdminEnvironment } from "./environment"; export type { Environment as AdminEnvironment } from "./environment-types";
export { KeycloakProvider, useEnvironment } from "@keycloak/keycloak-ui-shared"; export { KeycloakProvider, useEnvironment } from "@keycloak/keycloak-ui-shared";
export { AdminClientContext, initAdminClient } from "./admin-client"; export { AdminClientContext, initAdminClient } from "./admin-client";
export { AppContexts } from "./App"; export { AppContexts } from "./App";
+9 -2
View File
@@ -5,14 +5,21 @@ import { StrictMode } from "react";
import { createRoot } from "react-dom/client"; import { createRoot } from "react-dom/client";
import { createHashRouter, RouterProvider } from "react-router-dom"; import { createHashRouter, RouterProvider } from "react-router-dom";
import { i18n } from "./i18n/i18n"; import { i18n } from "./i18n/i18n";
import { RootRoute } from "./routes"; import { Root } from "./Root";
import { routes } from "./routes";
import "./index.css"; import "./index.css";
// Initialize required components before rendering app. // Initialize required components before rendering app.
await i18n.init(); await i18n.init();
const router = createHashRouter([RootRoute]); const router = createHashRouter([
{
path: "/",
element: <Root />,
children: routes,
},
]);
const container = document.getElementById("app"); const container = document.getElementById("app");
const root = createRoot(container!); const root = createRoot(container!);
@@ -27,7 +27,7 @@ import { ViewHeader } from "../components/view-header/ViewHeader";
import { useAccess } from "../context/access/Access"; import { useAccess } from "../context/access/Access";
import { useRealm } from "../context/realm-context/RealmContext"; import { useRealm } from "../context/realm-context/RealmContext";
import { toDashboard } from "../dashboard/routes/Dashboard"; import { toDashboard } from "../dashboard/routes/Dashboard";
import type { Environment } from "../environment"; import type { Environment } from "../environment-types";
import helpUrls from "../help-urls"; import helpUrls from "../help-urls";
import { import {
convertFormValuesToObject, convertFormValuesToObject,
@@ -1,7 +1,7 @@
import { loginThemeProperties as properties } from "./LoginThemeProperties"; import { loginThemeProperties as properties } from "./LoginThemeProperties";
import { usePreviewLogo } from "./LogoContext"; import { usePreviewLogo } from "./LogoContext";
import { useEnvironment } from "@keycloak/keycloak-ui-shared"; import { useEnvironment } from "@keycloak/keycloak-ui-shared";
import { Environment } from "../../environment"; import { Environment } from "../../environment-types";
import { usePreviewBackground } from "./BackgroundContext"; import { usePreviewBackground } from "./BackgroundContext";
type LoginPreviewWindowProps = { type LoginPreviewWindowProps = {
+1 -8
View File
@@ -1,9 +1,8 @@
import type { AccessType } from "@keycloak/keycloak-admin-client/lib/defs/whoAmIRepresentation"; import type { AccessType } from "@keycloak/keycloak-admin-client/lib/defs/whoAmIRepresentation";
import type { TFunction } from "i18next"; import type { TFunction } from "i18next";
import type { ComponentType } from "react"; import type { ComponentType } from "react";
import type { NonIndexRouteObject, RouteObject } from "react-router-dom"; import type { NonIndexRouteObject } from "react-router-dom";
import { PageNotFoundSection } from "./PageNotFoundSection"; import { PageNotFoundSection } from "./PageNotFoundSection";
import { Root } from "./Root";
import authenticationRoutes from "./authentication/routes"; import authenticationRoutes from "./authentication/routes";
import clientScopesRoutes from "./client-scopes/routes"; import clientScopesRoutes from "./client-scopes/routes";
import clientRoutes from "./clients/routes"; import clientRoutes from "./clients/routes";
@@ -60,9 +59,3 @@ export const routes: AppRouteObject[] = [
...pageRoutes, ...pageRoutes,
NotFoundRoute, NotFoundRoute,
]; ];
export const RootRoute: RouteObject = {
path: "/",
element: <Root />,
children: routes,
};
+1 -1
View File
@@ -1,5 +1,5 @@
import ClientRepresentation from "@keycloak/keycloak-admin-client/lib/defs/clientRepresentation"; import ClientRepresentation from "@keycloak/keycloak-admin-client/lib/defs/clientRepresentation";
import type { Environment } from "../environment"; import type { Environment } from "../environment-types";
import { joinPath } from "./joinPath"; import { joinPath } from "./joinPath";
export const convertClientToUrl = ( export const convertClientToUrl = (