import { useDraggable, useDroppable } from '@dnd-kit/core'; import { observer, useField, useFieldSchema } from '@formily/react'; import React, { createContext, useContext } from 'react'; export const DraggableContext = createContext(null); export const SortableContext = createContext(null); export const SortableProvider = (props) => { const { id, data, children } = props; const draggable = useDraggable({ id, data, }); const droppable = useDroppable({ id, data, }); return {children}; }; export const Sortable = (props: any) => { const { component, style, children, ...others } = props; const { droppable } = useContext(SortableContext); const { isOver, setNodeRef } = droppable; const droppableStyle = { ...style }; if (isOver) { droppableStyle['color'] = 'rgba(241, 139, 98, .1)'; } return React.createElement( component || 'div', { ...others, ref: setNodeRef, style: droppableStyle, }, children, ); }; export const SortableItem: React.FC = observer((props) => { const field = useField(); const fieldSchema = useFieldSchema(); return ( {props.children} ); }); export const DragHandler = (props) => { const { draggable } = useContext(SortableContext); const { isDragging, attributes, listeners, setNodeRef, transform } = draggable; const style = transform ? { transform: `translate3d(${transform.x}px, ${transform.y}px, 0)`, } : undefined; return (
{props.children}
); };