getSearchableFilter method
Generates search and filter criteria based on form field definitions.
This method creates MongoDB query filters based on:
- Searchable fields: Creates text-based search using regex patterns
- Filterable fields: Creates exact-match filters for specific values
Parameters:
inputs
- Input data containing search terms and filter valuessearchFiled
- Name of the field containing the search term (default: 'search')
Returns a MongoDB query filter object that can be used in find operations.
The method automatically:
- Builds OR conditions for searchable fields using regex patterns
- Builds AND conditions for filterable fields using exact matches
- Combines search and filter conditions appropriately
Example:
var filter = collection.getSearchableFilter(
inputs: {
'search': 'john',
'status': 'active',
'role': 'admin'
}
);
// Results in: {$and: [{$or: [name: /john/i, email: /john/i]}, {status: 'active', role: 'admin'}]}
Implementation
Map<String, Object?> getSearchableFilter({
required Map<String, Object?> inputs,
String searchFiled = 'search',
}) {
var resSearch = <String, Object?>{};
if (inputs[searchFiled] != null &&
inputs[searchFiled].toString().trim().isNotEmpty) {
var searchOr = [];
for (var key in form.fields.keys) {
if (form.fields[key]!.searchable) {
searchOr.add(
DQ.field(key, DQ.like(inputs[searchFiled].toString().trim())),
);
}
}
if (searchOr.isNotEmpty) {
resSearch = DQ.or(searchOr);
}
}
var resFilter = <String, Object?>{};
var filterAnd = [];
for (var key in form.fields.keys) {
if (form.fields[key]!.filterable) {
if (inputs[key] != null) {
filterAnd.add(
DQ.field(
key,
ObjectDescovery.descovr(
inputs[key],
form.fields[key]!.type,
def: form.fields[key]!.defaultValue?.call(),
),
),
);
}
}
}
if (filterAnd.isNotEmpty) {
resFilter = DQ.and(filterAnd);
}
var res = <String, Object?>{};
if (resSearch.isNotEmpty && resFilter.isNotEmpty) {
res = DQ.and([resSearch, resFilter]);
}
res = {...resSearch, ...resFilter};
return res;
}