import React, { useState, useEffect } from 'react'; import { Menu } from 'antd'; import { Link } from 'react-router-dom'; import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd'; import { IFMenu } from '../routes/config'; import { MenuProps } from 'antd/lib/menu'; const renderMenuItem = ( item: IFMenu // item.route 菜单单独跳转的路由 ) => ( {/* {item.icon && } */} {item.title} ); const renderSubMenu = (item: IFMenu) => { return ( {/* {item.icon && } */} {item.title} } > {item.subs!.map((sub) => (sub.subs ? renderSubMenu(sub) : renderMenuItem(sub)))} ); }; type SiderMenuProps = MenuProps & { menus: any; onClick: (e: any) => void; selectedKeys: string[]; openKeys?: string[]; onOpenChange: (v: string[]) => void; }; const SiderMenu = ({ menus, ...props }: SiderMenuProps) => { const [dragItems, setDragItems] = useState([]); useEffect(() => { setDragItems(menus); }, [menus]); const reorder = (list: any, startIndex: number, endIndex: number) => { const result = Array.from(list); const [removed] = result.splice(startIndex, 1); result.splice(endIndex, 0, removed); return result; }; const onDragEnd = (result: any) => { // dropped outside the list if (!result.destination) { return; } const _items = reorder(dragItems, result.source.index, result.destination.index); setDragItems(_items); }; return ( {(provided, snapshot) => (
{dragItems.map((item: IFMenu, index: number) => ( {(provided, snapshot) => (
) => provided.dragHandleProps && provided.dragHandleProps.onDragStart(e as any) } > {item.subs! ? renderSubMenu(item) : renderMenuItem(item)}
)}
))} {provided.placeholder}
)}
); }; export default React.memo(SiderMenu);