Skip to content

Commit a05e708

Browse files
ngonzalezpazFCjavier-godoy
authored andcommitted
fix: fix items disappearing when trying to drop within same grid
Close #53
1 parent f278427 commit a05e708

File tree

1 file changed

+36
-31
lines changed

1 file changed

+36
-31
lines changed

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

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ private static final class TwinColModel<T> implements Serializable {
6868
final Label columnLabel = new Label();
6969
final VerticalLayout layout = new VerticalLayout(columnLabel, grid);
7070
HeaderRow headerRow;
71+
boolean droppedInsideGrid = false;
7172

7273
@SuppressWarnings("unchecked")
7374
ListDataProvider<T> getDataProvider() {
@@ -107,9 +108,8 @@ Collection<T> getItems() {
107108

108109
private Grid<T> draggedGrid;
109110

110-
private Label fakeButtonContainerLabel = new Label();
111111

112-
private boolean droppedInsideGrid = false;
112+
private Label fakeButtonContainerLabel = new Label();
113113

114114
/**
115115
* Constructs a new TwinColGrid with an empty {@link ListDataProvider}.
@@ -360,8 +360,8 @@ public TwinColGrid<T> withSizeFull() {
360360
* @return this instance
361361
*/
362362
public TwinColGrid<T> withDragAndDropSupport() {
363-
configDragAndDrop(leftGrid, rightGrid);
364-
configDragAndDrop(rightGrid, leftGrid);
363+
configDragAndDrop(left, right);
364+
configDragAndDrop(right, left);
365365
return this;
366366
}
367367

@@ -455,46 +455,51 @@ private void updateSelection(final Set<T> addedItems, final Set<T> removedItems)
455455
});
456456
}
457457

458-
@SuppressWarnings("unchecked")
459-
private void configDragAndDrop(final Grid<T> sourceGrid, final Grid<T> targetGrid) {
458+
private void configDragAndDrop(final TwinColModel<T> sourceModel, final TwinColModel<T> targetModel) {
460459

461460
final Set<T> draggedItems = new LinkedHashSet<>();
462461

463-
sourceGrid.setRowsDraggable(true);
464-
sourceGrid.addDragStartListener(event -> {
465-
draggedGrid = sourceGrid;
466-
if (!(draggedGrid.getSelectionModel() instanceof GridNoneSelectionModel)) {
462+
sourceModel.grid.setRowsDraggable(true);
463+
sourceModel.grid.addDragStartListener(event -> {
464+
draggedGrid = null;
465+
466+
if (!(sourceModel.grid.getSelectionModel() instanceof GridNoneSelectionModel)) {
467467
draggedItems.addAll(event.getDraggedItems());
468468
}
469-
targetGrid.setDropMode(GridDropMode.ON_GRID);
469+
targetModel.grid.setDropMode(GridDropMode.ON_GRID);
470470
});
471471

472-
sourceGrid.addDragEndListener(event -> {
473-
if (droppedInsideGrid) {
474-
droppedInsideGrid = false;
475-
if (draggedGrid == null) {
472+
sourceModel.grid.addDragEndListener(event -> {
473+
if (targetModel.droppedInsideGrid && sourceModel.grid==draggedGrid) {
474+
475+
476+
if (draggedGrid == null) {
477+
draggedItems.clear();
478+
return;
479+
}
480+
481+
final ListDataProvider<T> dragGridSourceDataProvider = sourceModel.getDataProvider();
482+
483+
dragGridSourceDataProvider.getItems().removeAll(draggedItems);
484+
dragGridSourceDataProvider.refreshAll();
485+
486+
targetModel.droppedInsideGrid = false;
487+
draggedGrid = null;
488+
476489
draggedItems.clear();
477-
return;
490+
sourceModel.grid.deselectAll();
491+
} else {
492+
draggedItems.clear();
478493
}
479-
final ListDataProvider<T> dragGridSourceDataProvider =
480-
(ListDataProvider<T>) draggedGrid.getDataProvider();
481-
dragGridSourceDataProvider.getItems().removeAll(draggedItems);
482-
dragGridSourceDataProvider.refreshAll();
483494

484-
draggedItems.clear();
495+
});
485496

486-
draggedGrid.deselectAll();
487-
draggedGrid = null;
497+
targetModel.grid.addDropListener(event -> {
498+
draggedGrid = sourceModel.grid;
488499

489-
} else {
490-
draggedItems.clear();
491-
}
492-
});
493500

494-
targetGrid.addDropListener(event -> {
495-
droppedInsideGrid = true;
496-
final ListDataProvider<T> dragGridTargetDataProvider =
497-
(ListDataProvider<T>) event.getSource().getDataProvider();
501+
targetModel.droppedInsideGrid = true;
502+
final ListDataProvider<T> dragGridTargetDataProvider = targetModel.getDataProvider();
498503
dragGridTargetDataProvider.getItems().addAll(draggedItems);
499504
dragGridTargetDataProvider.refreshAll();
500505
});

0 commit comments

Comments
 (0)