aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 2766f2cb88..7c3467eaa3 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());
+ }
+
+}