diff --git a/packages/volto/news/8372.bugfix b/packages/volto/news/8372.bugfix new file mode 100644 index 00000000000..5abe32898f0 --- /dev/null +++ b/packages/volto/news/8372.bugfix @@ -0,0 +1,2 @@ + Fix incorrect item positioning when rapidly dragging and dropping items in ``/contents``. @wesleybl + \ No newline at end of file diff --git a/packages/volto/src/components/manage/Contents/Contents.jsx b/packages/volto/src/components/manage/Contents/Contents.jsx index 698177fea10..b3120a47939 100644 --- a/packages/volto/src/components/manage/Contents/Contents.jsx +++ b/packages/volto/src/components/manage/Contents/Contents.jsx @@ -724,9 +724,9 @@ class Contents extends Component { delta, ); } else { - this.setState({ - items: move(this.state.items, itemIndex, itemIndex + delta), - }); + this.setState((prevState) => ({ + items: move(prevState.items, itemIndex, itemIndex + delta), + })); } } diff --git a/packages/volto/src/components/manage/Contents/ContentsItem.jsx b/packages/volto/src/components/manage/Contents/ContentsItem.jsx index 6ce624cc161..b368c2c5914 100644 --- a/packages/volto/src/components/manage/Contents/ContentsItem.jsx +++ b/packages/volto/src/components/manage/Contents/ContentsItem.jsx @@ -364,15 +364,13 @@ const DragDropConnector = (props) => { drop(props, monitor) { const id = monitor.getItem().id; const dragOrder = monitor.getItem().startOrder; - const dropOrder = props.order; + const dropOrder = monitor.getItem().order; if (dragOrder === dropOrder) { return; } props.onOrderItem(id, dragOrder, dropOrder - dragOrder, true); - - monitor.getItem().order = dropOrder; }, }, (connect) => ({