import React, { Component } from 'react';
import Konva from 'konva';
import { Stage, Layer, Circle } from 'react-konva';
function generateItems() {
const items = [];
for (let i = 0; i < 10; i++) {
items.push({
x: Math.random() * window.innerWidth,
y: Math.random() * window.innerHeight,
id: 'node-' + i,
color: Konva.Util.getRandomColor(),
});
}
return items;
}
const App = () => {
const [items, setItems] = React.useState(generateItems());
const handleDragStart = (e) => {
const id = e.target.name();
const itemsCopy = items.slice();
const item = itemsCopy.find((i) => i.id === id);
const index = itemsCopy.indexOf(item);
itemsCopy.splice(index, 1);
itemsCopy.push(item);
setItems(itemsCopy);
};
const onDragEnd = (e) => {
const id = e.target.name();
const itemsCopy = items.slice();
const item = items.find((i) => i.id === id);
const index = items.indexOf(item);
itemsCopy[index] = {
...item,
x: e.target.x(),
y: e.target.y(),
};
setItems(itemsCopy);
};
return (
<Stage width={window.innerWidth} height={window.innerHeight}>
<Layer>
{items.map((item) => (
<Circle
key={item.id}
name={item.id}
draggable
x={item.x}
y={item.y}
fill={item.color}
radius={50}
onDragStart={handleDragStart}
onDragEnd={onDragEnd}
/>
))}
</Layer>
</Stage>
);
};
export default App;