import {CaretDownOutlined, UserOutlined} from '@ant-design/icons' import {MenuFoldOutlined, MenuUnfoldOutlined} from '@ant-design/icons/lib' import {Dropdown, Layout, Menu, PageHeader, Spin, Tag} from 'antd' import getConfig from 'next/config' import Link from 'next/link' import {useRouter} from 'next/router' import React, {FunctionComponent} from 'react' import {sideMenu, SideMenuElement} from './sidemenu' import {useWindowSize} from './use.window.size' const { publicRuntimeConfig } = getConfig() const { SubMenu, ItemGroup } = Menu const { Header, Content, Sider } = Layout interface BreadcrumbEntry { name: string href?: string as?: string } interface Props { loading?: boolean padded?: boolean style?: any selected?: string breadcrumbs?: BreadcrumbEntry[] title?: string subTitle?: string extra?: any[] } const Structure: FunctionComponent = (props) => { const size = useWindowSize() const [userMenu, setUserMenu] = React.useState(false) const [open, setOpen] = React.useState() const [selected, setSelected] = React.useState() const [sidebar, setSidebar] = React.useState(size.width < 700) const router = useRouter() React.useEffect(() => { if (sidebar !== size.width < 700) { setSidebar(size.width < 700) } }, [size.width]) React.useEffect(() => { if (props.selected) { const parts = props.selected.split('.') const last = parts.pop() if (parts.length > 0) { setOpen(parts) } setSelected([last]) } }, [props.selected]) const buildMenu = (data: SideMenuElement[]): JSX.Element[] => { return data.map((element): JSX.Element => { if (element.items && element.items.length > 0) { if (element.group) { return ( {element.icon} {element.name} )} > {buildMenu(element.items)} ) } return ( {element.icon} {element.name} } > {buildMenu(element.items)} ) } return ( { if (element.href) { router.push(element.href) } }} key={element.key} > {element.icon} {element.name} ) }) } const signOut = async (): Promise => { // TODO sign out } return (
{React.createElement(sidebar ? MenuUnfoldOutlined : MenuFoldOutlined, { className: 'sidebar-toggle', onClick: () => setSidebar(!sidebar), })} {'OhMyForm'}
console.log('profile??')}>Profile Logout )} onVisibleChange={setUserMenu} visible={userMenu} >
setSelected(s.keyPath)} openKeys={open} onOpenChange={(open): void => setOpen(open)} > {buildMenu(sideMenu)} Version: {publicRuntimeConfig.version} {props.title && ( ({ breadcrumbName: b.name, path: '' })), { breadcrumbName: props.title, path: '' } ], params: props.breadcrumbs, itemRender: (route, params: BreadcrumbEntry[], routes, paths) => { if (routes.indexOf(route) === routes.length - 1) { return {route.breadcrumbName} } const entry = params[routes.indexOf(route)] return ( {entry.name} ) }}} /> )} {props.children}
) } Structure.defaultProps = { padded: true, style: {}, } export default Structure