From 2145c39d37624f7c9bad25ca2ae1dc5956db7fe0 Mon Sep 17 00:00:00 2001 From: Andrey Terentev <54776640+ScarletRedMan@users.noreply.github.com> Date: Wed, 17 Jan 2024 00:22:53 +0700 Subject: [PATCH] Added side navigation bar and header (#9) --- .../dragonestia/picker/cp/page/HomePage.java | 10 +---- .../picker/cp/page/MainLayout.java | 38 +++++++++++++++++++ .../picker/cp/page/NodeDetailsPage.java | 2 +- .../dragonestia/picker/cp/page/NodesPage.java | 2 +- .../picker/cp/page/RoomDetailsPage.java | 2 +- .../picker/cp/page/plug/ErrorPlug.java | 3 ++ 6 files changed, 46 insertions(+), 11 deletions(-) create mode 100644 control-panel/src/main/java/ru/dragonestia/picker/cp/page/MainLayout.java diff --git a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/HomePage.java b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/HomePage.java index 7487181..9f6109f 100644 --- a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/HomePage.java +++ b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/HomePage.java @@ -4,10 +4,9 @@ import com.vaadin.flow.component.html.H1; import com.vaadin.flow.component.html.Paragraph; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.router.*; -import ru.dragonestia.picker.api.exception.NodeNotFoundException; -@Route("/") -public class HomePage extends VerticalLayout implements BeforeEnterObserver { +@Route(value = "/", layout = MainLayout.class) +public class HomePage extends VerticalLayout { public HomePage() { super(); @@ -15,9 +14,4 @@ public class HomePage extends VerticalLayout implements BeforeEnterObserver { add(new H1("Hello world!")); add(new Paragraph("Hello world!")); } - - @Override - public void beforeEnter(BeforeEnterEvent beforeEnterEvent) { - throw new NodeNotFoundException("gdfsg"); - } } diff --git a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/MainLayout.java b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/MainLayout.java new file mode 100644 index 0000000..6b10c3e --- /dev/null +++ b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/MainLayout.java @@ -0,0 +1,38 @@ +package ru.dragonestia.picker.cp.page; + +import com.vaadin.flow.component.Component; +import com.vaadin.flow.component.Html; +import com.vaadin.flow.component.applayout.AppLayout; +import com.vaadin.flow.component.applayout.DrawerToggle; +import com.vaadin.flow.component.icon.VaadinIcon; +import com.vaadin.flow.component.orderedlayout.HorizontalLayout; +import com.vaadin.flow.component.orderedlayout.Scroller; +import com.vaadin.flow.component.sidenav.SideNav; +import com.vaadin.flow.component.sidenav.SideNavItem; + +public class MainLayout extends AppLayout { + + public MainLayout() { + var toggle = new DrawerToggle(); + var scroller = new Scroller(createSideNav()); + + addToDrawer(scroller); + addToNavbar(toggle, createLogo()); + } + + private Component createLogo() { + var layout = new HorizontalLayout(); + layout.setPadding(true); + layout.add(new Html("

RoomPicker!

")); + return layout; + } + + private SideNav createSideNav() { + var nav = new SideNav(); + nav.addItem(new SideNavItem("Nodes list", NodesPage.class, VaadinIcon.FOLDER_O.create())); + nav.addItem(new SideNavItem("Search users", HomePage.class, VaadinIcon.SEARCH.create())); + nav.addItem(new SideNavItem("Documentation", "https://github.com/ScarletRedMan/RoomPicker", VaadinIcon.BOOK.create())); + nav.addItem(new SideNavItem("Sign-out", HomePage.class, VaadinIcon.SIGN_OUT.create())); + return nav; + } +} diff --git a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/NodeDetailsPage.java b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/NodeDetailsPage.java index 586898e..ef0a278 100644 --- a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/NodeDetailsPage.java +++ b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/NodeDetailsPage.java @@ -27,7 +27,7 @@ import java.util.List; @Getter @RequiredArgsConstructor @PageTitle("Rooms") -@Route("/nodes/:nodeId") +@Route(value = "/nodes/:nodeId", layout = MainLayout.class) public class NodeDetailsPage extends VerticalLayout implements BeforeEnterObserver { private final NodeRepository nodeRepository; diff --git a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/NodesPage.java b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/NodesPage.java index d894490..76c4fbe 100644 --- a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/NodesPage.java +++ b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/NodesPage.java @@ -16,7 +16,7 @@ import ru.dragonestia.picker.cp.component.RegisterNode; @Log4j2 @Getter @PageTitle("Nodes") -@Route("/nodes") +@Route(value = "/nodes", layout = MainLayout.class) public class NodesPage extends VerticalLayout { private final NodeRepository nodeRepository; diff --git a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/RoomDetailsPage.java b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/RoomDetailsPage.java index 6082473..7a39bae 100644 --- a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/RoomDetailsPage.java +++ b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/RoomDetailsPage.java @@ -33,7 +33,7 @@ import java.util.concurrent.atomic.AtomicBoolean; @RequiredArgsConstructor @PageTitle("Room details") -@Route("/nodes/:nodeId/rooms/:roomId") +@Route(value = "/nodes/:nodeId/rooms/:roomId", layout = MainLayout.class) public class RoomDetailsPage extends VerticalLayout implements BeforeEnterObserver { private final NodeRepository nodeRepository; diff --git a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/plug/ErrorPlug.java b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/plug/ErrorPlug.java index fe474d7..955f937 100644 --- a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/plug/ErrorPlug.java +++ b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/plug/ErrorPlug.java @@ -3,8 +3,11 @@ package ru.dragonestia.picker.cp.page.plug; import com.vaadin.flow.component.Html; import com.vaadin.flow.component.html.H1; import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import com.vaadin.flow.router.ParentLayout; import ru.dragonestia.picker.cp.component.NavPath; +import ru.dragonestia.picker.cp.page.MainLayout; +@ParentLayout(MainLayout.class) public abstract class ErrorPlug extends VerticalLayout { public void init(NavPath path, String title, String description) {