import React, {ReactNode, useState} from 'react' import './index.less' import Icon from '../icon/index' import {initLevel, marginLeft, isLinkClassName, isSelectClassName} from './utils' export type MenuEnum = { title: string | ReactNode id?: number icon?: string child?: MenuEnum[] isChose?: boolean level?: number } type Props = { closable?: boolean data: MenuEnum[] onClick?(item: MenuEnum): void onClose?(): void } type MenuItemProps = { menuItem: MenuEnum children: ReactNode onClick?(item: MenuEnum): void } const MenuItem: React.FC = (props: MenuItemProps) => { const {menuItem, children} = props const [isFold, setFold] = useState(false) const renderIcon = () => { if (menuItem?.child?.length && menuItem?.level !== 1) { const iconName = menuItem.isChose ? 'chose-fold' : 'fold' return ( setFold(!isFold)} /> ) } } const renderChildren = () => { if (isFold) return
return children } return ( <>
menuItem?.level !== 1 && props?.onClick?.(menuItem)}>
{menuItem.icon && }

{menuItem.title}

{renderIcon()}
{renderChildren()} ) } const Menu: React.FC = (props: Props) => { const {closable, data} = props const [visible, setVisible] = useState(false) const recursionData = (menuData: MenuEnum[], level: number): MenuEnum[] => { return menuData?.map(item => ({ ...item, child: item?.child ? recursionData(item?.child, level + 1) : [], level, })) } const renderMenuItem = (menuList: MenuEnum[]) => { return menuList.map((item, index) => { return (
{renderMenuItem(item?.child!)}
) }) } const onClickClose = () => { setVisible(!visible) if (visible) props?.onClose?.() } const newData = recursionData(data, initLevel) return (
{renderMenuItem(newData)}
{closable && }
) } export default Menu