Skip to content

Commit c955a2e

Browse files
committed
feat(filter): optional query filter bypass
1 parent 157f94e commit c955a2e

File tree

2 files changed

+4
-2
lines changed

2 files changed

+4
-2
lines changed

src/query.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ function matchesFilters<T extends GenericObject>(item: T, filters?: (QueryFilter
3838
return true
3939
const isGroup = filters.every(filter => 'filters' in filter)
4040
const method = isGroup ? 'some' : 'every'
41-
return filters[method]((group: QueryFilter | QueryFilterGroup) => {
41+
return filters.filter(filter => filter.condition?.() ?? true)[method]((group: QueryFilter | QueryFilterGroup) => {
4242
const groupFilters = 'filters' in group ? group.filters : [group]
4343
const op = 'filters' in group ? group.operator : 'OR'
44-
return groupFilters[op === 'AND' ? 'every' : 'some']((filter: QueryFilter) => {
44+
return groupFilters.filter(filter => filter.condition?.() ?? true)[op === 'AND' ? 'every' : 'some']((filter: QueryFilter) => {
4545
const value = getObjectProperty(item, filter.key)
4646
const operator = typeof filter.operator === 'function' ? filter.operator() : filter.operator ?? 'OR'
4747
const params = (!('params' in filter) ? null : typeof filter.params === 'function' ? filter.params(filter.value) : filter.params) ?? null

src/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,13 @@ export type QueryFilter<Paths extends string = string> = {
7979
key: Paths
8080
value: any
8181
operator?: Operator
82+
condition?: () => boolean
8283
} & MatchModeCore
8384

8485
export interface QueryFilterGroup<Paths extends string = string> {
8586
operator: Operator
8687
filters: QueryFilter<Paths>[]
88+
condition?: () => boolean
8789
}
8890

8991
export type FilterOptions<Paths extends string = string> = Array<QueryFilterGroup<Paths>> | Array<QueryFilter<Paths>>

0 commit comments

Comments
 (0)