Erweiterungen
This commit is contained in:
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user