Browse Source

Fix to compatibility Grid sorting after removing multi-select. (#12012)

Adapted from V7 fix #10999
tags/8.12.0.alpha1
Anna Koskinen 4 years ago
parent
commit
89fd72edae
No account linked to committer's email address

+ 33
- 17
compatibility-client/src/main/java/com/vaadin/v7/client/widgets/Grid.java View File

private CheckBox selectAllCheckBox; private CheckBox selectAllCheckBox;
private boolean userSelectionAllowed = true; private boolean userSelectionAllowed = true;
private boolean enabled = true; private boolean enabled = true;
private HandlerRegistration headerClickHandler;


SelectionColumn(final Renderer<Boolean> selectColumnRenderer) { SelectionColumn(final Renderer<Boolean> selectColumnRenderer) {
super(selectColumnRenderer); super(selectColumnRenderer);
}); });
selectAllCheckBox.setValue(selected); selectAllCheckBox.setValue(selected);


addHeaderClickHandler(new HeaderClickHandler() {
@Override
public void onClick(GridClickEvent event) {
if (!userSelectionAllowed) {
return;
}

CellReference<?> targetCell = event.getTargetCell();
int defaultRowIndex = getHeader().getRows()
.indexOf(getDefaultHeaderRow());
headerClickHandler = addHeaderClickHandler(
new HeaderClickHandler() {
@Override
public void onClick(GridClickEvent event) {
if (!userSelectionAllowed) {
return;
}


if (targetCell.getColumnIndex() == 0 && targetCell
.getRowIndex() == defaultRowIndex) {
selectAllCheckBox.setValue(
!selectAllCheckBox.getValue(), true);
}
}
});
CellReference<?> targetCell = event
.getTargetCell();
int defaultRowIndex = getHeader().getRows()
.indexOf(getDefaultHeaderRow());

if (targetCell.getColumnIndex() == 0
&& targetCell
.getRowIndex() == defaultRowIndex) {
selectAllCheckBox.setValue(
!selectAllCheckBox.getValue(),
true);
}
}
});


// Select all with space when "select all" cell is active // Select all with space when "select all" cell is active
addHeaderKeyUpHandler(new HeaderKeyUpHandler() { addHeaderKeyUpHandler(new HeaderKeyUpHandler() {
getEscalator().getBody().refreshRows(0, getEscalator().getBody().refreshRows(0,
getEscalator().getBody().getRowCount()); getEscalator().getBody().getRowCount());
} }

private void cleanup() {
if (headerClickHandler != null) {
headerClickHandler.removeHandler();
headerClickHandler = null;
}
}
} }


/** /**
return; return;
} }


if (this.selectionColumn != null) {
selectionColumn.cleanup();
}

if (this.selectColumnRenderer != null) { if (this.selectColumnRenderer != null) {
if (this.selectColumnRenderer instanceof ComplexRenderer) { if (this.selectColumnRenderer instanceof ComplexRenderer) {
// End of Life for the old selection column renderer. // End of Life for the old selection column renderer.

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

package com.vaadin.tests.components.grid;

import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.tests.minitutorials.v7_4.GridExampleHelper;
import com.vaadin.ui.Button;
import com.vaadin.v7.ui.Grid;
import com.vaadin.v7.ui.Grid.MultiSelectionModel;
import com.vaadin.v7.ui.Grid.SelectionMode;

public class CompatibilityGridToggleMultiSelectSort extends AbstractTestUI {

@Override
protected void setup(VaadinRequest request) {
// container with at least 100 rows
final Grid grid = new Grid(GridExampleHelper.createContainer());
grid.setSelectionMode(SelectionMode.MULTI);
addComponent(grid);

Button button = new Button("Toggle multi-select", e -> {
if (grid.getSelectionModel() instanceof MultiSelectionModel) {
grid.setSelectionMode(SelectionMode.SINGLE);
} else {
grid.setSelectionMode(SelectionMode.MULTI);
}
});
addComponent(button);
}

@Override
protected String getTestDescription() {
return "Toggling multi-select off should not break sorting "
+ "first column to both directions.";
}
}

+ 40
- 0
uitest/src/test/java/com/vaadin/tests/components/grid/CompatibilityGridToggleMultiSelectSortTest.java View File

package com.vaadin.tests.components.grid;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.testbench.elements.GridElement;
import com.vaadin.testbench.elements.GridElement.GridCellElement;
import com.vaadin.tests.tb3.SingleBrowserTest;

public class CompatibilityGridToggleMultiSelectSortTest
extends SingleBrowserTest {

@Test
public void sortFirstColumnAfterToggle() {
openTestURL();

GridElement grid = $(GridElement.class).first();
ButtonElement button = $(ButtonElement.class).first();

button.click();

assertEquals("Unexpected initial sorting.", "0",
grid.getCell(0, 0).getText());

GridCellElement headerCell = grid.getHeaderCell(0, 0);

// sort ascending
headerCell.click();
assertEquals("Unexpected first sorting.", "0",
grid.getCell(0, 0).getText());

// sort descending
headerCell.click();
assertEquals("Unexpected second sorting.", "99.9",
grid.getCell(0, 0).getText());
}

}

Loading…
Cancel
Save