import React from 'react'; import { MenuSpec } from './types'; import { Menu } from 'antd'; import { useLayoutFrameOptions } from './layout'; import { useNamedTheme } from '../../../hooks/useNamedTheme'; import type { MenuProps } from 'antd/lib/menu'; interface RenderOptions { link: React.FunctionComponent<{ href }> | React.ComponentClass<{ href }> | string; } export const LayoutFrameMenu: React.FC> = ({ children, ...props }) => { const { menus, link = 'a', menuProps = {} } = useLayoutFrameOptions(); const [theme] = useNamedTheme(); return ( {renderMenus(menus, { link } as any)} ); }; function renderMenus(menus: MenuSpec[], opts: RenderOptions) { return menus.map((v) => renderMenu(v, opts)); } function renderMenu(menu: MenuSpec, opts: RenderOptions) { const { path, title, iconComponent, children = [] } = menu; if (path || children.length === 0) { return renderMenuItem(menu, opts); } return ( {iconComponent} {title} } > {children.map((v) => renderMenuItem(v, opts))} ); } function renderMenuItem(menu: MenuSpec, { link: Link }: RenderOptions) { const { path, title, iconComponent } = menu; return (
{iconComponent} {title}
); }