Skip to content

Commit 69b5450

Browse files
committed
fix(filters): ignore filters & logical groups if empty (condition bypass)
1 parent 8f2d56b commit 69b5450

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

src/query.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,21 @@ function matchesSearch<T extends GenericObject>(item: T, search?: QueryParams<T>
3434
}
3535

3636
function matchesFilters<T extends GenericObject>(item: T, filters?: FilterOptions): boolean {
37-
const _filters = (typeof filters === 'object' && ('groups' in filters) ? filters.groups : filters) ?? []
37+
const _filters = ((typeof filters === 'object' && ('groups' in filters) ? filters.groups : filters) ?? [])
38+
.filter(filter => filter.condition?.() ?? true)
3839
if (!_filters || _filters.length === 0)
3940
return true
4041
const isGroup = _filters.every(filter => 'filters' in filter)
4142
const groupOperator = getOperator(typeof filters === 'object' && 'operator' in filters ? filters.operator : 'OR')
4243
const method = isGroup ? (groupOperator === 'AND' ? 'every' : 'some') : 'every'
43-
return _filters.filter(filter => filter.condition?.() ?? true)[method]((group: QueryFilter | QueryFilterGroup) => {
44-
const groupFilters = 'filters' in group ? group.filters : [group]
44+
return _filters[method]((group: QueryFilter | QueryFilterGroup) => {
45+
const groupFilters = ('filters' in group ? group.filters : [group])
46+
.filter(filter => filter.condition?.() ?? true)
47+
if (groupFilters.length === 0)
48+
return true
49+
4550
const op = 'filters' in group ? group.operator : 'OR'
46-
return groupFilters.filter(filter => filter.condition?.() ?? true)[op === 'AND' ? 'every' : 'some']((filter: QueryFilter) => {
51+
return groupFilters[op === 'AND' ? 'every' : 'some']((filter: QueryFilter) => {
4752
const value = getObjectProperty(item, filter.key)
4853
const operator = getOperator(filter.operator)
4954
const params = (!('params' in filter) ? null : typeof filter.params === 'function' ? filter.params(filter.value) : filter.params) ?? null

0 commit comments

Comments
 (0)