How to add suggestion on saved filter condition

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()));
    }
}

screencast 2023-02-25 19-27-28

1 Like