diff --git a/src/main/java/de/assecutor/votianlt/pages/base/ui/view/MainLayout.java b/src/main/java/de/assecutor/votianlt/pages/base/ui/view/MainLayout.java index a5d5fd0..8552ee8 100644 --- a/src/main/java/de/assecutor/votianlt/pages/base/ui/view/MainLayout.java +++ b/src/main/java/de/assecutor/votianlt/pages/base/ui/view/MainLayout.java @@ -25,6 +25,7 @@ import de.assecutor.votianlt.model.UserInvoiceData; import de.assecutor.votianlt.pages.service.UserInvoiceDataService; import de.assecutor.votianlt.pages.view.EditProfileView; import de.assecutor.votianlt.security.SecurityService; +import de.assecutor.votianlt.service.MessageService; import static com.vaadin.flow.theme.lumo.LumoUtility.*; @@ -35,13 +36,15 @@ public final class MainLayout extends AppLayout { private final SecurityService securityService; private final UserInvoiceDataService userInvoiceDataService; + private final MessageService messageService; private Div headerRef; private Scroller navRef; private Component userMenuRef; - public MainLayout(SecurityService securityService, UserInvoiceDataService userInvoiceDataService) { + public MainLayout(SecurityService securityService, UserInvoiceDataService userInvoiceDataService, MessageService messageService) { this.securityService = securityService; this.userInvoiceDataService = userInvoiceDataService; + this.messageService = messageService; setPrimarySection(Section.DRAWER); // Always build the drawer; keep references and toggle visibility on attach and @@ -148,11 +151,38 @@ public final class MainLayout extends AppLayout { } private SideNavItem createSideNavItem(MenuEntry menuEntry) { + SideNavItem item; if (menuEntry.icon() != null) { - return new SideNavItem(menuEntry.title(), menuEntry.path(), new Icon(menuEntry.icon())); + item = new SideNavItem(menuEntry.title(), menuEntry.path(), new Icon(menuEntry.icon())); } else { - return new SideNavItem(menuEntry.title(), menuEntry.path()); + item = new SideNavItem(menuEntry.title(), menuEntry.path()); } + + // Add badge for "Nachrichten" menu item showing unread message count + if ("Nachrichten".equals(menuEntry.title())) { + try { + // Test: Show badge with 10 unread messages + long unreadCount = 10; + + // Create blue badge with white text (same color as UserMessagesView) + Span badge = new Span(String.valueOf(unreadCount)); + badge.getElement().getThemeList().add("badge"); + badge.getStyle().set("background-color", "var(--lumo-primary-color)"); + badge.getStyle().set("color", "#ffffff"); + badge.getStyle().set("border-radius", "12px"); + badge.getStyle().set("padding", "2px 8px"); + badge.getStyle().set("font-size", "12px"); + badge.getStyle().set("font-weight", "bold"); + badge.getStyle().set("min-width", "20px"); + badge.getStyle().set("text-align", "center"); + + item.setSuffixComponent(badge); + } catch (Exception e) { + // If there's an error, just don't show the badge + } + } + + return item; } private Component createUserMenu() {