import './menu-tree.css'; import { CaretRightOutlined, CaretDownOutlined, PlusOutlined, CloseOutlined, EditOutlined, CheckOutlined } from '@ant-design/icons'; import {IMenuTree, IMenuTreeItem} from "../../interfaces/menu/IMenuTree.ts"; 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) => { if (item.isEdit) { return ( <> { props.handleEditSaveClick(item); }}/> { props.handleEditCancelClick(item); }}/> ) } return ( <> { props.handleEditClick(item); }}/> { props.handleAddClick(item); }}/> { props.handleRemoveClick(item, index, parent); }}/> ); } const renderLabel = (item: IMenuTreeItem) => { if (item.isEdit) { const width = 180 - 30 - item.level * 10; return { item.name = e.target.value; props.handleNameChange(item); }}/> } 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 : <>} { 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)}
    }