We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
It is possible to corrupt a TreeData making it expose a cyclic (non-tree) structure.
I expect there to be an exception so that the data is not corrupted.
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) { String oldParent = treeGrid.getTreeData().getParent(s); treeGrid.getTreeData().setParent(drag, s); if (oldParent != null) { treeGrid.getDataProvider().refreshItem(oldParent, true); treeGrid.getDataProvider().refreshItem(s, true); } else { treeGrid.getDataProvider().refreshAll(); } } }); } } catch (Exception e) { Notification.show("Exception: "+e); } } ); treeGrid.setWidthFull(); treeGrid.setHeight("800px"); add(treeGrid); } }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Description of the bug
cyclic.mov
It is possible to corrupt a TreeData making it expose a cyclic (non-tree) structure.
Expected behavior
I expect there to be an exception so that the data is not corrupted.
Minimal reproducible example
Versions
The text was updated successfully, but these errors were encountered: