import React, { useContext, useEffect, useState } from "react"; import { Switch, Route, useHistory } from "react-router-dom"; import { Dropdown, Layout, Menu } from "antd"; import UserOutlined from "@ant-design/icons/UserOutlined"; import webUiPackage from "../../package.json"; import { useAccount } from "../model/account"; import ErrorBoundary from "./ErrorBoundary"; import ErrorPage from "./ErrorPage"; import ControlContext from "./ControlContext"; import { pages } from "../pages"; const { Header, Sider } = Layout; export default function SiteLayout(props) { let history = useHistory(); let [currentSidebarPath, setCurrentSidebarPath] = useState(null); let account = useAccount(); let plugins = useContext(ControlContext).plugins; function SetSidebar(setSidebarProps) { useEffect(() => { setCurrentSidebarPath(setSidebarProps.path); }); return null; } let accountMenu = { history.push(`/users/${account.name}/view`); }}>{account.name} { account.logOut(); }}>Log out ; let combinedPages = [...pages]; for (let plugin of plugins.values()) { combinedPages.push(...plugin.pages); } let menuItems = []; let menuGroups = new Map(); for (let { sidebarName, sidebarGroup, permission, path } of combinedPages) { if (!sidebarName || permission && !account.hasPermission(permission)) { continue; } if (sidebarGroup) { let group = menuGroups.get(sidebarGroup); if (!group) { group = []; menuGroups.set(sidebarGroup, group); } group.push({sidebarName}); } else { menuItems.push({sidebarName}); } } for (let [name, group] of menuGroups) { menuItems.push({group}); } return
Clusterio { webUiPackage.version } Dashboard
history.push(key)} > {menuItems} {combinedPages.map(({path, sidebarPath, content}) => {content} )}
; }