@@ -1,15 +1,21 @@
|
||||
package com.example.views;
|
||||
|
||||
import com.example.js.CommonJS;
|
||||
import com.vaadin.flow.component.UI;
|
||||
import com.vaadin.flow.component.applayout.AppLayout;
|
||||
import com.vaadin.flow.component.applayout.DrawerToggle;
|
||||
import com.vaadin.flow.component.button.Button;
|
||||
import com.vaadin.flow.component.button.ButtonVariant;
|
||||
import com.vaadin.flow.component.html.Span;
|
||||
import com.vaadin.flow.component.icon.VaadinIcon;
|
||||
import com.vaadin.flow.component.menubar.MenuBar;
|
||||
import com.vaadin.flow.component.menubar.MenuBarVariant;
|
||||
import com.vaadin.flow.component.sidenav.SideNav;
|
||||
import com.vaadin.flow.component.sidenav.SideNavItem;
|
||||
import com.vaadin.flow.router.Layout;
|
||||
import com.vaadin.flow.server.VaadinSession;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
@Layout
|
||||
public class MainLayout extends AppLayout {
|
||||
@@ -19,32 +25,53 @@ public class MainLayout extends AppLayout {
|
||||
public MainLayout() {
|
||||
DrawerToggle toggle = new DrawerToggle();
|
||||
|
||||
Span title = new Span("Chart App");
|
||||
Span title = new Span(getTranslation("app.title"));
|
||||
title.addClassName("dialect-title");
|
||||
|
||||
Span spacer = new Span();
|
||||
spacer.getStyle().set("flex-grow", "1");
|
||||
|
||||
MenuBar languageMenu = buildLanguageMenu();
|
||||
|
||||
themeToggle.addThemeVariants(ButtonVariant.TERTIARY, ButtonVariant.LUMO_ICON);
|
||||
themeToggle.setAriaLabel("Farbschema wechseln");
|
||||
themeToggle.setAriaLabel(getTranslation("action.themeToggle"));
|
||||
themeToggle.addClickListener(e ->
|
||||
getElement().executeJs(CommonJS.TOGGLE_THEME_JS).then(String.class, this::applyIconFor));
|
||||
|
||||
addToNavbar(toggle, title, spacer, themeToggle);
|
||||
addToNavbar(toggle, title, spacer, languageMenu, themeToggle);
|
||||
|
||||
getElement().executeJs(CommonJS.INIT_THEME_JS).then(String.class, this::applyIconFor);
|
||||
|
||||
SideNav nav = new SideNav();
|
||||
nav.addItem(new SideNavItem("Dashboard", DashboardView.class,
|
||||
nav.addItem(new SideNavItem(getTranslation("nav.dashboard"), DashboardView.class,
|
||||
VaadinIcon.DASHBOARD.create()));
|
||||
nav.addItem(new SideNavItem("Formular", FormView.class,
|
||||
nav.addItem(new SideNavItem(getTranslation("nav.form"), FormView.class,
|
||||
VaadinIcon.FORM.create()));
|
||||
nav.addItem(new SideNavItem("Tabelle", TableView.class,
|
||||
nav.addItem(new SideNavItem(getTranslation("nav.table"), TableView.class,
|
||||
VaadinIcon.TABLE.create()));
|
||||
|
||||
addToDrawer(nav);
|
||||
}
|
||||
|
||||
private MenuBar buildLanguageMenu() {
|
||||
MenuBar menuBar = new MenuBar();
|
||||
menuBar.addThemeVariants(MenuBarVariant.LUMO_TERTIARY_INLINE);
|
||||
|
||||
var root = menuBar.addItem(VaadinIcon.GLOBE_WIRE.create());
|
||||
root.setAriaLabel(getTranslation("action.language"));
|
||||
|
||||
root.getSubMenu().addItem(getTranslation("lang.de"), e -> switchLanguage(Locale.GERMAN));
|
||||
root.getSubMenu().addItem(getTranslation("lang.en"), e -> switchLanguage(Locale.ENGLISH));
|
||||
root.getSubMenu().addItem(getTranslation("lang.es"), e -> switchLanguage(Locale.of("es")));
|
||||
|
||||
return menuBar;
|
||||
}
|
||||
|
||||
private void switchLanguage(Locale locale) {
|
||||
VaadinSession.getCurrent().setLocale(locale);
|
||||
UI.getCurrent().getPage().reload();
|
||||
}
|
||||
|
||||
private void applyIconFor(String theme) {
|
||||
themeToggle.setIcon("dark".equals(theme) ? VaadinIcon.SUN_O.create() : VaadinIcon.MOON.create());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user