Skip to content

Commit d58b765

Browse files
authored
Merge pull request #3 from xdev-software/refactor-v2
Refactor v2
2 parents b3ce57f + c2fab7f commit d58b765

File tree

85 files changed

+3162
-3960
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+3162
-3960
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,14 @@
1+
# 2.0.0
2+
_Reworked component_
3+
4+
* New customizable UI, including
5+
* nested filters (AND, OR, NOT)
6+
* depth can be limited
7+
* customizable operations (=,>,<,contains,is empty)
8+
* support for multiple value types
9+
* can easily be bound with Vaadin components
10+
* Improved support for QueryParameters
11+
* Better translation support
12+
113
# 1.0.0
214
_Initial release_

README.md

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,45 @@
66

77
# vaadin-grid-filter
88

9-
A Vaadin Flow component for filtering Grids.
9+
A customizable Vaadin Flow component for filtering Grids.
1010

1111
![demo](assets/demo.png)
1212

13+
## Features
14+
* Customizable and dynamic filter UI
15+
* Most common filters, operations and value types are supported out of the box
16+
* Nested filters (AND, OR, NOT)
17+
* depth can be limited
18+
* customizable operations (=,>,<,contains,is empty)
19+
* support for multiple value types
20+
* can easily be bound with Vaadin components
21+
* Query parameter support
22+
* Support for custom translations
23+
24+
> [!NOTE]
25+
> If you are looking for a simpler component you may check out our [simple-grid-filter](https://github.com/xdev-software/vaadin-simple-grid-filter).
26+
27+
## Usage
28+
29+
Here is a very simple example how the GridFilter can be used:
30+
```java
31+
Grid<Person> grid = createGrid();
32+
33+
GridFilter<Person> filter = GridFilter.createDefault(grid)
34+
.withFilterableField("ID", Person::id, Integer.class)
35+
.withFilterableField("First Name", Person::firstName, String.class);
36+
37+
this.add(filter, grid);
38+
```
39+
40+
To get started further it's recommended to have a look at the [demo](./vaadin-grid-filter-demo).<br/>
41+
A description how to get it running can be found [below](#run-the-demo).
42+
43+
> [!IMPORTANT]
44+
> This component is designed for "in memory" filtering of small to medium sized amounts of data.
45+
46+
> [!NOTE]
47+
> Filtering multiple thousand items with complex filtering conditions can drastically impact performance and make the UI unresponsive!<br/> In these cases it's recommended to use backend filtering solutions like database queries or search engines like [ElasticSearch](https://en.wikipedia.org/wiki/Elasticsearch) in combination with a customized UI search framework. If you need help in implementing these feel free to [contact us](https://xdev.software/en/services/support).
1348
1449
## Installation
1550
[Installation guide for the latest release](https://github.com/xdev-software/vaadin-grid-filter/releases/latest#Installation)

assets/demo.avif

493 KB
Binary file not shown.

assets/demo.png

16 KB
Loading

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>software.xdev</groupId>
88
<artifactId>vaadin-grid-filter-root</artifactId>
9-
<version>1.0.2-SNAPSHOT</version>
9+
<version>2.0.0-SNAPSHOT</version>
1010
<packaging>pom</packaging>
1111

1212
<organization>

vaadin-grid-filter-demo/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
<parent>
88
<groupId>software.xdev</groupId>
99
<artifactId>vaadin-grid-filter-root</artifactId>
10-
<version>1.0.2-SNAPSHOT</version>
10+
<version>2.0.0-SNAPSHOT</version>
1111
</parent>
1212

1313
<artifactId>vaadin-grid-filter-demo</artifactId>
14-
<version>1.0.2-SNAPSHOT</version>
14+
<version>2.0.0-SNAPSHOT</version>
1515
<packaging>jar</packaging>
1616

1717
<organization>
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+
}

0 commit comments

Comments
 (0)