import './menu-tree.css'; import { CaretRightOutlined, CaretDownOutlined, PlusOutlined, CloseOutlined, EditOutlined, } from '@ant-design/icons'; import {IMenuTree, IMenuTreeItem} from "../../interfaces/menu/IMenuTree.ts"; import {Popconfirm} from "antd"; export default function MenuTree(props: IMenuTree) { const triggerChildren = (item: IMenuTreeItem) => { const trigger = () => { item.isOpen = !item.isOpen; props.setMenuTreeArray(item); } trigger(); } const renderBtnGroup = (item: IMenuTreeItem, index: number, parent?: IMenuTreeItem) => { return ( <> { e.stopPropagation(); props.handleEditClick(item); }}/> { e.stopPropagation(); props.handleAddClick(item); }}/> { e?.stopPropagation(); props.handleRemoveClick(item, index, parent); }} onCancel={(e) => { e?.stopPropagation(); }} > { e.stopPropagation(); }}/> ); } const renderLabel = (item: IMenuTreeItem) => { const icon = item.isOpen ? { triggerChildren(item) }}/> : { triggerChildren(item) }}/>; const width = 180 - 50 - (item.level * 10) - (5 + (item.isParent ? 8.75 : 0)); return ( <> {item.isParent ? icon : <>} { e.stopPropagation(); props.handleClick(item); }} onDoubleClick={() => { triggerChildren(item) }}>{item.name} ) } const renderMenu = (children: Array | null, parent?: IMenuTreeItem) => { if (!children) { return <> } const lis = children.map((item, index) => { const renderChildrenMenu = renderMenu(item.children, item); return (
  • {renderLabel(item)}
    {renderBtnGroup(item, index, parent)}
    {renderChildrenMenu}
  • ) }) const isOpen = parent ? parent.isOpen : true; return
      {lis}
    } return
    {renderMenu(props.menus)}
    }