From c8d266dccdf31df190c7564858f24965b6a560b3 Mon Sep 17 00:00:00 2001 From: Diego Cardoso Date: Tue, 16 Jan 2024 10:39:27 -0300 Subject: [PATCH 1/3] feat: add target API to SideNavItem --- .../flow/component/sidenav/SideNavItem.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java b/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java index bd4494022f1..e687fdb264b 100644 --- a/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java +++ b/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java @@ -357,6 +357,66 @@ public void setPathAliases(Set pathAliases) { } } + /** + * Gets the target of this item. + * + * @return the target of this item + */ + public String getTarget() { + return getElement().getProperty("target"); + } + + /** + * Where to display the linked URL, as the name for a browsing context. + *

+ * The following keywords have special meanings for where to load the URL: + *

+ *

+ * + * @param target + * the target of this item + */ + public void setTarget(String target) { + if (target == null) { + getElement().removeProperty("target"); + } else { + getElement().setProperty("target", target); + } + } + + /** + * Sets whether the target URL should be opened in a new browser tab. + *

+ * This is a convenience method for setting the target to + * _blank. See {@link #setTarget(String)} for more information. + *

+ * + * @param openInNewBrowserTab true if the target URL should be opened in a + * new browser tab, false otherwise + */ + public void setOpenInNewBrowserTab(boolean openInNewBrowserTab) { + setTarget(openInNewBrowserTab ? "_blank" : null); + } + + /** + * Gets whether the target URL should be opened in a new browser tab. + * + * @return true if the target URL should be opened in a new browser tab, + * false otherwise + */ + public boolean isOpenInNewBrowserTab() { + return "_blank".equals(getTarget()); + } + private Set getPathAliasesFromView(Class view, RouteParameters routeParameters) { RouteAlias[] routeAliases = view.getAnnotationsByType(RouteAlias.class); From 5d6f2d38b9b45be07b4326b5fabbc0f626efff0e Mon Sep 17 00:00:00 2001 From: Diego Cardoso Date: Tue, 16 Jan 2024 10:45:02 -0300 Subject: [PATCH 2/3] test: add tests for new target API in SideNavItem --- .../sidenav/tests/SideNavItemTest.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/test/java/com/vaadin/flow/component/sidenav/tests/SideNavItemTest.java b/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/test/java/com/vaadin/flow/component/sidenav/tests/SideNavItemTest.java index 9d6c20fbd1b..68cc3b9b9f7 100644 --- a/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/test/java/com/vaadin/flow/component/sidenav/tests/SideNavItemTest.java +++ b/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/test/java/com/vaadin/flow/component/sidenav/tests/SideNavItemTest.java @@ -604,6 +604,39 @@ public void setPathAsComponent_aliasWithMissingParameterNotAdded() { }, TestRouteWithAliases.class); } + @Test + public void setTarget_hasTarget() { + sideNavItem.setTarget("_blank"); + Assert.assertEquals("_blank", + sideNavItem.getElement().getProperty("target")); + Assert.assertEquals("_blank", sideNavItem.getTarget()); + } + + @Test + public void targetDefined_setToNull_noTarget() { + sideNavItem.setTarget("_blank"); + sideNavItem.setTarget(null); + Assert.assertFalse(sideNavItem.getElement().hasProperty("target")); + Assert.assertNull(sideNavItem.getTarget()); + } + + @Test + public void setOpenInNewBrowserTab_targetBlankDefinedOnProperty() { + // call setOpenInNewTab and check that getTarget returns "_blank" + sideNavItem.setOpenInNewBrowserTab(true); + Assert.assertEquals("_blank", + sideNavItem.getElement().getProperty("target")); + Assert.assertTrue(sideNavItem.isOpenInNewBrowserTab()); + } + + @Test + public void openInNewBrowserTabDefined_setOpenInNewBrowserTabToFalse() { + sideNavItem.setOpenInNewBrowserTab(true); + sideNavItem.setOpenInNewBrowserTab(false); + Assert.assertFalse(sideNavItem.getElement().hasProperty("target")); + Assert.assertFalse(sideNavItem.isOpenInNewBrowserTab()); + } + private boolean sideNavItemHasLabelElement() { return sideNavItem.getElement().getChildren() .anyMatch(this::isLabelElement); From 58607b34826f3089fdcac71e6d4993cc26e55239 Mon Sep 17 00:00:00 2001 From: Diego Cardoso Date: Tue, 16 Jan 2024 10:57:25 -0300 Subject: [PATCH 3/3] chore: run formatter --- .../java/com/vaadin/flow/component/sidenav/SideNavItem.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java b/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java index e687fdb264b..6bb907a7ac7 100644 --- a/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java +++ b/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java @@ -400,8 +400,9 @@ public void setTarget(String target) { * _blank. See {@link #setTarget(String)} for more information. *

* - * @param openInNewBrowserTab true if the target URL should be opened in a - * new browser tab, false otherwise + * @param openInNewBrowserTab + * true if the target URL should be opened in a new browser tab, + * false otherwise */ public void setOpenInNewBrowserTab(boolean openInNewBrowserTab) { setTarget(openInNewBrowserTab ? "_blank" : null);