Directory

Filtering Grid - Vaadin Add-on Directory

Grid that makes it easy to filter its data Filtering Grid - Vaadin Add-on Directory
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 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 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](https://github.com/wbadam/filtering-grid)