import React, {useState} from 'react';
import {DragDropProvider} from '@dnd-kit/react';
import {useSortable} from '@dnd-kit/react/sortable';
import {move} from '@dnd-kit/helpers';
function GridItem({id, index}: {id: number; index: number}) {
const [element, setElement] = useState<Element | null>(null);
const {isDragging} = useSortable({id, index, element});
return (
<div
ref={setElement}
style={{
height: '100%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
backgroundColor: isDragging ? '#f0f0f0' : 'white',
border: '1px solid #ddd',
borderRadius: '8px',
cursor: 'grab',
fontSize: '24px',
fontWeight: 'bold',
}}
>
{id}
</div>
);
}
export default function GridApp() {
const [items, setItems] = useState(() =>
Array.from({length: 20}, (_, i) => i + 1)
);
return (
<DragDropProvider
onDragEnd={(event) => {
setItems((items) => move(items, event));
}}
>
<div
style={{
display: 'grid',
gridTemplateColumns: 'repeat(auto-fill, 150px)',
gridAutoRows: 150,
gridAutoFlow: 'dense',
gap: 18,
padding: '0 30px',
maxWidth: 900,
marginInline: 'auto',
justifyContent: 'center',
}}
>
{items.map((id, index) => (
<GridItem key={id} id={id} index={index} />
))}
</div>
</DragDropProvider>
);
}