diff --git a/vaadin-dashboard-flow-parent/vaadin-dashboard-flow-integration-tests/src/main/java/com/vaadin/flow/component/dashboard/tests/DashboardPage.java b/vaadin-dashboard-flow-parent/vaadin-dashboard-flow-integration-tests/src/main/java/com/vaadin/flow/component/dashboard/tests/DashboardPage.java index 12a98e075e3..d9730dc64b7 100644 --- a/vaadin-dashboard-flow-parent/vaadin-dashboard-flow-integration-tests/src/main/java/com/vaadin/flow/component/dashboard/tests/DashboardPage.java +++ b/vaadin-dashboard-flow-parent/vaadin-dashboard-flow-integration-tests/src/main/java/com/vaadin/flow/component/dashboard/tests/DashboardPage.java @@ -38,6 +38,8 @@ public DashboardPage() { Dashboard dashboard = new Dashboard(); dashboard.add(widget1, widget2, widget3); + dashboard.setMaximumColumnCount(3); + NativeButton addWidgetAtIndex1 = new NativeButton( "Add widget at index 1"); addWidgetAtIndex1.addClickListener(click -> { @@ -69,7 +71,19 @@ public DashboardPage() { removeAllWidgets.addClickListener(click -> dashboard.removeAll()); removeAllWidgets.setId("remove-all-widgets"); + NativeButton setMaximumColumnCount1 = new NativeButton( + "Set maximum column count 1"); + setMaximumColumnCount1 + .addClickListener(click -> dashboard.setMaximumColumnCount(1)); + setMaximumColumnCount1.setId("set-maximum-column-count-1"); + + NativeButton setMaximumColumnCountNull = new NativeButton( + "Set maximum column count null"); + setMaximumColumnCountNull.addClickListener( + click -> dashboard.setMaximumColumnCount(null)); + setMaximumColumnCountNull.setId("set-maximum-column-count-null"); + add(addWidgetAtIndex1, removeFirstAndLastWidgets, removeAllWidgets, - dashboard); + setMaximumColumnCount1, setMaximumColumnCountNull, dashboard); } } diff --git a/vaadin-dashboard-flow-parent/vaadin-dashboard-flow-integration-tests/src/test/java/com/vaadin/flow/component/dashboard/tests/DashboardIT.java b/vaadin-dashboard-flow-parent/vaadin-dashboard-flow-integration-tests/src/test/java/com/vaadin/flow/component/dashboard/tests/DashboardIT.java index 68c20102e7b..b6b5fc863c1 100644 --- a/vaadin-dashboard-flow-parent/vaadin-dashboard-flow-integration-tests/src/test/java/com/vaadin/flow/component/dashboard/tests/DashboardIT.java +++ b/vaadin-dashboard-flow-parent/vaadin-dashboard-flow-integration-tests/src/test/java/com/vaadin/flow/component/dashboard/tests/DashboardIT.java @@ -58,6 +58,33 @@ public void removeAllWidgets_widgetsAreCorrectlyRemoved() { assertWidgetsByTitle(); } + @Test + public void changeMaximumColumnCountTo1_widgetsShouldBeOnTheSameColumn() { + List widgets = dashboardElement.getWidgets(); + // The first two widgets should initially be on the same horizontal line + int yOfWidget1 = widgets.get(0).getLocation().getY(); + Assert.assertEquals(yOfWidget1, widgets.get(1).getLocation().getY()); + + clickElementWithJs("set-maximum-column-count-1"); + // The first two widgets should be on the same vertical line + int xOfWidget1 = widgets.get(0).getLocation().getX(); + Assert.assertEquals(xOfWidget1, widgets.get(1).getLocation().getX()); + } + + @Test + public void changeMaximumColumnCountToNull_widgetsShouldBeOnTheSameRow() { + clickElementWithJs("set-maximum-column-count-1"); + List widgets = dashboardElement.getWidgets(); + // The first two widgets should be on the same vertical line + int xOfWidget1 = widgets.get(0).getLocation().getX(); + Assert.assertEquals(xOfWidget1, widgets.get(1).getLocation().getX()); + + clickElementWithJs("set-maximum-column-count-null"); + // The widgets should be on the same horizontal line + int yOfWidget1 = widgets.get(0).getLocation().getY(); + Assert.assertEquals(yOfWidget1, widgets.get(1).getLocation().getY()); + } + private void assertWidgetsByTitle(String... expectedWidgetTitles) { List widgets = dashboardElement.getWidgets(); List widgetTitles = widgets.stream() diff --git a/vaadin-dashboard-flow-parent/vaadin-dashboard-flow/src/main/java/com/vaadin/flow/component/dashboard/Dashboard.java b/vaadin-dashboard-flow-parent/vaadin-dashboard-flow/src/main/java/com/vaadin/flow/component/dashboard/Dashboard.java index b7526b27ba3..b6e4aed2736 100644 --- a/vaadin-dashboard-flow-parent/vaadin-dashboard-flow/src/main/java/com/vaadin/flow/component/dashboard/Dashboard.java +++ b/vaadin-dashboard-flow-parent/vaadin-dashboard-flow/src/main/java/com/vaadin/flow/component/dashboard/Dashboard.java @@ -143,6 +143,28 @@ public void removeAll() { updateClient(); } + /** + * Returns the maximum column count of the dashboard. + * + * @return the maximum column count of the dashboard + */ + public Integer getMaximumColumnCount() { + String maxColCount = getStyle().get("--vaadin-dashboard-col-max-count"); + return maxColCount == null ? null : Integer.valueOf(maxColCount); + } + + /** + * Sets the maximum column count of the dashboard. + * + * @param maxCount + * the new maximum column count. Pass in {@code null} to set the + * maximum column count back to the default value. + */ + public void setMaximumColumnCount(Integer maxColCount) { + getStyle().set("--vaadin-dashboard-col-max-count", + maxColCount == null ? null : String.valueOf(maxColCount)); + } + @Override public Stream getChildren() { return getWidgets().stream().map(Component.class::cast); diff --git a/vaadin-dashboard-flow-parent/vaadin-dashboard-flow/src/test/java/com/vaadin/flow/component/dashboard/tests/DashboardTest.java b/vaadin-dashboard-flow-parent/vaadin-dashboard-flow/src/test/java/com/vaadin/flow/component/dashboard/tests/DashboardTest.java index 24c2af1d691..4851409abf5 100644 --- a/vaadin-dashboard-flow-parent/vaadin-dashboard-flow/src/test/java/com/vaadin/flow/component/dashboard/tests/DashboardTest.java +++ b/vaadin-dashboard-flow-parent/vaadin-dashboard-flow/src/test/java/com/vaadin/flow/component/dashboard/tests/DashboardTest.java @@ -211,6 +211,45 @@ public void addWidgetToAnotherDashboard_widgetIsMoved() { assertWidgets(newDashboard, widget); } + @Test + public void setMaximumColumnCount_valueIsCorrectlySet() { + String propertyName = "--vaadin-dashboard-col-max-count"; + int valueToSet = 5; + Assert.assertNull(dashboard.getStyle().get(propertyName)); + dashboard.setMaximumColumnCount(valueToSet); + Assert.assertEquals(String.valueOf(valueToSet), + dashboard.getStyle().get(propertyName)); + dashboard.setMaximumColumnCount(null); + Assert.assertNull(dashboard.getStyle().get(propertyName)); + } + + @Test + public void setMaximumColumnCountNull_propertyIsRemoved() { + dashboard.setMaximumColumnCount(5); + dashboard.setMaximumColumnCount(null); + Assert.assertNull( + dashboard.getStyle().get("--vaadin-dashboard-col-max-count")); + } + + @Test + public void defaultMaximumColumnCountValueIsCorrectlyRetrieved() { + Assert.assertNull(dashboard.getMaximumColumnCount()); + } + + @Test + public void setMaximumColumnCount_valueIsCorrectlyRetrieved() { + Integer valueToSet = 5; + dashboard.setMaximumColumnCount(valueToSet); + Assert.assertEquals(valueToSet, dashboard.getMaximumColumnCount()); + } + + @Test + public void setMaximumColumnCountNull_valueIsCorrectlyRetrieved() { + dashboard.setMaximumColumnCount(5); + dashboard.setMaximumColumnCount(null); + Assert.assertNull(dashboard.getMaximumColumnCount()); + } + private void fakeClientCommunication() { ui.getInternals().getStateTree().runExecutionsBeforeClientResponse(); ui.getInternals().getStateTree().collectChanges(ignore -> {