import { gray } from '@ant-design/colors'; import { FileProtectOutlined, LeftOutlined, RightOutlined, } from '@ant-design/icons'; import { t } from '@lingui/macro'; import { useLingui } from '@lingui/react'; import { Grid, Layout, Menu, MenuProps, Space, Tooltip, Typography, } from 'antd'; import { MenuItemGroupType } from 'rc-menu/lib/interface'; import React from 'react'; import { Outlet, useLocation, useNavigate } from 'react-router-dom'; import styled from 'styled-components'; import { Brand } from '../components/brand'; import { LanguageSelect } from '../components/language-select'; const headerHeight = '0px'; const contentHeight = `calc(100vh - ${headerHeight})`; const StyledSider = styled(Layout.Sider)` & .ant-layout-sider-children { display: flex; flex-direction: column; } & .ant-menu .ant-menu.ant-menu-sub.ant-menu-inline { background: #002140; border-radius: 8px; } `; function getSelectedKeys(menuItems: MenuProps['items']) { function isMenuItemGroup( item: MenuProps['items'][number], ): item is MenuItemGroupType { return (item as any).children; } return menuItems.reduce((acc, item) => { if (location.pathname.startsWith(String(item.key))) { acc.push(String(item.key)); } if (isMenuItemGroup(item)) { acc.push(...getSelectedKeys(item.children)); } return acc; }, []); } export function MainLayout() { const screens = Grid.useBreakpoint(); const { i18n } = useLingui(); const location = useLocation(); const leftMenuItems = useLeftMenuItems(); const [isCollapsed, setCollapsed] = React.useState(false); return (