Skip to content

Commit 6374f7a

Browse files
AB-xdevlars-xdev
andcommitted
Init component
Co-Authored-By: Lars S. <[email protected]>
1 parent eaa58b9 commit 6374f7a

File tree

14 files changed

+419
-0
lines changed

14 files changed

+419
-0
lines changed

assets/demo.avif

195 KB
Binary file not shown.

assets/demo.png

-11.4 KB
Loading
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package software.xdev.vaadin.view;
2+
3+
import java.util.Objects;
4+
5+
import com.vaadin.flow.component.HasElement;
6+
import com.vaadin.flow.component.UI;
7+
import com.vaadin.flow.component.applayout.AppLayout;
8+
import com.vaadin.flow.component.applayout.DrawerToggle;
9+
import com.vaadin.flow.component.icon.VaadinIcon;
10+
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
11+
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
12+
import com.vaadin.flow.component.sidenav.SideNav;
13+
import com.vaadin.flow.component.sidenav.SideNavItem;
14+
import com.vaadin.flow.router.PageTitle;
15+
import com.vaadin.flow.router.Route;
16+
17+
import software.xdev.vaadin.breadcrumbs.Breadcrumbs;
18+
import software.xdev.vaadin.view.cars.CarsView;
19+
import software.xdev.vaadin.view.cars.brand.AudiView;
20+
import software.xdev.vaadin.view.cars.brand.BMWView;
21+
import software.xdev.vaadin.view.cars.brand.PorscheView;
22+
23+
24+
@Route("")
25+
@PageTitle("Breadcrumb Demo")
26+
public class MainView extends AppLayout
27+
{
28+
private static final String SIDE_NAV_I18N_PREFIX = "sidenav_";
29+
30+
private final Breadcrumbs breadcrumbs = new Breadcrumbs();
31+
32+
public MainView()
33+
{
34+
final SideNav sideNav = new SideNav();
35+
sideNav.addItem(new SideNavItem(
36+
this.getTranslation(SIDE_NAV_I18N_PREFIX + "home"),
37+
"",
38+
VaadinIcon.HOME_O.create()));
39+
40+
final SideNavItem carsItem = new SideNavItem(
41+
this.getTranslation(SIDE_NAV_I18N_PREFIX + "cars"),
42+
CarsView.class,
43+
VaadinIcon.CAR.create());
44+
carsItem.addItem(new SideNavItem("Audi", AudiView.class));
45+
carsItem.addItem(new SideNavItem("BMW", BMWView.class));
46+
carsItem.addItem(new SideNavItem("Porsche", PorscheView.class));
47+
48+
sideNav.addItem(Objects.requireNonNull(carsItem));
49+
50+
this.setPrimarySection(Section.DRAWER);
51+
52+
final VerticalLayout navWrapper = new VerticalLayout(sideNav);
53+
sideNav.setWidthFull();
54+
navWrapper.setSpacing(true);
55+
this.addToDrawer(navWrapper);
56+
57+
final HorizontalLayout vlHeader = new HorizontalLayout(new DrawerToggle(), this.breadcrumbs);
58+
vlHeader.setSpacing(false);
59+
this.addToNavbar(vlHeader);
60+
61+
UI.getCurrent().getElement().setAttribute("theme", "dark");
62+
}
63+
64+
@Override
65+
public void showRouterLayoutContent(final HasElement content)
66+
{
67+
super.showRouterLayoutContent(content);
68+
this.breadcrumbs.updateFromCurrentPath();
69+
}
70+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package software.xdev.vaadin.view.cars;
2+
3+
import java.util.List;
4+
5+
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
6+
7+
8+
public abstract class AbstractCarView extends VerticalLayout
9+
{
10+
protected static final String AUDI = "Audi";
11+
protected static final String BMW = "BMW";
12+
protected static final String PORSCHE = "Porsche";
13+
14+
protected AbstractCarView()
15+
{
16+
final CarGrid carGrid = new CarGrid(this.getCars());
17+
carGrid.setAllRowsVisible(true);
18+
this.add(carGrid);
19+
}
20+
21+
protected abstract List<Car> getCars();
22+
23+
protected static List<Car> getCarsByBrand(final String brand)
24+
{
25+
return getAllCars().stream()
26+
.filter(c -> brand.equals(c.brand()))
27+
.toList();
28+
}
29+
30+
@SuppressWarnings("checkstyle:MagicNumber")
31+
protected static List<Car> getAllCars()
32+
{
33+
return List.of(
34+
new Car(AUDI, "A4", 190),
35+
new Car(AUDI, "A3", 150),
36+
new Car(AUDI, "S4", 250),
37+
new Car(AUDI, "Q5", 300),
38+
new Car(BMW, "318i", 190),
39+
new Car(BMW, "M4", 400),
40+
new Car(BMW, "420d", 200),
41+
new Car(BMW, "X5", 250),
42+
new Car(PORSCHE, "Cayenne", 300),
43+
new Car(PORSCHE, "911", 400),
44+
new Car(PORSCHE, "Carrera", 400),
45+
new Car(PORSCHE, "GT3RS", 600)
46+
);
47+
}
48+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package software.xdev.vaadin.view.cars;
2+
3+
public record Car(String brand, String name, int hp)
4+
{
5+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package software.xdev.vaadin.view.cars;
2+
3+
import java.util.List;
4+
5+
import com.vaadin.flow.component.grid.Grid;
6+
7+
8+
public class CarGrid extends Grid<Car>
9+
{
10+
private static final String I18N_PREFIX = "grid_";
11+
12+
public CarGrid(final List<Car> cars)
13+
{
14+
this.setItems(cars);
15+
this.addColumn(Car::brand).setHeader(this.getTranslation(I18N_PREFIX + "branch"));
16+
this.addColumn(Car::name).setHeader(this.getTranslation(I18N_PREFIX + "type"));
17+
this.addColumn(Car::hp).setHeader(this.getTranslation(I18N_PREFIX + "hp"));
18+
}
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package software.xdev.vaadin.view.cars;
2+
3+
import java.util.List;
4+
5+
import com.vaadin.flow.router.Route;
6+
7+
import software.xdev.vaadin.view.MainView;
8+
9+
10+
@Route(value = "cars", layout = MainView.class)
11+
public class CarsView extends AbstractCarView
12+
{
13+
@Override
14+
protected List<Car> getCars()
15+
{
16+
return getAllCars();
17+
}
18+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package software.xdev.vaadin.view.cars.brand;
2+
3+
import java.util.List;
4+
5+
import com.vaadin.flow.router.Route;
6+
7+
import software.xdev.vaadin.view.MainView;
8+
import software.xdev.vaadin.view.cars.AbstractCarView;
9+
import software.xdev.vaadin.view.cars.Car;
10+
11+
12+
@Route(value = "cars/audi", layout = MainView.class)
13+
public class AudiView extends AbstractCarView
14+
{
15+
@Override
16+
@SuppressWarnings("checkstyle:MagicNumber")
17+
protected List<Car> getCars()
18+
{
19+
return getCarsByBrand(AUDI);
20+
}
21+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package software.xdev.vaadin.view.cars.brand;
2+
3+
import java.util.List;
4+
5+
import com.vaadin.flow.router.Route;
6+
7+
import software.xdev.vaadin.view.MainView;
8+
import software.xdev.vaadin.view.cars.AbstractCarView;
9+
import software.xdev.vaadin.view.cars.Car;
10+
11+
12+
@Route(value = "cars/bmw", layout = MainView.class)
13+
public class BMWView extends AbstractCarView
14+
{
15+
@Override
16+
@SuppressWarnings("checkstyle:MagicNumber")
17+
protected List<Car> getCars()
18+
{
19+
return getCarsByBrand(BMW);
20+
}
21+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package software.xdev.vaadin.view.cars.brand;
2+
3+
import java.util.List;
4+
5+
import com.vaadin.flow.router.Route;
6+
7+
import software.xdev.vaadin.view.MainView;
8+
import software.xdev.vaadin.view.cars.AbstractCarView;
9+
import software.xdev.vaadin.view.cars.Car;
10+
11+
12+
@Route(value = "cars/porsche", layout = MainView.class)
13+
public class PorscheView extends AbstractCarView
14+
{
15+
@Override
16+
@SuppressWarnings("checkstyle:MagicNumber")
17+
protected List<Car> getCars()
18+
{
19+
return getCarsByBrand(PORSCHE);
20+
}
21+
}

0 commit comments

Comments
 (0)