Skip to content

Commit 3fdb5ce

Browse files
committed
fix(filters): properly apply filter groups
1 parent 9a8f02d commit 3fdb5ce

2 files changed

Lines changed: 8 additions & 4 deletions

File tree

src/query.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { FilterMatchMode, GenericObject, MatchModeProcessorMap, QueryParams, QueryResult } from './types'
1+
import type { FilterMatchMode, GenericObject, MatchModeProcessorMap, QueryFilter, QueryFilterGroup, QueryParams, QueryResult } from './types'
22
import { MatchModeProcessor, getObjectProperty, validateBetweenPayload } from './utils'
33

44
export function query<T extends GenericObject, P extends QueryParams>(
@@ -38,7 +38,10 @@ export function query<T extends GenericObject, P extends QueryParams>(
3838

3939
if (Array.isArray(params.filter) && params.filter.length) {
4040
result = result.filter((item) => {
41-
return (params.filter ?? []).every((group) => {
41+
const IS_GROUP = params.filter?.every(filter => 'filters' in filter) ?? false
42+
const METHOD = IS_GROUP ? 'some' : 'every' as const
43+
const FILTERS = (params?.filter ?? []) as any[]
44+
return FILTERS[METHOD]((group: QueryFilter | QueryFilterGroup) => {
4245
const filters = 'filters' in group ? group.filters : [group]
4346
const op = 'filters' in group ? group.operator : 'OR'
4447
return filters[op === 'AND' ? 'every' : 'some' as const]((filter) => {

src/types.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ export interface QueryFilterGroup {
5555
filters: QueryFilter[]
5656
}
5757

58+
export type FilterOptions = Array<QueryFilterGroup> | Array<QueryFilter>
59+
5860
export interface SearchOptions {
5961
value: string
6062
keys: string[] | Array<{ key: string, caseSensitive?: boolean }>
@@ -66,15 +68,14 @@ export interface SortOptions {
6668
dir?: 'asc' | 'desc'
6769
}
6870

69-
export type FilterOptions = Array<QueryFilter | QueryFilterGroup>
70-
7171
export interface QueryParams {
7272
sort?: SortOptions | Array<SortOptions>
7373
search?: SearchOptions
7474
filter?: FilterOptions
7575
limit?: number
7676
offset?: number
7777
}
78+
7879
export type QueryResult<T extends GenericObject, P extends QueryParams> = P extends { limit: number } ? { totalRows: number, totalPages: number, rows: T[], unpaginatedRows: T[] } : { rows: T[] }
7980

8081
export interface MatchModeProcessorMap {

0 commit comments

Comments
 (0)