aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormlindfors <majuli@vaadin.com>2018-12-05 16:39:09 +0200
committerSun Zhe <31067185+ZheSun88@users.noreply.github.com>2018-12-11 16:58:38 +0200
commitec2837ca00b294c1dcb1d367d3a09a85e8f9b9ad (patch)
tree3b81d9eea77f79364e0948ab2a85e7d8b791a0fa
parenta9fde1dde8feee9d11a4ea4e0adf1cefd0efd322 (diff)
downloadvaadin-framework-ec2837ca00b294c1dcb1d367d3a09a85e8f9b9ad.tar.gz
vaadin-framework-ec2837ca00b294c1dcb1d367d3a09a85e8f9b9ad.zip
Fix Grid's frozen columns not being set (#10653) (#11346)
In certain cases setting the frozen columns didn't produce the expected result in the client side widget state. This happened if the frozen columns value was set to be the same it was before removeAllColumns was called. This fix removes the frozen column value from the diff state so that the value gets properly set in the client side. Closes #10653
-rw-r--r--server/src/main/java/com/vaadin/ui/Grid.java16
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/grid/GridFrozenColumnReset.java57
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/GridFrozenColumnResetTest.java26
3 files changed, 98 insertions, 1 deletions
diff --git a/server/src/main/java/com/vaadin/ui/Grid.java b/server/src/main/java/com/vaadin/ui/Grid.java
index 5a71a1b904..1d72b4f6a2 100644
--- a/server/src/main/java/com/vaadin/ui/Grid.java
+++ b/server/src/main/java/com/vaadin/ui/Grid.java
@@ -3082,7 +3082,21 @@ public class Grid<T> extends AbstractListing<T> implements HasComponents,
"count must be between -1 and the current number of columns ("
+ columnSet.size() + "): " + numberOfColumns);
}
-
+ int currentFrozenColumnState = getState(false).frozenColumnCount;
+ /*
+ * we remove the current value from the state so that setting frozen
+ * columns will always happen after this call. This is so that the value
+ * will be set also in the widget even if it happens to seem to be the
+ * same as this current value we're setting.
+ */
+ if (currentFrozenColumnState != numberOfColumns) {
+ final String diffStateKey = "frozenColumnCount";
+ UI ui = getUI();
+ if (ui != null) {
+ ui.getConnectorTracker().getDiffState(Grid.this)
+ .remove(diffStateKey);
+ }
+ }
getState().frozenColumnCount = numberOfColumns;
}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridFrozenColumnReset.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridFrozenColumnReset.java
new file mode 100644
index 0000000000..fadc8967bd
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/grid/GridFrozenColumnReset.java
@@ -0,0 +1,57 @@
+package com.vaadin.tests.components.grid;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.data.bean.Person;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.renderers.NumberRenderer;
+
+public class GridFrozenColumnReset extends SimpleGridUI {
+
+ private Grid<Person> grid;
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ grid = new Grid<Person>();
+ grid.setSizeFull();
+ init();
+ getLayout().addComponent(grid);
+
+ Button button = new Button("change frozen count");
+ button.addClickListener(event -> {
+ reInit();
+ });
+ getLayout().addComponent(button);
+ }
+
+ @Override
+ protected List<Person> createPersons() {
+ List<Person> persons = new ArrayList<>();
+ for (int i = 0; i < 10; ++i) {
+ Person person = new Person();
+ person.setFirstName("First " + i);
+ person.setLastName("Last" + i);
+ person.setAge(i);
+ persons.add(person);
+ }
+ return persons;
+ }
+
+ protected void init() {
+ grid.addColumn(Person::getFirstName);
+ grid.addColumn(Person::getLastName);
+ grid.addColumn(Person::getAge, new NumberRenderer());
+
+ grid.setItems(createPersons());
+ grid.setFrozenColumnCount(2);
+ }
+
+ protected void reInit() {
+ grid.removeAllColumns();
+ init();
+ }
+
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/GridFrozenColumnResetTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/GridFrozenColumnResetTest.java
new file mode 100644
index 0000000000..82bcb90f56
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/GridFrozenColumnResetTest.java
@@ -0,0 +1,26 @@
+package com.vaadin.tests.components.grid;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class GridFrozenColumnResetTest extends MultiBrowserTest {
+
+ @Test
+ public void testFrozenColumnReset() {
+ openTestURL();
+ GridElement grid = $(GridElement.class).first();
+
+ assertTrue(grid.getCell(0, 1).isFrozen());
+
+ ButtonElement button = $(ButtonElement.class).first();
+ button.click();
+
+ assertTrue(grid.getCell(0, 1).isFrozen());
+ }
+
+}