* Fix duplicate grid column visibility change event Toggle a column visibility through UI will fire 2 event. There should be only 1. * Add Testtags/8.9.0.alpha1
@Override | @Override | ||||
public void columnVisibilityChanged(String internalId, boolean hidden) { | public void columnVisibilityChanged(String internalId, boolean hidden) { | ||||
Column<T, ?> column = getColumnByInternalId(internalId); | Column<T, ?> column = getColumnByInternalId(internalId); | ||||
column.checkColumnIsAttached(); | |||||
if (column.isHidden() != hidden) { | if (column.isHidden() != hidden) { | ||||
column.setHidden(hidden); | |||||
column.getState().hidden = hidden; | |||||
fireColumnVisibilityChangeEvent(column, hidden, true); | fireColumnVisibilityChangeEvent(column, hidden, true); | ||||
} | } | ||||
} | } |
package com.vaadin.tests.components.grid; | |||||
import java.util.Arrays; | |||||
import java.util.List; | |||||
import com.vaadin.server.VaadinRequest; | |||||
import com.vaadin.tests.components.AbstractTestUIWithLog; | |||||
import com.vaadin.ui.Grid; | |||||
public class GridEventSentOnColumnVisibilityChange | |||||
extends AbstractTestUIWithLog { | |||||
@Override | |||||
protected void setup(VaadinRequest request) { | |||||
List<Person> people = Arrays.asList( | |||||
new Person("Nicolaus Copernicus", 1543), | |||||
new Person("Galileo Galilei", 1564), | |||||
new Person("Johannes Kepler", 1571)); | |||||
Grid<Person> grid = new Grid<>(); | |||||
grid.setItems(people); | |||||
grid.addColumn(Person::getName).setId("name").setCaption("Name") | |||||
.setHidable(true); | |||||
grid.addColumn(Person::getBirthYear).setCaption("Year of birth") | |||||
.setHidable(true); | |||||
grid.setSizeFull(); | |||||
grid.addColumnVisibilityChangeListener( | |||||
event -> log("UserOriginated: " + event.isUserOriginated())); | |||||
addComponent(grid); | |||||
} | |||||
private class Person { | |||||
private final String name; | |||||
private final int birthYear; | |||||
public Person(String name, int birthYear) { | |||||
this.name = name; | |||||
this.birthYear = birthYear; | |||||
} | |||||
public String getName() { | |||||
return name; | |||||
} | |||||
public int getBirthYear() { | |||||
return birthYear; | |||||
} | |||||
} | |||||
@Override | |||||
public String getDescription() { | |||||
return "Every time when the user changes the visibility of the column," | |||||
+ " there should have only one event sent"; | |||||
} | |||||
@Override | |||||
protected Integer getTicketNumber() { | |||||
return 11419; | |||||
} | |||||
} |
package com.vaadin.tests.components.grid; | |||||
import java.util.List; | |||||
import org.junit.Assert; | |||||
import org.junit.Test; | |||||
import org.openqa.selenium.WebElement; | |||||
import com.vaadin.testbench.By; | |||||
import com.vaadin.testbench.elements.GridElement; | |||||
import com.vaadin.tests.tb3.SingleBrowserTest; | |||||
public class GridEventSentOnColumnVisibilityChangeTest extends SingleBrowserTest { | |||||
@Test | |||||
public void changeVisibilityAssertLog() { | |||||
openTestURL(); | |||||
GridElement grid = $(GridElement.class).first(); | |||||
getSidebarOpenButton(grid).click(); | |||||
// hide the first column | |||||
getSidebarPopup().findElements(By.tagName("td")).get(0).click(); | |||||
Assert.assertTrue("Log content should match", | |||||
"1. UserOriginated: true".equals(getLogRow(0))); | |||||
} | |||||
protected WebElement getSidebarOpenButton(GridElement grid) { | |||||
List<WebElement> elements = grid | |||||
.findElements(By.className("v-grid-sidebar-button")); | |||||
return elements.isEmpty() ? null : elements.get(0); | |||||
} | |||||
protected WebElement getSidebarPopup() { | |||||
List<WebElement> elements = findElements( | |||||
By.className("v-grid-sidebar-popup")); | |||||
return elements.isEmpty() ? null : elements.get(0); | |||||
} | |||||
} |