mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-05-08 15:09:27 +08:00
* v0.6 * update... * feat: improve code * improve code * action & form * update... * improve code * improve code * improve code * designable * update * update... * api client * RecordProvider * collection manager * update... * update api client * update use request * update * update doc * test cases for compose * docs: improve documentation
66 lines
1.6 KiB
TypeScript
66 lines
1.6 KiB
TypeScript
import React, { useState } from 'react';
|
|
import {useDroppable, useDraggable} from '@dnd-kit/core';
|
|
import {DndContext} from '@dnd-kit/core';
|
|
|
|
function Draggable(props) {
|
|
const {attributes, listeners, setNodeRef, transform} = useDraggable({
|
|
id: props.id,
|
|
});
|
|
const style = transform ? {
|
|
transform: `translate3d(${transform.x}px, ${transform.y}px, 0)`,
|
|
} : undefined;
|
|
|
|
|
|
return (
|
|
<button ref={setNodeRef} style={style} {...listeners} {...attributes}>
|
|
{props.children}
|
|
</button>
|
|
);
|
|
}
|
|
|
|
function Droppable(props) {
|
|
const {isOver, setNodeRef} = useDroppable({
|
|
id: props.id,
|
|
});
|
|
const style = {
|
|
color: isOver ? 'green' : undefined,
|
|
};
|
|
|
|
|
|
return (
|
|
<div ref={setNodeRef} style={style}>
|
|
{props.children}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export default function App() {
|
|
const containers = ['A', 'B', 'C'];
|
|
const [parent, setParent] = useState(null);
|
|
const draggableMarkup = (
|
|
<Draggable id="draggable">Drag me</Draggable>
|
|
);
|
|
|
|
return (
|
|
<DndContext onDragEnd={handleDragEnd}>
|
|
{parent === null ? draggableMarkup : null}
|
|
|
|
{containers.map((id) => (
|
|
// We updated the Droppable component so it would accept an `id`
|
|
// prop and pass it to `useDroppable`
|
|
<Droppable key={id} id={id}>
|
|
{parent === id ? draggableMarkup : 'Drop here'}
|
|
</Droppable>
|
|
))}
|
|
</DndContext>
|
|
);
|
|
|
|
function handleDragEnd(event) {
|
|
const {over} = event;
|
|
|
|
// If the item is dropped over a container, set it as the parent
|
|
// otherwise reset the parent to `null`
|
|
setParent(over ? over.id : null);
|
|
}
|
|
};
|