* Add tests * Fix getVisibleFrozenColumnCount() if SelectionMode is multitags/8.12.0.alpha1
// for the escalator the hidden columns are not in the frozen column | // for the escalator the hidden columns are not in the frozen column | ||||
// count, but for grid they are. thus need to convert the index | // count, but for grid they are. thus need to convert the index | ||||
for (int i = 0; i < frozenColumnCount; i++) { | |||||
int limit = getFrozenColumnCount(); | |||||
if (getSelectionColumn().isPresent()) { | |||||
// If the grid is in MultiSelect mode, getColumn(0) in the following | |||||
// for loop returns the selection column. Accordingly, verifying | |||||
// which frozen columns are visible if the selection column is | |||||
// present should take this fact into account. | |||||
limit++; | |||||
} | |||||
for (int i = 0; i < limit; i++) { | |||||
if (i >= getColumnCount() || getColumn(i).isHidden()) { | if (i >= getColumnCount() || getColumn(i).isHidden()) { | ||||
numberOfColumns--; | numberOfColumns--; | ||||
} | } |
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.Component; | |||||
import com.vaadin.ui.CssLayout; | |||||
import com.vaadin.ui.Grid; | |||||
import com.vaadin.ui.Label; | |||||
import com.vaadin.ui.TreeGrid; | |||||
public class TreeGridChangeHierarchyColumn extends AbstractTestUI { | |||||
@Override | |||||
protected String getTestDescription() { | |||||
return "TreeGrid in MultiSelect mode should take hiden columns into account when" | |||||
+ " rendering frozen columns after hierarchy-column reset."; | |||||
} | |||||
@Override | |||||
protected Integer getTicketNumber() { | |||||
return 12026; | |||||
} | |||||
@Override | |||||
protected void setup(VaadinRequest request) { | |||||
TreeGrid<String> treeGrid = new TreeGrid<>(); | |||||
treeGrid.setId("TreeGrid"); | |||||
for (int i = 0; i < 20; i++) { | |||||
String columnId = String.valueOf(i); | |||||
Grid.Column<String, Component> column = addColumn(treeGrid, | |||||
columnId); | |||||
column.setCaption(columnId); | |||||
column.setId(columnId); | |||||
} | |||||
TreeData<String> data = treeGrid.getTreeData(); | |||||
data.addItem(null, "child"); | |||||
data.addItem("child", "grandChild"); | |||||
treeGrid.setHierarchyColumn(treeGrid.getColumns().get(0)); | |||||
Button hideHierCol = new Button("Hide Hierarchy Column"); | |||||
hideHierCol.addClickListener(e -> { | |||||
treeGrid.getHierarchyColumn().setHidden(true); | |||||
}); | |||||
hideHierCol.setId("hideHierColButton"); | |||||
Button setHierCol = new Button("Set new Hierarchy Column"); | |||||
setHierCol.addClickListener(e -> { | |||||
treeGrid.getColumns().stream().filter(column -> !column.isHidden()) | |||||
.findFirst().ifPresent(col -> { | |||||
treeGrid.setHierarchyColumn(col.getId()); | |||||
}); | |||||
}); | |||||
setHierCol.setId("setHierColButton"); | |||||
treeGrid.setSelectionMode(Grid.SelectionMode.MULTI); | |||||
treeGrid.setFrozenColumnCount(1); | |||||
addComponents(treeGrid, hideHierCol, setHierCol); | |||||
} | |||||
private Grid.Column<String, Component> addColumn(Grid<String> grid, | |||||
String columnId) { | |||||
return grid.addComponentColumn(val -> { | |||||
Label label = new Label(columnId); | |||||
label.setWidth(50, Unit.PIXELS); | |||||
return new CssLayout(label); | |||||
}); | |||||
} | |||||
} |
package com.vaadin.tests.components.treegrid; | |||||
import static org.junit.Assert.assertEquals; | |||||
import java.util.List; | |||||
import org.junit.Test; | |||||
import org.openqa.selenium.WebElement; | |||||
import com.vaadin.testbench.By; | |||||
import com.vaadin.testbench.elements.ButtonElement; | |||||
import com.vaadin.testbench.elements.TreeGridElement; | |||||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||||
public class TreeGridChangeHierarchyColumnTest extends MultiBrowserTest { | |||||
@Test | |||||
public void renderingFrozenColumnsShouldFactorInHiddenColumns() { | |||||
openTestURL(); | |||||
waitForElementPresent(By.id("TreeGrid")); | |||||
waitForElementPresent(By.id("hideHierColButton")); | |||||
waitForElementPresent(By.id("setHierColButton")); | |||||
TreeGridElement treeGrid = $(TreeGridElement.class).id("TreeGrid"); | |||||
ButtonElement hideHierCol = $(ButtonElement.class) | |||||
.id("hideHierColButton"); | |||||
ButtonElement setHierCol = $(ButtonElement.class) | |||||
.id("setHierColButton"); | |||||
hideHierCol.click(); | |||||
setHierCol.click(); | |||||
// Wait for the new hierarchy column to be rendered | |||||
waitForElementPresent(By.className("v-treegrid-expander")); | |||||
List<WebElement> frozenCells = treeGrid | |||||
.findElements(By.className("frozen")); | |||||
assertEquals("Only the MultiSelect column should have frozen cells.", 2, | |||||
frozenCells.size()); | |||||
} | |||||
} |