Browse Source

Fixes Grid editor visibility inside TabSheet (#10557)

Fixes #10146
Fixes #10543
tags/8.4.0.alpha1
Piotr Wilkin 6 years ago
parent
commit
fd4dedf921

+ 15
- 0
server/src/main/java/com/vaadin/ui/Grid.java View File

@@ -4753,4 +4753,19 @@ public class Grid<T> extends AbstractListing<T> implements HasComponents,
}
}

@Override
public void setVisible(boolean visible) {
if (getEditor().isOpen() && !visible) {
getEditor().cancel();
}
super.setVisible(visible);
}

@Override
public void detach() {
if (getEditor().isOpen()) {
getEditor().cancel();
}
super.detach();
}
}

+ 5
- 0
server/src/main/java/com/vaadin/ui/TabSheet.java View File

@@ -24,6 +24,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Objects;

import org.jsoup.nodes.Attributes;
import org.jsoup.nodes.Element;
@@ -584,6 +585,10 @@ public class TabSheet extends AbstractComponentContainer
*/
private void setSelected(Component component) {
Tab tab = tabs.get(selected);
if (tab != null && !Objects.equals(tab.getComponent(), component) && tab.getComponent() != null && tab.getComponent().isAttached()) {
tab.getComponent().detach();
tab.getComponent().attach(); // ugly hack
}

selected = component;
// Repaint of the selected component is needed as only the selected

+ 2
- 0
uitest/src/main/java/com/vaadin/tests/components/grid/basics/GridBasics.java View File

@@ -792,6 +792,8 @@ public class GridBasics extends AbstractTestUIWithLog {

editorMenu.addItem("Save", i -> grid.getEditor().save());
editorMenu.addItem("Cancel edit", i -> grid.getEditor().cancel());
editorMenu.addItem("Hide grid", i -> grid.setVisible(false));
editorMenu.addItem("Show grid", i -> grid.setVisible(true));

Stream.of(0, 5, 100).forEach(i -> editorMenu.addItem("Edit row " + i,
menuItem -> grid.getEditor().editRow(i)));

+ 12
- 4
uitest/src/test/java/com/vaadin/tests/components/grid/basics/GridEditorTest.java View File

@@ -15,10 +15,6 @@
*/
package com.vaadin.tests.components.grid.basics;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
@@ -32,6 +28,8 @@ import com.vaadin.testbench.TestBenchElement;
import com.vaadin.testbench.elements.GridElement.GridCellElement;
import com.vaadin.testbench.elements.GridElement.GridEditorElement;

import static org.junit.Assert.*;

public abstract class GridEditorTest extends GridBasicsTest {

protected static final org.openqa.selenium.By BY_EDITOR_CANCEL = By
@@ -58,6 +56,16 @@ public abstract class GridEditorTest extends GridBasicsTest {
assertEditorClosed();
}

public void testEditorReopenAfterHide() {
editRow(5);
assertEditorOpen();
selectMenuPath("Component", "Editor", "Hide grid");
selectMenuPath("Component", "Editor", "Show grid");
assertEditorClosed();
editRow(5);
assertEditorOpen();
}

@Test
public void testKeyboardOpeningClosing() {


Loading…
Cancel
Save