You can define a filter configuration with a property filter using the SuggestionField component:
<filter id="filter" dataLoader="usersDl">
<properties include=".*"/>
<configurations>
<configuration id="by_username" name="By username">
<propertyFilter property="username" operation="CONTAINS">
<suggestionField/>
</propertyFilter>
</configuration>
</configurations>
</filter>
You also need initialize the suggestion field in the controller when the user selects your filter configuration:
@Autowired
private UserRepository userRepository;
@Subscribe("filter")
public void onFilterConfigurationChange(Filter.ConfigurationChangeEvent event) {
Filter.Configuration configuration = event.getNewConfiguration();
if (configuration.getId().equals("by_username")) {
LogicalFilterComponent rootLogicalFilterComponent = configuration.getRootLogicalFilterComponent();
PropertyFilter propertyFilter = (PropertyFilter) rootLogicalFilterComponent.getOwnFilterComponents().get(0);
SuggestionField suggestionField = (SuggestionField) propertyFilter.getValueComponent();
suggestionField.setSearchExecutor((searchString, searchParams) ->
userRepository.getByUsernameLike(searchString).stream()
.map(UserDetails::getUsername)
.collect(Collectors.toList()));
}
}
