Skip to content

Commit 549a7b0

Browse files
javier-godoypaodb
authored andcommitted
feat: handle in-between drops when reordering is enabled
1 parent 120ff73 commit 549a7b0

File tree

1 file changed

+11
-17
lines changed

1 file changed

+11
-17
lines changed

src/main/java/com/flowingcode/vaadin/addons/twincolgrid/TwinColGrid.java

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -744,51 +744,45 @@ private void configDragAndDrop(
744744
sourceModel.grid.setRowsDraggable(true);
745745
sourceModel.grid.addDragStartListener(
746746
event -> {
747-
draggedGrid = null;
747+
draggedGrid = sourceModel.grid;
748748

749749
if (!(sourceModel.grid.getSelectionModel() instanceof GridNoneSelectionModel)) {
750750
draggedItems.addAll(event.getDraggedItems());
751751
}
752752

753753
sourceModel.grid.setDropMode(sourceModel.allowReordering ? GridDropMode.BETWEEN : null);
754-
targetModel.grid.setDropMode(GridDropMode.ON_GRID);
754+
targetModel.grid.setDropMode(targetModel.allowReordering ? GridDropMode.BETWEEN : GridDropMode.ON_GRID);
755755
});
756756

757757
sourceModel.grid.addDragEndListener(
758758
event -> {
759-
if (targetModel.droppedInsideGrid && sourceModel.grid == draggedGrid) {
760-
761-
if (draggedGrid == null) {
762-
draggedItems.clear();
763-
return;
764-
}
759+
if (targetModel.droppedInsideGrid
760+
&& sourceModel.grid == draggedGrid
761+
&& !draggedItems.isEmpty()) {
765762

766763
final ListDataProvider<T> dragGridSourceDataProvider = sourceModel.getDataProvider();
767764

768765
dragGridSourceDataProvider.getItems().removeAll(draggedItems);
769766
dragGridSourceDataProvider.refreshAll();
770767

771768
targetModel.droppedInsideGrid = false;
772-
draggedGrid = null;
773769

774770
draggedItems.clear();
775771
sourceModel.grid.deselectAll();
776772

777773
sourceModel.grid.setDropMode(null);
778774
targetModel.grid.setDropMode(null);
779-
} else {
780-
draggedItems.clear();
781775
}
776+
draggedItems.clear();
782777
});
783778

784779
targetModel.grid.addDropListener(
785780
event -> {
786-
draggedGrid = sourceModel.grid;
787-
788-
targetModel.droppedInsideGrid = true;
789-
final ListDataProvider<T> dragGridTargetDataProvider = targetModel.getDataProvider();
790-
dragGridTargetDataProvider.getItems().addAll(draggedItems);
791-
dragGridTargetDataProvider.refreshAll();
781+
if (!draggedItems.isEmpty()) {
782+
targetModel.droppedInsideGrid = true;
783+
T dropOverItem = event.getDropTargetItem().orElse(null);
784+
addItems(targetModel, draggedItems, dropOverItem, event.getDropLocation());
785+
}
792786
});
793787

794788
sourceModel.grid.addDropListener(event -> {

0 commit comments

Comments
 (0)