Erweiterungen

This commit is contained in:
2025-10-02 17:30:37 +02:00
parent 5aabb10b58
commit b704f58683

View File

@@ -25,6 +25,7 @@ import de.assecutor.votianlt.model.UserInvoiceData;
import de.assecutor.votianlt.pages.service.UserInvoiceDataService; import de.assecutor.votianlt.pages.service.UserInvoiceDataService;
import de.assecutor.votianlt.pages.view.EditProfileView; import de.assecutor.votianlt.pages.view.EditProfileView;
import de.assecutor.votianlt.security.SecurityService; import de.assecutor.votianlt.security.SecurityService;
import de.assecutor.votianlt.service.MessageService;
import static com.vaadin.flow.theme.lumo.LumoUtility.*; import static com.vaadin.flow.theme.lumo.LumoUtility.*;
@@ -35,13 +36,15 @@ public final class MainLayout extends AppLayout {
private final SecurityService securityService; private final SecurityService securityService;
private final UserInvoiceDataService userInvoiceDataService; private final UserInvoiceDataService userInvoiceDataService;
private final MessageService messageService;
private Div headerRef; private Div headerRef;
private Scroller navRef; private Scroller navRef;
private Component userMenuRef; private Component userMenuRef;
public MainLayout(SecurityService securityService, UserInvoiceDataService userInvoiceDataService) { public MainLayout(SecurityService securityService, UserInvoiceDataService userInvoiceDataService, MessageService messageService) {
this.securityService = securityService; this.securityService = securityService;
this.userInvoiceDataService = userInvoiceDataService; this.userInvoiceDataService = userInvoiceDataService;
this.messageService = messageService;
setPrimarySection(Section.DRAWER); setPrimarySection(Section.DRAWER);
// Always build the drawer; keep references and toggle visibility on attach and // 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) { private SideNavItem createSideNavItem(MenuEntry menuEntry) {
SideNavItem item;
if (menuEntry.icon() != null) { 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 { } 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() { private Component createUserMenu() {