1
+ package com .example .application .views .applayoutsample ;
2
+
3
+ import com .example .application .views .componentssample .ComponentsSampleView ;
4
+ import com .vaadin .flow .component .Component ;
5
+ import com .vaadin .flow .component .applayout .AppLayout ;
6
+ import com .vaadin .flow .component .applayout .DrawerToggle ;
7
+ import com .vaadin .flow .component .html .H1 ;
8
+ import com .vaadin .flow .component .html .Span ;
9
+ import com .vaadin .flow .component .icon .Icon ;
10
+ import com .vaadin .flow .component .icon .VaadinIcon ;
11
+ import com .vaadin .flow .component .orderedlayout .HorizontalLayout ;
12
+ import com .vaadin .flow .component .orderedlayout .Scroller ;
13
+ import com .vaadin .flow .component .orderedlayout .VerticalLayout ;
14
+ import com .vaadin .flow .component .sidenav .SideNav ;
15
+ import com .vaadin .flow .component .sidenav .SideNavItem ;
16
+ import com .vaadin .flow .router .PageTitle ;
17
+ import com .vaadin .flow .router .Route ;
18
+ import com .vaadin .flow .theme .lumo .LumoUtility ;
19
+
20
+ @ PageTitle ("App Layout Sample" )
21
+ @ Route ("app-layout-sample" )
22
+ public class AppLayoutSample extends AppLayout {
23
+
24
+ public AppLayoutSample () {
25
+ DrawerToggle toggle = new DrawerToggle ();
26
+
27
+ H1 title = new H1 ("MyApp" );
28
+ title .getStyle ().set ("font-size" , "var(--lumo-font-size-l)" )
29
+ .set ("margin" , "0" );
30
+
31
+ SideNav nav = getSideNav ();
32
+
33
+ Scroller scroller = new Scroller (nav );
34
+ scroller .setClassName (LumoUtility .Padding .SMALL );
35
+
36
+ addToDrawer (scroller );
37
+ addToNavbar (toggle , title );
38
+
39
+ HorizontalLayout navExamples = new HorizontalLayout (createSideNavLabelled (), createSideNavHierarchy ());
40
+ navExamples .setPadding (true );
41
+ navExamples .setSpacing (true );
42
+ setContent (navExamples );
43
+ }
44
+
45
+
46
+ private Component createSideNavLabelled () {
47
+ SideNav baseNav = new SideNav ();
48
+ baseNav .addItem (new SideNavItem ("Dashboard" , AppLayoutSample .class ,
49
+ VaadinIcon .DASHBOARD .create ()));
50
+ SideNavItem calendarLink = new SideNavItem ("Calendar" , "" ,
51
+ VaadinIcon .CALENDAR .create ());
52
+ baseNav .addItem (calendarLink );
53
+
54
+ Icon calendarNotification = VaadinIcon .BELL .create ();
55
+ calendarNotification .getElement ().getThemeList ()
56
+ .add ("badge error pill" );
57
+ calendarNotification .getStyle ().set ("padding" , "var(--lumo-space-xs" );
58
+ calendarNotification .getElement ().setAttribute ("aria-label" ,
59
+ "Upcoming appointment" );
60
+ calendarLink .setSuffixComponent (calendarNotification );
61
+
62
+ SideNav messagesNav = new SideNav ();
63
+ messagesNav .setLabel ("Messages" );
64
+ SideNavItem inboxLink = new SideNavItem ("Inbox" , "" ,
65
+ VaadinIcon .INBOX .create ());
66
+ Span inboxCounter = new Span ("12" );
67
+ inboxCounter .getElement ().getThemeList ().add ("badge contrast pill" );
68
+ inboxCounter .getElement ().setAttribute ("aria-label" ,
69
+ "12 unread messages" );
70
+ inboxLink .setSuffixComponent (inboxCounter );
71
+ messagesNav .addItem (inboxLink );
72
+ messagesNav .addItem (new SideNavItem ("Sent" , "" ,
73
+ VaadinIcon .PAPERPLANE .create ()));
74
+ messagesNav .addItem (new SideNavItem ("Trash" , "" ,
75
+ VaadinIcon .TRASH .create ()));
76
+
77
+ SideNav adminNav = new SideNav ();
78
+ adminNav .setLabel ("Admin" );
79
+ adminNav .setCollapsible (true );
80
+ adminNav .addItem (new SideNavItem ("Users" , "" ,
81
+ VaadinIcon .GROUP .create ()));
82
+ adminNav .addItem (new SideNavItem ("Permissions" , "" ,
83
+ VaadinIcon .KEY .create ()));
84
+
85
+ VerticalLayout navWrapper = new VerticalLayout (baseNav , messagesNav , adminNav );
86
+ navWrapper .setSpacing (true );
87
+ navWrapper .setWidth ("320px" );
88
+ navWrapper .setHeightFull ();
89
+ navWrapper .getStyle ().set ("background" , "var(--lumo-base-color-60pct)" );
90
+ baseNav .setWidthFull ();
91
+ messagesNav .setWidthFull ();
92
+ adminNav .setWidthFull ();
93
+
94
+ return navWrapper ;
95
+ }
96
+
97
+ private Component createSideNavHierarchy () {
98
+ SideNav sideNav = new SideNav ();
99
+ sideNav .addItem (new SideNavItem ("Dashboard" , AppLayoutSample .class ,
100
+ VaadinIcon .DASHBOARD .create ()));
101
+ SideNavItem calendarLink = new SideNavItem ("Calendar" , "" ,
102
+ VaadinIcon .CALENDAR .create ());
103
+ sideNav .addItem (calendarLink );
104
+
105
+ Icon calendarNotification = VaadinIcon .BELL .create ();
106
+ calendarNotification .getElement ().getThemeList ()
107
+ .add ("badge error pill" );
108
+ calendarNotification .getStyle ().set ("padding" , "var(--lumo-space-xs" );
109
+ calendarNotification .getElement ().setAttribute ("aria-label" ,
110
+ "Upcoming appointment" );
111
+ calendarLink .setSuffixComponent (calendarNotification );
112
+
113
+ SideNavItem messagesLink = new SideNavItem ("Messages" , "" , VaadinIcon .ENVELOPE .create ());
114
+ messagesLink .setExpanded (true );
115
+ SideNavItem inboxLink = new SideNavItem ("Inbox" , "" ,
116
+ VaadinIcon .INBOX .create ());
117
+ Span inboxCounter = new Span ("12" );
118
+ inboxCounter .getElement ().getThemeList ().add ("badge contrast pill" );
119
+ inboxCounter .getElement ().setAttribute ("aria-label" ,
120
+ "12 unread messages" );
121
+ inboxLink .setSuffixComponent (inboxCounter );
122
+ messagesLink .addItem (inboxLink );
123
+ messagesLink .addItem (new SideNavItem ("Sent" , "" ,
124
+ VaadinIcon .PAPERPLANE .create ()));
125
+ messagesLink .addItem (new SideNavItem ("Trash" , "" ,
126
+ VaadinIcon .TRASH .create ()));
127
+ sideNav .addItem (messagesLink );
128
+
129
+ SideNavItem adminSection = new SideNavItem ("Admin" );
130
+ adminSection .setExpanded (true );
131
+ adminSection .setPrefixComponent (VaadinIcon .COG .create ());
132
+ adminSection .addItem (new SideNavItem ("Users" , "" ,
133
+ VaadinIcon .GROUP .create ()));
134
+ adminSection .addItem (new SideNavItem ("Permissions" , "" ,
135
+ VaadinIcon .KEY .create ()));
136
+ sideNav .addItem (adminSection );
137
+
138
+ VerticalLayout navWrapper = new VerticalLayout (sideNav );
139
+ navWrapper .setSpacing (true );
140
+ navWrapper .setWidth ("320px" );
141
+ navWrapper .setHeightFull ();
142
+ navWrapper .getStyle ().set ("background" , "var(--lumo-base-color-60pct)" );
143
+ sideNav .setWidthFull ();
144
+
145
+ return navWrapper ;
146
+ }
147
+
148
+ private SideNav getSideNav () {
149
+ SideNav sideNav = new SideNav ();
150
+ sideNav .addItem (
151
+ new SideNavItem ("Dashboard" , "/dashboard" ,
152
+ VaadinIcon .DASHBOARD .create ()),
153
+ new SideNavItem ("Orders" , "/orders" , VaadinIcon .CART .create ()),
154
+ new SideNavItem ("Customers" , "/customers" ,
155
+ VaadinIcon .USER_HEART .create ()),
156
+ new SideNavItem ("Products" , "/products" ,
157
+ VaadinIcon .PACKAGE .create ()),
158
+ new SideNavItem ("Documents" , "/documents" ,
159
+ VaadinIcon .RECORDS .create ()),
160
+ new SideNavItem ("Tasks" , "/tasks" , VaadinIcon .LIST .create ()),
161
+ new SideNavItem ("Analytics" , "/analytics" ,
162
+ VaadinIcon .CHART .create ()));
163
+ return sideNav ;
164
+ }
165
+
166
+ }
0 commit comments