From 6f11c44dc9590ee6b4328320c71dc3690206733a Mon Sep 17 00:00:00 2001 From: Martin Vysny Date: Tue, 21 Nov 2023 10:52:55 +0200 Subject: [PATCH 1/4] feat: add ComboBox.setDropdownWidth() and MultiSelectComboBox.setDropdownWidth(). Fixes #2331 --- .../flow/component/combobox/ComboBox.java | 27 ++++++++++++++++++ .../combobox/MultiSelectComboBox.java | 28 ++++++++++++++++++- .../flow/component/combobox/ComboBoxTest.java | 18 ++++++++++++ .../combobox/MultiSelectComboBoxTest.java | 18 ++++++++++++ 4 files changed, 90 insertions(+), 1 deletion(-) diff --git a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/ComboBox.java b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/ComboBox.java index 89e40857505..b206b8cc92c 100644 --- a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/ComboBox.java +++ b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/ComboBox.java @@ -20,7 +20,9 @@ import java.util.Objects; import java.util.stream.Stream; +import com.vaadin.flow.component.HasSize; import com.vaadin.flow.component.Tag; +import com.vaadin.flow.component.Unit; import com.vaadin.flow.component.dependency.JsModule; import com.vaadin.flow.component.dependency.NpmPackage; import com.vaadin.flow.component.shared.HasPrefix; @@ -326,4 +328,29 @@ protected boolean isSelected(T item) { public T getEmptyValue() { return null; } + + /** + * Sets the dropdown width. + * + * @param width + * the new dropdown width. Pass in null to set the dropdown width + * back to the default value. + */ + public void setDropdownWidth(String width) { + getStyle().set("--vaadin-combo-box-overlay-width", width); + } + + /** + * Sets the dropdown width. Negative number implies unspecified size (the + * dropdown width is reverted back to the default value). + * + * @param width + * the width of the dropdown. + * @param unit + * the unit used for the dropdown. + */ + public void setDropdownWidth(float width, Unit unit) { + Objects.requireNonNull(unit, "Unit can not be null"); + setDropdownWidth(HasSize.getCssSize(width, unit)); + } } diff --git a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/MultiSelectComboBox.java b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/MultiSelectComboBox.java index a2e5c3eee1a..5220193bb35 100644 --- a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/MultiSelectComboBox.java +++ b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/MultiSelectComboBox.java @@ -15,11 +15,12 @@ */ package com.vaadin.flow.component.combobox; -import com.vaadin.flow.component.AbstractField; import com.vaadin.flow.component.AttachEvent; import com.vaadin.flow.component.ComponentEventListener; import com.vaadin.flow.component.ComponentUtil; +import com.vaadin.flow.component.HasSize; import com.vaadin.flow.component.Tag; +import com.vaadin.flow.component.Unit; import com.vaadin.flow.component.dependency.JsModule; import com.vaadin.flow.component.dependency.NpmPackage; import com.vaadin.flow.component.shared.HasThemeVariant; @@ -559,4 +560,29 @@ private void removeNullValuesFromJsonObject(JsonObject jsonObject) { } } } + + /** + * Sets the dropdown width. + * + * @param width + * the new dropdown width. Pass in null to set the dropdown width + * back to the default value. + */ + public void setDropdownWidth(String width) { + getStyle().set("--vaadin-multi-select-combo-box-overlay-width", width); + } + + /** + * Sets the dropdown width. Negative number implies unspecified size (the + * dropdown width is reverted back to the default value). + * + * @param width + * the width of the dropdown. + * @param unit + * the unit used for the dropdown. + */ + public void setDropdownWidth(float width, Unit unit) { + Objects.requireNonNull(unit, "Unit can not be null"); + setDropdownWidth(HasSize.getCssSize(width, unit)); + } } diff --git a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/ComboBoxTest.java b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/ComboBoxTest.java index 26d097ee5a9..be91d456866 100644 --- a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/ComboBoxTest.java +++ b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/ComboBoxTest.java @@ -21,6 +21,7 @@ import com.vaadin.flow.component.Tag; import com.vaadin.flow.component.Text; import com.vaadin.flow.component.UI; +import com.vaadin.flow.component.Unit; import com.vaadin.flow.component.shared.InputField; import com.vaadin.flow.data.binder.Binder; import com.vaadin.flow.di.Instantiator; @@ -210,6 +211,23 @@ public void implementsInputField() { comboBox instanceof InputField, String>, String>); } + @Test + public void setDropdownWidth_smokeTests() { + ComboBox comboBox = new ComboBox<>(); + comboBox.setDropdownWidth(null); + Assert.assertNull( + comboBox.getStyle().get("--vaadin-combo-box-overlay-width")); + comboBox.setDropdownWidth("30em"); + Assert.assertEquals("30em", + comboBox.getStyle().get("--vaadin-combo-box-overlay-width")); + comboBox.setDropdownWidth(-1, Unit.EM); + Assert.assertNull( + comboBox.getStyle().get("--vaadin-combo-box-overlay-width")); + comboBox.setDropdownWidth(100, Unit.PIXELS); + Assert.assertEquals("100.0px", + comboBox.getStyle().get("--vaadin-combo-box-overlay-width")); + } + @Tag("div") private static class TestPrefix extends Component { } diff --git a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/MultiSelectComboBoxTest.java b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/MultiSelectComboBoxTest.java index 0077a9f3fa3..67c509b0144 100644 --- a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/MultiSelectComboBoxTest.java +++ b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/MultiSelectComboBoxTest.java @@ -17,6 +17,7 @@ import com.vaadin.flow.component.AbstractField; import com.vaadin.flow.component.HasValue; +import com.vaadin.flow.component.Unit; import com.vaadin.flow.component.shared.InputField; import elemental.json.JsonArray; import org.junit.Assert; @@ -321,4 +322,21 @@ public void setSelectedItemsOnTop() { Assert.assertTrue( comboBox.getElement().getProperty("selectedItemsOnTop", true)); } + + @Test + public void setDropdownWidth_smokeTests() { + MultiSelectComboBox comboBox = new MultiSelectComboBox<>(); + comboBox.setDropdownWidth(null); + Assert.assertNull(comboBox.getStyle() + .get("--vaadin-multi-select-combo-box-overlay-width")); + comboBox.setDropdownWidth("30em"); + Assert.assertEquals("30em", comboBox.getStyle() + .get("--vaadin-multi-select-combo-box-overlay-width")); + comboBox.setDropdownWidth(-1, Unit.EM); + Assert.assertNull(comboBox.getStyle() + .get("--vaadin-multi-select-combo-box-overlay-width")); + comboBox.setDropdownWidth(100, Unit.PIXELS); + Assert.assertEquals("100.0px", comboBox.getStyle() + .get("--vaadin-multi-select-combo-box-overlay-width")); + } } From cc2fa83741753a434ee2e1cfcd18f811a2fc0703 Mon Sep 17 00:00:00 2001 From: Martin Vysny Date: Tue, 28 Nov 2023 15:35:55 +0200 Subject: [PATCH 2/4] refactoring: rename setDropdownWidth() to setOverlayWidth() --- .../com/vaadin/flow/component/combobox/ComboBox.java | 12 ++++++------ .../vaadin/flow/component/combobox/ComboBoxTest.java | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/ComboBox.java b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/ComboBox.java index b206b8cc92c..fbc59822c3a 100644 --- a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/ComboBox.java +++ b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/ComboBox.java @@ -330,27 +330,27 @@ public T getEmptyValue() { } /** - * Sets the dropdown width. + * Sets the dropdown overlay width. * * @param width * the new dropdown width. Pass in null to set the dropdown width * back to the default value. */ - public void setDropdownWidth(String width) { + public void setOverlayWidth(String width) { getStyle().set("--vaadin-combo-box-overlay-width", width); } /** - * Sets the dropdown width. Negative number implies unspecified size (the - * dropdown width is reverted back to the default value). + * Sets the dropdown overlay width. Negative number implies unspecified size + * (the dropdown width is reverted back to the default value). * * @param width * the width of the dropdown. * @param unit * the unit used for the dropdown. */ - public void setDropdownWidth(float width, Unit unit) { + public void setOverlayWidth(float width, Unit unit) { Objects.requireNonNull(unit, "Unit can not be null"); - setDropdownWidth(HasSize.getCssSize(width, unit)); + setOverlayWidth(HasSize.getCssSize(width, unit)); } } diff --git a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/ComboBoxTest.java b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/ComboBoxTest.java index be91d456866..d9e7a7fee26 100644 --- a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/ComboBoxTest.java +++ b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/ComboBoxTest.java @@ -212,18 +212,18 @@ public void implementsInputField() { } @Test - public void setDropdownWidth_smokeTests() { + public void setOverlayWidth_smokeTests() { ComboBox comboBox = new ComboBox<>(); - comboBox.setDropdownWidth(null); + comboBox.setOverlayWidth(null); Assert.assertNull( comboBox.getStyle().get("--vaadin-combo-box-overlay-width")); - comboBox.setDropdownWidth("30em"); + comboBox.setOverlayWidth("30em"); Assert.assertEquals("30em", comboBox.getStyle().get("--vaadin-combo-box-overlay-width")); - comboBox.setDropdownWidth(-1, Unit.EM); + comboBox.setOverlayWidth(-1, Unit.EM); Assert.assertNull( comboBox.getStyle().get("--vaadin-combo-box-overlay-width")); - comboBox.setDropdownWidth(100, Unit.PIXELS); + comboBox.setOverlayWidth(100, Unit.PIXELS); Assert.assertEquals("100.0px", comboBox.getStyle().get("--vaadin-combo-box-overlay-width")); } From 1c10673bf4ad43d88d50f9bb8da0c5950a4001b4 Mon Sep 17 00:00:00 2001 From: Martin Vysny Date: Tue, 28 Nov 2023 15:38:14 +0200 Subject: [PATCH 3/4] refactoring: rename setDropdownWidth() to setOverlayWidth() --- .../component/combobox/MultiSelectComboBox.java | 13 ++++++------- .../component/combobox/MultiSelectComboBoxTest.java | 10 +++++----- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/MultiSelectComboBox.java b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/MultiSelectComboBox.java index 311c3eb96c7..e138d61cedd 100644 --- a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/MultiSelectComboBox.java +++ b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/main/java/com/vaadin/flow/component/combobox/MultiSelectComboBox.java @@ -24,7 +24,6 @@ import com.vaadin.flow.component.dependency.JsModule; import com.vaadin.flow.component.dependency.NpmPackage; import com.vaadin.flow.component.shared.HasThemeVariant; -import com.vaadin.flow.component.shared.InputField; import com.vaadin.flow.data.provider.DataCommunicator; import com.vaadin.flow.data.provider.DataKeyMapper; import com.vaadin.flow.data.provider.IdentifierProviderChangeEvent; @@ -562,27 +561,27 @@ private void removeNullValuesFromJsonObject(JsonObject jsonObject) { } /** - * Sets the dropdown width. + * Sets the dropdown overlay width. * * @param width * the new dropdown width. Pass in null to set the dropdown width * back to the default value. */ - public void setDropdownWidth(String width) { + public void setOverlayWidth(String width) { getStyle().set("--vaadin-multi-select-combo-box-overlay-width", width); } /** - * Sets the dropdown width. Negative number implies unspecified size (the - * dropdown width is reverted back to the default value). + * Sets the dropdown overlay width. Negative number implies unspecified size + * (the dropdown width is reverted back to the default value). * * @param width * the width of the dropdown. * @param unit * the unit used for the dropdown. */ - public void setDropdownWidth(float width, Unit unit) { + public void setOverlayWidth(float width, Unit unit) { Objects.requireNonNull(unit, "Unit can not be null"); - setDropdownWidth(HasSize.getCssSize(width, unit)); + setOverlayWidth(HasSize.getCssSize(width, unit)); } } diff --git a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/MultiSelectComboBoxTest.java b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/MultiSelectComboBoxTest.java index 67c509b0144..86b576be56b 100644 --- a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/MultiSelectComboBoxTest.java +++ b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/MultiSelectComboBoxTest.java @@ -324,18 +324,18 @@ public void setSelectedItemsOnTop() { } @Test - public void setDropdownWidth_smokeTests() { + public void setOverlayWidth_smokeTests() { MultiSelectComboBox comboBox = new MultiSelectComboBox<>(); - comboBox.setDropdownWidth(null); + comboBox.setOverlayWidth(null); Assert.assertNull(comboBox.getStyle() .get("--vaadin-multi-select-combo-box-overlay-width")); - comboBox.setDropdownWidth("30em"); + comboBox.setOverlayWidth("30em"); Assert.assertEquals("30em", comboBox.getStyle() .get("--vaadin-multi-select-combo-box-overlay-width")); - comboBox.setDropdownWidth(-1, Unit.EM); + comboBox.setOverlayWidth(-1, Unit.EM); Assert.assertNull(comboBox.getStyle() .get("--vaadin-multi-select-combo-box-overlay-width")); - comboBox.setDropdownWidth(100, Unit.PIXELS); + comboBox.setOverlayWidth(100, Unit.PIXELS); Assert.assertEquals("100.0px", comboBox.getStyle() .get("--vaadin-multi-select-combo-box-overlay-width")); } From cbfddc8e07e5b7b95ee0c5e8fe464098e7922389 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sascha=20I=C3=9Fbr=C3=BCcker?= Date: Mon, 15 Jan 2024 14:48:24 +0100 Subject: [PATCH 4/4] align test names --- .../java/com/vaadin/flow/component/combobox/ComboBoxTest.java | 2 +- .../vaadin/flow/component/combobox/MultiSelectComboBoxTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/ComboBoxTest.java b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/ComboBoxTest.java index 732f64bb0c4..83a3b1bc26a 100644 --- a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/ComboBoxTest.java +++ b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/ComboBoxTest.java @@ -212,7 +212,7 @@ public void implementsInputField() { } @Test - public void setOverlayWidth_smokeTests() { + public void setOverlayWidth() { ComboBox comboBox = new ComboBox<>(); comboBox.setOverlayWidth(null); Assert.assertNull( diff --git a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/MultiSelectComboBoxTest.java b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/MultiSelectComboBoxTest.java index 41b52643bf6..135348aad76 100644 --- a/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/MultiSelectComboBoxTest.java +++ b/vaadin-combo-box-flow-parent/vaadin-combo-box-flow/src/test/java/com/vaadin/flow/component/combobox/MultiSelectComboBoxTest.java @@ -339,7 +339,7 @@ public void setKeepFilter() { } @Test - public void setOverlayWidth_smokeTests() { + public void setOverlayWidth() { MultiSelectComboBox comboBox = new MultiSelectComboBox<>(); comboBox.setOverlayWidth(null); Assert.assertNull(comboBox.getStyle()