diff --git a/CHANGELOG.md b/CHANGELOG.md index 49cd18dc..3ec1d80a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 4.0.1 +* String are now matched NOT case-sensitive +* Search bar now uses lazy value change mode + # 4.0.0 * Added new component `GridFilterWithSearchBar` * Has a search bar for quick searching of strings diff --git a/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/GridFilter.java b/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/GridFilter.java index 0c62cc0b..4e20646c 100644 --- a/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/GridFilter.java +++ b/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/GridFilter.java @@ -181,7 +181,7 @@ protected void onFilterUpdate() this.fireEvent(new FilterChangedEvent<>(this, false)); } - protected void applyFilterToGrid() + public void applyFilterToGrid() { this.applyFilter.accept(this.grid, this.filterContainerComponent.getFilterComponents()); } diff --git a/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/GridFilterWithSearchBar.java b/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/GridFilterWithSearchBar.java index 0e73ff94..528c74c8 100644 --- a/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/GridFilterWithSearchBar.java +++ b/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/GridFilterWithSearchBar.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Locale; import java.util.Objects; import java.util.Optional; import java.util.function.Function; @@ -27,6 +28,7 @@ import com.vaadin.flow.component.icon.VaadinIcon; import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.textfield.TextField; +import com.vaadin.flow.data.value.ValueChangeMode; public class GridFilterWithSearchBar extends GridFilter @@ -56,11 +58,11 @@ protected GridFilterWithSearchBar( this.withApplyFilter((gr, components) -> { - final String searchBarValue = this.txtSearchBar.getValue(); - final boolean hasSearchBarValue = searchBarValue != null && !searchBarValue.isEmpty(); + final Optional optSearchBarValue = this.getSearchBarValue() + .map(s -> s.toLowerCase(Locale.ROOT)); gr.getListDataView().setFilter(item -> - (!hasSearchBarValue || this.doesItemMatchAnySearchBarExtracted(item, searchBarValue)) + optSearchBarValue.map(v -> this.doesItemMatchAnySearchBarExtracted(item, v)).orElse(true) && components.stream().allMatch(c -> c.test(item))); }); @@ -85,6 +87,7 @@ protected void initUIWithSearchBar(final boolean hideDetailsFilterInitially) protected void initSearchBar(final boolean hideDetailsFilterInitially) { this.txtSearchBar.setPlaceholder("Search..."); + this.txtSearchBar.setValueChangeMode(ValueChangeMode.LAZY); this.txtSearchBar.setWidthFull(); this.txtSearchBar.addValueChangeListener(ev -> this.onFilterUpdate()); @@ -116,6 +119,7 @@ protected boolean doesItemMatchAnySearchBarExtracted(final T item, final String return this.searchBarValueExtractors.stream() .map(func -> func.apply(item)) .filter(Objects::nonNull) + .map(s -> s.toLowerCase(Locale.ROOT)) .anyMatch(s -> s.contains(value)); } diff --git a/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/business/operation/EqualsOp.java b/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/business/operation/EqualsOp.java index 3b1a2b65..2d3c989b 100644 --- a/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/business/operation/EqualsOp.java +++ b/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/business/operation/EqualsOp.java @@ -37,6 +37,12 @@ public boolean canHandle(final Class clazz) @Override public boolean test(final Object input, final SingleValue filterValue) { + if(input instanceof final String inputString + && filterValue.getValue() instanceof final String filterValueString) + { + return inputString.equalsIgnoreCase(filterValueString); + } + return Objects.equals(input, filterValue.getValue()); } diff --git a/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/filtercomponents/condition/FieldFilterConditionComponent.java b/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/filtercomponents/condition/FieldFilterConditionComponent.java index 0fba7b4b..f5676ad3 100644 --- a/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/filtercomponents/condition/FieldFilterConditionComponent.java +++ b/vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/filtercomponents/condition/FieldFilterConditionComponent.java @@ -86,7 +86,7 @@ public FieldFilterConditionComponent( this.operationDetailsContainer.addClassNames(FilterFieldConditionComponentStyles.DETAILS); this.getContent().add(this.cbField, this.cbOperation, this.operationDetailsContainer); - this.getContent().setAlignItems(FlexComponent.Alignment.BASELINE); + this.getContent().setAlignItems(FlexComponent.Alignment.CENTER); this.getContent().addClassNames( FilterComponentStyles.FILTER_COMPONENT, FilterFieldConditionComponentStyles.FILTER_FIELD_CONDITION_COMPONENT);