in karavan-app/src/main/webui/src/main/PageNavigation.tsx [61:170]
export function PageNavigation () {
const [config, loading] = useAppConfigStore((state) => [state.config, state.loading], shallow)
const [setFile] = useFileStore((state) => [state.setFile], shallow)
const [setStatus, setPodName] = useDevModeStore((state) => [state.setStatus, state.setPodName], shallow)
const [showUser, setShowUser] = useState<boolean>(false);
const [pageId, setPageId] = useState<string>();
const navigate = useNavigate();
function getMenu() : MenuItem[] {
const pages: MenuItem[] = [
// new MenuItem("dashboard", "Dashboard", <DashboardIcon/>),
new MenuItem("projects", "Projects", <ProjectsIcon/>),
new MenuItem("resources", "Resources", <ResourcesIcon/>),
]
if (config.infrastructure === 'docker') {
pages.push(
new MenuItem("services", "Services", <ServicesIcon/>),
new MenuItem("containers", "Containers", <ContainersIcon/>)
)
}
pages.push(new MenuItem("help", "Help", <KnowledgebaseIcon/>));
pages.push(new MenuItem("system", "System", <ConfigIcon/>));
return pages;
}
return (<div className="nav-buttons" style={{height: "100%", display: "flex", flexDirection: "column"}}>
<div style={{alignSelf: 'center'}}>
<Bullseye>
{loading && <Spinner style={{position: "absolute"}} diameter="40px" aria-label="Loading..."/>}
<Tooltip className="logo-tooltip" content={config.title + " " + config.version}
position={"right"}>
{Icon()}
</Tooltip>
</Bullseye>
</div>
{getMenu().map((page, index) => {
let className = "nav-button";
className = className.concat(pageId === page.pageId ? " nav-button-selected" : "");
className = className.concat((index === getMenu().length - 1) ? " nav-button-last" : "");
return (
<div key={page.pageId} style={{width: '100%'}} className={pageId === page.pageId ? "nav-button-selected" : ""}>
<Button id={page.pageId}
icon={page.icon}
variant={"link"}
className={className}
onClick={event => {
setFile('none', undefined);
setPodName(undefined);
setStatus("none");
setPageId(page.pageId);
navigate(page.pageId);
}}
>
{page.pageId}
</Button>
</div>
)
})}
<div style={{alignSelf: 'center', flexGrow: '2'}}>
<Divider/>
</div>
{KaravanApi.authType !== 'public' &&
<div style={{alignSelf: 'center'}}>
<Popover
hasAutoWidth
aria-label="Current user"
position={"right-end"}
hideOnOutsideClick={false}
isVisible={showUser}
shouldClose={(_event, tip) => setShowUser(false)}
shouldOpen={(_event, tip) => setShowUser(true)}
headerContent={
<TextContent>
<Text component={TextVariants.h3}>Profile</Text>
</TextContent>
}
bodyContent={
<DescriptionList isHorizontal>
<DescriptionListGroup>
<DescriptionListTerm>UserName</DescriptionListTerm>
<DescriptionListDescription>{KaravanApi.me?.userName}</DescriptionListDescription>
</DescriptionListGroup>
<DescriptionListGroup>
<DescriptionListTerm>Display Name</DescriptionListTerm>
<DescriptionListDescription>{KaravanApi.me?.displayName}</DescriptionListDescription>
</DescriptionListGroup>
</DescriptionList>
}
footerContent={
<Flex justifyContent={{default: "justifyContentFlexEnd"}}>
<Button size="sm"
variant={"primary"}
icon={<LogoutIcon/>}
onClick={e => {
setShowUser(false);
SsoApi.logout(() => {});
}}
>
Logout
</Button>
</Flex>
}
>
<UserIcon className="avatar"/>
</Popover>
</div>}
</div>)
}