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)
}
>
)}
))}
{provided.placeholder}
)}
);
};
export default React.memo(SiderMenu);