Skip to content

Commit 81ea716

Browse files
committed
Implement demo, fix minor problems
1 parent acbe64c commit 81ea716

File tree

12 files changed

+247
-63
lines changed

12 files changed

+247
-63
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package software.xdev.vaadin.gridfilter;
2+
3+
import java.util.List;
4+
5+
import com.vaadin.flow.component.AttachEvent;
6+
import com.vaadin.flow.component.Composite;
7+
import com.vaadin.flow.component.grid.Grid;
8+
import com.vaadin.flow.component.grid.GridVariant;
9+
import com.vaadin.flow.component.html.Anchor;
10+
import com.vaadin.flow.component.html.Span;
11+
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
12+
import com.vaadin.flow.data.renderer.ComponentRenderer;
13+
import com.vaadin.flow.router.PageTitle;
14+
import com.vaadin.flow.router.Route;
15+
16+
import software.xdev.vaadin.gridfilter.demo.LocalizationDemo;
17+
import software.xdev.vaadin.gridfilter.demo.MaxNestedDepthDemo;
18+
import software.xdev.vaadin.gridfilter.demo.MinimalisticDemo;
19+
import software.xdev.vaadin.gridfilter.demo.QueryParameterDemo;
20+
21+
22+
@PageTitle("Grid Filter demos")
23+
@Route("")
24+
public class DemoView extends Composite<VerticalLayout>
25+
{
26+
private final Grid<Example> grExamples = new Grid<>();
27+
28+
public DemoView()
29+
{
30+
this.grExamples
31+
.addColumn(new ComponentRenderer<>(example -> {
32+
final Anchor anchor = new Anchor(example.route(), example.name());
33+
34+
final Span spDesc = new Span(example.desc());
35+
spDesc.getStyle().set("font-size", "90%");
36+
spDesc.getStyle().set("white-space", "pre");
37+
38+
final VerticalLayout vl = new VerticalLayout(anchor, spDesc);
39+
vl.setSpacing(false);
40+
return vl;
41+
}))
42+
.setHeader("Available demos");
43+
44+
this.grExamples.setSizeFull();
45+
this.grExamples.addThemeVariants(GridVariant.LUMO_COMPACT, GridVariant.LUMO_NO_BORDER);
46+
47+
this.getContent().add(this.grExamples);
48+
this.getContent().setHeightFull();
49+
}
50+
51+
@Override
52+
protected void onAttach(final AttachEvent attachEvent)
53+
{
54+
this.grExamples.setItems(List.of(
55+
new Example(
56+
MinimalisticDemo.NAV,
57+
"Minimalistic",
58+
"Showcasing the simplest form of using the component"
59+
),
60+
new Example(
61+
QueryParameterDemo.NAV,
62+
"Store filters in QueryParameter",
63+
"Shows how filters can be persisted in and loaded from QueryParameters/Url"
64+
),
65+
new Example(
66+
MaxNestedDepthDemo.NAV,
67+
"Limit depth/nesting of filters",
68+
"Limits the how many filters can be nested"
69+
),
70+
new Example(
71+
LocalizationDemo.NAV,
72+
"Localization",
73+
"Showcases how localization can be done (UI in German)"
74+
)
75+
));
76+
}
77+
78+
record Example(String route, String name, String desc)
79+
{
80+
}
81+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package software.xdev.vaadin.gridfilter.demo;
2+
3+
import java.time.LocalDate;
4+
5+
import com.vaadin.flow.component.AttachEvent;
6+
import com.vaadin.flow.component.grid.Grid;
7+
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
8+
9+
import software.xdev.vaadin.gridfilter.GridFilter;
10+
import software.xdev.vaadin.gridfilter.model.Department;
11+
import software.xdev.vaadin.gridfilter.model.Person;
12+
13+
14+
public class AbstractDemo extends VerticalLayout
15+
{
16+
protected final Grid<Person> grid = new Grid<>(Person.class, true);
17+
18+
protected GridFilter<Person> createDefaultFilter()
19+
{
20+
return GridFilter.createDefault(this.grid)
21+
.withFilterableField("ID", Person::id, Integer.class)
22+
.withFilterableField("First Name", Person::firstName, String.class)
23+
.withFilterableField("Birthday", Person::birthday, LocalDate.class)
24+
.withFilterableField("Married", Person::married, Boolean.class)
25+
.withFilterableField("Department", Person::department, Department.class);
26+
}
27+
28+
@Override
29+
protected void onAttach(final AttachEvent attachEvent)
30+
{
31+
this.grid.setItems(Person.list());
32+
}
33+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package software.xdev.vaadin.gridfilter.demo;
2+
3+
import com.vaadin.flow.router.Route;
4+
5+
import software.xdev.vaadin.gridfilter.GridFilter;
6+
import software.xdev.vaadin.gridfilter.GridFilterLocalizationConfig;
7+
import software.xdev.vaadin.gridfilter.model.Person;
8+
9+
10+
@Route(LocalizationDemo.NAV)
11+
public class LocalizationDemo extends AbstractDemo
12+
{
13+
public static final String NAV = "/localization";
14+
15+
public LocalizationDemo()
16+
{
17+
final GridFilter<Person> filter = this.createDefaultFilter()
18+
.withLocalizationConfig(new GridFilterLocalizationConfig()
19+
.with(GridFilterLocalizationConfig.BLOCK_AND, "UND")
20+
.with(GridFilterLocalizationConfig.BLOCK_OR, "ODER")
21+
.with(GridFilterLocalizationConfig.BLOCK_NOT, "NICHT")
22+
.with(GridFilterLocalizationConfig.OP_CONTAINS, "enthält")
23+
.with(GridFilterLocalizationConfig.OP_GREATER_THAN, "größer als")
24+
.with(GridFilterLocalizationConfig.OP_LESS_THAN, "kleiner als")
25+
.with(GridFilterLocalizationConfig.OP_EQUALS, "ist gleich")
26+
.with(GridFilterLocalizationConfig.OP_IS_EMPTY, "ist leer")
27+
.with(GridFilterLocalizationConfig.CONDITION, "Bedingung"));
28+
29+
this.add(filter, this.grid);
30+
}
31+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package software.xdev.vaadin.gridfilter.demo;
2+
3+
import com.vaadin.flow.router.Route;
4+
5+
import software.xdev.vaadin.gridfilter.GridFilter;
6+
import software.xdev.vaadin.gridfilter.model.Person;
7+
8+
9+
@Route(MaxNestedDepthDemo.NAV)
10+
public class MaxNestedDepthDemo extends AbstractDemo
11+
{
12+
public static final String NAV = "/maxNestedDepth";
13+
14+
public MaxNestedDepthDemo()
15+
{
16+
final GridFilter<Person> filter = this.createDefaultFilter()
17+
.withMaxNestedDepth(1);
18+
19+
this.add(filter, this.grid);
20+
}
21+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package software.xdev.vaadin.gridfilter.demo;
2+
3+
import com.vaadin.flow.component.details.Details;
4+
import com.vaadin.flow.component.details.DetailsVariant;
5+
import com.vaadin.flow.router.Route;
6+
7+
import software.xdev.vaadin.gridfilter.GridFilter;
8+
import software.xdev.vaadin.gridfilter.model.Person;
9+
10+
11+
@Route(MinimalisticDemo.NAV)
12+
public class MinimalisticDemo extends AbstractDemo
13+
{
14+
public static final String NAV = "/minimalistic";
15+
16+
public MinimalisticDemo()
17+
{
18+
final GridFilter<Person> filter = this.createDefaultFilter();
19+
20+
// Add filter inside details block for better looking UI
21+
final Details details = new Details("Filter data");
22+
details.addThemeVariants(DetailsVariant.FILLED);
23+
details.add(filter);
24+
details.setOpened(true);
25+
this.add(details, this.grid);
26+
}
27+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package software.xdev.vaadin.gridfilter.demo;
2+
3+
import com.vaadin.flow.router.AfterNavigationEvent;
4+
import com.vaadin.flow.router.AfterNavigationObserver;
5+
import com.vaadin.flow.router.Route;
6+
7+
import software.xdev.vaadin.gridfilter.GridFilter;
8+
import software.xdev.vaadin.gridfilter.model.Person;
9+
import software.xdev.vaadin.gridfilter.queryparameter.GridFilterQueryParameterAdapter;
10+
11+
12+
@Route(QueryParameterDemo.NAV)
13+
public class QueryParameterDemo extends AbstractDemo implements AfterNavigationObserver
14+
{
15+
public static final String NAV = "/queryparameter";
16+
17+
private final GridFilterQueryParameterAdapter queryParameterAdapter;
18+
19+
public QueryParameterDemo()
20+
{
21+
final GridFilter<Person> filter = this.createDefaultFilter();
22+
23+
this.queryParameterAdapter = new GridFilterQueryParameterAdapter(filter, "filter");
24+
25+
this.add(filter, this.grid);
26+
}
27+
28+
@Override
29+
public void afterNavigation(final AfterNavigationEvent event)
30+
{
31+
this.queryParameterAdapter.afterNavigation(event);
32+
}
33+
}

vaadin-grid-filter-demo/src/main/java/software/xdev/vaadin/model/Department.java renamed to vaadin-grid-filter-demo/src/main/java/software/xdev/vaadin/gridfilter/model/Department.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package software.xdev.vaadin.model;
1+
package software.xdev.vaadin.gridfilter.model;
22

33
public enum Department
44
{

vaadin-grid-filter-demo/src/main/java/software/xdev/vaadin/model/Person.java renamed to vaadin-grid-filter-demo/src/main/java/software/xdev/vaadin/gridfilter/model/Person.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package software.xdev.vaadin.model;
1+
package software.xdev.vaadin.gridfilter.model;
22

33
import java.time.LocalDate;
44
import java.util.List;

vaadin-grid-filter-demo/src/main/java/software/xdev/vaadin/ui/DemoView.java

Lines changed: 0 additions & 58 deletions
This file was deleted.

vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/FilterableField.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package software.xdev.vaadin.gridfilter;
1717

18+
import java.util.Objects;
1819
import java.util.function.Function;
1920

2021

@@ -26,7 +27,11 @@ public record FilterableField<I, T>(
2627
{
2728
public FilterableField
2829
{
29-
if(this.name().chars().anyMatch(c -> !Character.isLetter(c) && !Character.isDigit(c)))
30+
Objects.requireNonNull(name);
31+
Objects.requireNonNull(identifier);
32+
Objects.requireNonNull(keyExtractor);
33+
Objects.requireNonNull(clazz);
34+
if(identifier.chars().anyMatch(c -> !Character.isLetter(c) && !Character.isDigit(c)))
3035
{
3136
throw new IllegalArgumentException("identifier needs to be alphanumeric");
3237
}

0 commit comments

Comments
 (0)