Browse Source

Apply offset to column index depending on presense of selection column (#11667)

* Apply offset to column index depending on presense of selection column

After testing this manually I noticed that offset correction needs to be negative

* Add the testing UI
tags/8.9.0.beta2
Tatu Lund 4 years ago
parent
commit
344d8660f3

+ 5
- 1
client/src/main/java/com/vaadin/client/widgets/Grid.java View File

@@ -7958,7 +7958,11 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
if (!event.getCell().isHeader()) {
return;
}
if (event.getCell().getColumnIndex() < getFrozenColumnCount()) {
int offset = 0; // apply offset depending on selection column, see #10546
if (getSelectionColumn().isPresent()) {
offset = -1;
}
if (event.getCell().getColumnIndex()+offset < getFrozenColumnCount()) {
return;
}


+ 67
- 0
uitest/src/main/java/com/vaadin/tests/components/grid/GridColumnFrozenColumn.java View File

@@ -0,0 +1,67 @@
package com.vaadin.tests.components.grid;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.vaadin.server.VaadinRequest;
import com.vaadin.shared.ui.ContentMode;
import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.ui.Grid;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;

public class GridColumnFrozenColumn extends AbstractTestUI {
@Override
protected void setup(VaadinRequest request) {
final VerticalLayout layout = new VerticalLayout();
layout.addComponent(new Label(
"Frozen columns can be reordered with unhidden columns with: "
+ com.vaadin.shared.Version.getFullVersion()));
Label issueLabel = new Label(
"Demonstrate problem in <a href=\"https://github.com/vaadin/framework/issues/10546\">grid column frozen column reorder issue with SelectionMode.MULTI</a>");
issueLabel.setContentMode(ContentMode.HTML);
layout.addComponent(issueLabel);

// Create new Grid
Grid<HashMap<String, String>> grid = new Grid<>(
"My test grid to reorder columns");

// Fill the grid with data to sort
List<HashMap<String, String>> rows = new ArrayList<>();
String FIRST = "Frozen Column (Should not be reordered)";
String LAST = "Last Name Column";

// Grid for Vaadin 8 without bean class from
// https://vaadin.com/forum/#!/thread/16038356/16816582
for (int i = 0; i < 20; i++) {
HashMap<String, String> fakeBean = new HashMap<>();
fakeBean.put(FIRST, "first" + i);
fakeBean.put(LAST, "last" + i);
rows.add(fakeBean);
}

grid.setItems(rows);

// Add the columns based on the first row
HashMap<String, String> s = rows.get(0);
for (Map.Entry<String, String> entry : s.entrySet()) {
grid.addColumn(h -> h.get(entry.getKey()))
.setCaption(entry.getKey()).setId(entry.getKey());
}
grid.getColumn(LAST).setHidable(true);
grid.setSelectionMode(Grid.SelectionMode.MULTI);
// without the selector column the issue cannot be observed
// grid.setSelectionMode(SelectionMode.NONE);
grid.setFrozenColumnCount(1);
grid.setColumnReorderingAllowed(true);
grid.setSizeFull();

layout.addComponent(grid);
layout.setMargin(true);
layout.setSpacing(true);

addComponent(layout);
}
}

Loading…
Cancel
Save