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 (
);
};