mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
add label filters in search query
This commit is contained in:
parent
fc37d06fd2
commit
9599c98c77
1 changed files with 20 additions and 2 deletions
|
|
@ -5,8 +5,8 @@
|
|||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
||||
import {
|
||||
parse,
|
||||
SearchParserTextOffset,
|
||||
SearchParserKeyWordOffset,
|
||||
SearchParserTextOffset,
|
||||
} from 'search-query-parser'
|
||||
import { PageType } from '../generated/graphql'
|
||||
|
||||
|
|
@ -27,6 +27,7 @@ export type SearchFilter = {
|
|||
inFilter: InFilter
|
||||
readFilter: ReadFilter
|
||||
typeFilter?: PageType | undefined
|
||||
labelFilters?: string[]
|
||||
}
|
||||
|
||||
const parseIsFilter = (str: string | undefined): ReadFilter => {
|
||||
|
|
@ -77,6 +78,17 @@ const parseTypeFilter = (str: string | undefined): PageType | undefined => {
|
|||
return undefined
|
||||
}
|
||||
|
||||
const parseLabelFilters = (
|
||||
str: string | undefined,
|
||||
labelFilters: string[] | undefined
|
||||
): string[] | undefined => {
|
||||
if (str === undefined) {
|
||||
return labelFilters
|
||||
}
|
||||
|
||||
return labelFilters ? labelFilters.concat(str) : [str]
|
||||
}
|
||||
|
||||
export const parseSearchQuery = (query: string | undefined): SearchFilter => {
|
||||
const searchQuery = query ? query.replace(/\W\s":/g, '') : undefined
|
||||
const result: SearchFilter = {
|
||||
|
|
@ -94,7 +106,7 @@ export const parseSearchQuery = (query: string | undefined): SearchFilter => {
|
|||
}
|
||||
|
||||
const parsed = parse(searchQuery, {
|
||||
keywords: ['in', 'is', 'type'],
|
||||
keywords: ['in', 'is', 'type', 'label'],
|
||||
tokenize: true,
|
||||
})
|
||||
if (parsed.offsets) {
|
||||
|
|
@ -133,6 +145,12 @@ export const parseSearchQuery = (query: string | undefined): SearchFilter => {
|
|||
case 'type':
|
||||
result.typeFilter = parseTypeFilter(keyword.value)
|
||||
break
|
||||
case 'label':
|
||||
result.labelFilters = parseLabelFilters(
|
||||
keyword.value,
|
||||
result.labelFilters
|
||||
)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue