Filtering Grid: The FilterGrid component allows attaching filters to the grid and it’s columns which can be used to filter its data. Filtering can be performed in case of both in-memory and backend data.
Filtering In-memory data
The FilterColumn#setFilter() method accepts a Component that will show up in the Grid’s header row for the column, and a SerializableBiPredicate<COLUMN_VALUE, FILTER_VALUE> which instructs the Grid to display a given row or not. The BiPredicate is a function that gets two parameters, the value and the filter’s value, and returns true (keep the row) or false (filter out the row).
colDateOfBirth.setFilter(new DateField(), (v, fv) -> fv == null || v.isEqual(fv));
In addition, in case the value is of different type than the filter’s value, it is possible to provide a value provider which converts the value to a filterable value.
colDateOfBirth.setFilter(
v -> v.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(),
new DateField(),
(v, fv) -> fv == null || v.isEqual(fv));
Filtering backend data
Add Filter
s to the Grid using the Grid#addFilter()
method.
Then, given a backend service that returns a stream of objects (e.g. from database or REST service)
public Stream<Person> getPersonsFilteredByFirstName(int offset, int limit, String firstNameContains) {/* ... */}
, create a filtered data provider which uses this service for fetching and counting data.
grid.setFilteredDataProvider(
(sortOrder, filters, offset, limit) -> PersonService.getInstance()
.getPersons(offset, limit, filters.getStringValue("filterFirstName")
.orElse(null)),
filters -> PersonService.getInstance().getSize(
filters.getValue("firstName", String.class)
.orElse(null)));
For more detailed documentation, please visit https://github.com/wbadam/filtering-grid