import { FormEvent, FunctionComponent } from "react"; import { NavLink, useMatch, useNavigate } from "react-router-dom-v5-compat"; import { useTranslation } from "react-i18next"; import { Nav, NavItem, NavGroup, NavList, PageSidebar, Divider, } from "@patternfly/react-core"; import { RealmSelector } from "./components/realm-selector/RealmSelector"; import { useRealm } from "./context/realm-context/RealmContext"; import { useAccess } from "./context/access/Access"; import { routes } from "./route-config"; import { AddRealmRoute } from "./realm/routes/AddRealm"; import "./page-nav.css"; export const PageNav: FunctionComponent = () => { const { t } = useTranslation("common"); const { hasAccess, hasSomeAccess } = useAccess(); const { realm } = useRealm(); const navigate = useNavigate(); type SelectedItem = { groupId: number | string; itemId: number | string; to: string; event: FormEvent; }; const onSelect = (item: SelectedItem) => { navigate(item.to); item.event.preventDefault(); }; type LeftNavProps = { title: string; path: string }; const LeftNav = ({ title, path }: LeftNavProps) => { const route = routes.find( (route) => route.path.replace(/\/:.+?(\?|(?:(?!\/).)*|$)/g, "") === path ); const accessAllowed = route && (route.access instanceof Array ? hasAccess(...route.access) : hasAccess(route.access)); if (!accessAllowed) { return null; } return (
  • `pf-c-nav__link${isActive ? " pf-m-current" : ""}` } > {t(title)}
  • ); }; const showManage = hasSomeAccess( "view-realm", "query-groups", "query-users", "query-clients", "view-events" ); const showConfigure = hasSomeAccess( "view-realm", "query-clients", "view-identity-providers" ); const isOnAddRealm = !!useMatch(AddRealmRoute.path); return ( {showManage && !isOnAddRealm && ( )} {showConfigure && !isOnAddRealm && ( )} } /> ); };