if (isAttached()) { | if (isAttached()) { | ||||
attachDataProviderListener(); | attachDataProviderListener(); | ||||
} | } | ||||
hardReset(); | |||||
reset = true; | |||||
markAsDirty(); | |||||
return filter -> { | return filter -> { | ||||
if (this.dataProvider != dataProvider) { | if (this.dataProvider != dataProvider) { | ||||
generators.forEach(g -> g.refreshData(item)); | generators.forEach(g -> g.refreshData(item)); | ||||
getUI().access(() -> refresh(item)); | getUI().access(() -> refresh(item)); | ||||
} else { | } else { | ||||
getUI().access(this::hardReset); | |||||
reset = true; | |||||
getUI().access(() -> markAsDirty()); | |||||
} | } | ||||
}); | }); | ||||
} | } | ||||
private void hardReset() { | |||||
reset = true; | |||||
markAsDirty(); | |||||
} | |||||
private void detachDataProviderListener() { | private void detachDataProviderListener() { | ||||
if (dataProviderUpdateRegistration != null) { | if (dataProviderUpdateRegistration != null) { | ||||
dataProviderUpdateRegistration.remove(); | dataProviderUpdateRegistration.remove(); |
package com.vaadin.tests.components.treegrid; | |||||
import com.vaadin.data.TreeData; | |||||
import com.vaadin.server.VaadinRequest; | |||||
import com.vaadin.tests.components.AbstractTestUI; | |||||
import com.vaadin.ui.Button; | |||||
import com.vaadin.ui.TreeGrid; | |||||
public class TreeGridExpandOnAdd extends AbstractTestUI { | |||||
@Override | |||||
protected void setup(VaadinRequest request) { | |||||
TreeGrid<Item> tree = new TreeGrid<>(Item.class); | |||||
Button button = new Button("Add new item", e -> addItem(tree)); | |||||
addComponents(tree, button); | |||||
} | |||||
private void addItem(TreeGrid<Item> tree) { | |||||
Item parent = new Item("Parent"); | |||||
Item child = new Item("Child"); | |||||
TreeData<Item> treeData = tree.getTreeData(); | |||||
treeData.addItem(null, parent); | |||||
treeData.addItem(parent, child); | |||||
tree.getDataProvider().refreshAll(); | |||||
tree.expand(parent); | |||||
} | |||||
public static class Item { | |||||
private String name; | |||||
public Item(String name) { | |||||
this.name = name; | |||||
} | |||||
public String getName() { | |||||
return name; | |||||
} | |||||
} | |||||
} |
package com.vaadin.tests.components.treegrid; | |||||
import static org.junit.Assert.assertEquals; | |||||
import org.junit.Test; | |||||
import com.vaadin.testbench.elements.ButtonElement; | |||||
import com.vaadin.testbench.elements.TreeGridElement; | |||||
import com.vaadin.tests.tb3.SingleBrowserTest; | |||||
public class TreeGridExpandOnAddTest extends SingleBrowserTest { | |||||
@Test | |||||
public void testNoException() { | |||||
setDebug(true); | |||||
openTestURL(); | |||||
$(ButtonElement.class).first().click(); | |||||
TreeGridElement treeGrid = $(TreeGridElement.class).first(); | |||||
assertEquals("Parent node not added", "Parent", | |||||
treeGrid.getCell(0, 0).getText()); | |||||
assertEquals("Child node not added", "Child", | |||||
treeGrid.getCell(1, 0).getText()); | |||||
assertNoErrorNotifications(); | |||||
} | |||||
} |