import React from "react"; import { useHistory, useLocation } from "react-router-dom"; import { useTranslation } from "react-i18next"; import _ from "lodash"; import { Nav, NavItem, NavGroup, NavList, PageSidebar, } from "@patternfly/react-core"; import { RealmSelector } from "./components/realm-selector/RealmSelector"; import { useRealm } from "./context/realm-context/RealmContext"; import { DataLoader } from "./components/data-loader/DataLoader"; import { useAdminClient } from "./context/auth/AdminClient"; import { useAccess } from "./context/access/Access"; import { routes } from "./route-config"; export const PageNav: React.FunctionComponent = () => { const { t } = useTranslation("common"); const { hasAccess, hasSomeAccess } = useAccess(); const { realm } = useRealm(); const adminClient = useAdminClient(); const realmLoader = async () => { return _.sortBy(await adminClient.realms.find(), "realm"); }; const history = useHistory(); type SelectedItem = { groupId: number | string; itemId: number | string; to: string; event: React.FormEvent; }; const onSelect = (item: SelectedItem) => { history.push(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 ); if (!route || !hasAccess(route.access)) return <>; //remove "/realm-name" from the start of the path const activeItem = history.location.pathname.substr(realm.length + 1); return ( {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 { pathname } = useLocation(); const isOnAddRealm = () => pathname.indexOf("add-realm") === -1; return ( {(realmList) => ( )} {isOnAddRealm() && ( )} {showManage && isOnAddRealm() && ( )} {showConfigure && isOnAddRealm() && ( )} } /> ); };