import React, { useCallback } from 'react'; import styles from './index.less'; import classnames from 'classnames'; import type { DropResult } from 'react-beautiful-dnd'; import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'; interface IProps

{ itemStyle?: React.CSSProperties | ((dataset: P) => React.CSSProperties); itemClassName?: string | ((item: P) => string); items: P[]; onItemClick?: (item: P) => void; onDrag: (newItems: any[]) => void; children: (item: P, icon: JSX.Element) => JSX.Element; keyField?: string; } function DragList

>({ children, itemStyle, itemClassName, items, onDrag, onItemClick, keyField = 'id', }: IProps

) { const onDragEnd = useCallback( (result: DropResult) => { if (result.destination) { const newItems = [...items]; const sourceIndex = result.source.index; const targetIndex = result.destination.index; const [item] = newItems.splice(sourceIndex, 1); newItems.splice(targetIndex, 0, item); onDrag(newItems); } }, [items, onDrag], ); return ( {(provided) => (

{items.map((item, index) => ( {(itemProvided, snapshot) => { const className = typeof itemClassName === 'function' ? itemClassName(items[index]) : itemClassName; return (
onItemClick?.(items[index])} > {children( item, , )}
); }}
))}
)} ); } export default DragList;