diff --git a/js/apps/account-ui/src/root/Root.tsx b/js/apps/account-ui/src/root/Root.tsx index 27d941f07f46..3546228caccb 100644 --- a/js/apps/account-ui/src/root/Root.tsx +++ b/js/apps/account-ui/src/root/Root.tsx @@ -1,4 +1,8 @@ -import { ErrorPage, useEnvironment } from "@keycloak/keycloak-ui-shared"; +import { + ErrorPage, + useEnvironment, + KeycloakContext, +} from "@keycloak/keycloak-ui-shared"; import { Page, Spinner } from "@patternfly/react-core"; import { Suspense, useState } from "react"; import { @@ -14,12 +18,21 @@ import { Header } from "./Header"; import { MenuItem, PageNav } from "./PageNav"; import { routes } from "../routes"; -function mapRoutes(content: MenuItem[]): RouteObject[] { +function mapRoutes( + context: KeycloakContext, + content: MenuItem[], +): RouteObject[] { return content .map((item) => { if ("children" in item) { - return mapRoutes(item.children); + return mapRoutes(context, item.children); + } + + // Do not add route disabled via feature flags + if (item.isVisible && !context.environment.features[item.isVisible]) { + return null; } + return { ...item, element: @@ -28,6 +41,7 @@ function mapRoutes(content: MenuItem[]): RouteObject[] { : undefined, }; }) + .filter((item) => !!item) .flat(); } @@ -49,7 +63,7 @@ export const Root = () => { ), errorElement: , - children: mapRoutes(content), + children: mapRoutes(context, content), }, ]); },