flow
flow copied to clipboard
treeGrid.getTreeData().setParent() may lose parent and children. See video.
Description of the bug
When I drag the parent node to become a child of its child, the entire branch seems to be detached from the model tree and disappears.
Expected behavior
I expect an exception to be thrown.
Minimal reproducible example
package org.vaadin.example;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.grid.dnd.GridDropLocation;
import com.vaadin.flow.component.grid.dnd.GridDropMode;
import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.component.treegrid.TreeGrid;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.data.provider.hierarchy.TreeData;
import com.vaadin.flow.router.Route;
import java.util.ArrayList;
import java.util.List;
@Route
public class MainView extends VerticalLayout {
private static class DemoTreeData extends TreeData<String> {
private DemoTreeData() {
final String[] five = {"A", "B", "C", "D", "E"};
addRootItems(five);
for (String s : five) {
List<String> children = new ArrayList<>();
for (String ch : five) {
String child = s+ch;
children.add(child);
}
addItems(s, children);
}
}
}
public MainView() {
TreeGrid<String> treeGrid = new TreeGrid<>();
treeGrid.addHierarchyColumn(String::toString).setHeader("Name");
treeGrid.setTreeData(new DemoTreeData());
treeGrid.setDropMode(GridDropMode.ON_TOP_OR_BETWEEN);
treeGrid.setSelectionMode(Grid.SelectionMode.SINGLE);
treeGrid.setRowsDraggable(true);
List<String> dragged = new ArrayList<>();
treeGrid.addDragStartListener( evt -> {
dragged.clear();
dragged.addAll(evt.getDraggedItems());
} );
treeGrid.addDropListener( evt -> {
try {
if (GridDropLocation.ON_TOP == evt.getDropLocation()) {
evt.getDropTargetItem().ifPresent(s -> {
for (String drag : dragged) {
if (!drag.equals(s)) {
treeGrid.getTreeData().setParent(drag, s);
treeGrid.getDataProvider().refreshAll();
}
else throw new IllegalStateException("Ignored dropping to itself.");
}
});
}
}
catch (Exception e) {
Notification.show("Exception: "+e);
}
} );
treeGrid.setWidthFull();
treeGrid.setHeight("800px");
add(treeGrid);
}
}
Versions
- Vaadin / Flow version: 24.3.11
- Java version: n/a
- OS version: n/a
- Browser version (if applicable): n/a
- Application Server (if applicable): n/a
- IDE (if applicable): n/a
https://github.com/vaadin/flow/assets/7870436/13b4d7eb-ff37-4e2a-8c82-7bce056f3f41
May have the same or similar root cause https://github.com/vaadin/flow/issues/19378.