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) {