mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
Allow search for subscription:name (#461)
This commit is contained in:
parent
9c72f99520
commit
71aa66ea9c
5 changed files with 48 additions and 1 deletions
|
|
@ -99,7 +99,8 @@
|
|||
"type": "text"
|
||||
},
|
||||
"subscription": {
|
||||
"type": "keyword"
|
||||
"type": "keyword",
|
||||
"normalizer": "lowercase_normalizer"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import {
|
|||
SortBy,
|
||||
SortOrder,
|
||||
SortParams,
|
||||
SubscriptionFilter,
|
||||
} from '../utils/search'
|
||||
import { client, INDEX_ALIAS } from './index'
|
||||
import { EntityType } from '../datalayer/pubsub'
|
||||
|
|
@ -170,6 +171,17 @@ const appendPublishedDateFilter = (
|
|||
})
|
||||
}
|
||||
|
||||
const appendSubscriptionFilter = (
|
||||
body: SearchBody,
|
||||
filter: SubscriptionFilter
|
||||
): void => {
|
||||
body.query.bool.filter.push({
|
||||
term: {
|
||||
subscription: filter.name,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
export const createPage = async (
|
||||
page: Page,
|
||||
ctx: PageContext
|
||||
|
|
@ -322,6 +334,7 @@ export const searchPages = async (
|
|||
hasFilters?: HasFilter[]
|
||||
savedDateFilter?: DateRangeFilter
|
||||
publishedDateFilter?: DateRangeFilter
|
||||
subscriptionFilter?: SubscriptionFilter
|
||||
},
|
||||
userId: string
|
||||
): Promise<[Page[], number] | undefined> => {
|
||||
|
|
@ -338,6 +351,7 @@ export const searchPages = async (
|
|||
hasFilters = [],
|
||||
savedDateFilter,
|
||||
publishedDateFilter,
|
||||
subscriptionFilter,
|
||||
} = args
|
||||
// default order is descending
|
||||
const sortOrder = sort?.order || SortOrder.DESCENDING
|
||||
|
|
@ -406,6 +420,9 @@ export const searchPages = async (
|
|||
if (publishedDateFilter) {
|
||||
appendPublishedDateFilter(body, publishedDateFilter)
|
||||
}
|
||||
if (subscriptionFilter) {
|
||||
appendSubscriptionFilter(body, subscriptionFilter)
|
||||
}
|
||||
|
||||
console.log('searching pages in elastic', JSON.stringify(body))
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,11 @@ export interface SearchBody {
|
|||
userId: string
|
||||
}
|
||||
}
|
||||
| {
|
||||
term: {
|
||||
subscription: string
|
||||
}
|
||||
}
|
||||
| { term: { pageType: string } }
|
||||
| { exists: { field: string } }
|
||||
| {
|
||||
|
|
|
|||
|
|
@ -463,6 +463,7 @@ export const getArticlesResolver = authorized<
|
|||
hasFilters: searchQuery.hasFilters,
|
||||
savedDateFilter: searchQuery.savedDateFilter,
|
||||
publishedDateFilter: searchQuery.publishedDateFilter,
|
||||
subscriptionFilter: searchQuery.subscriptionFilter,
|
||||
},
|
||||
})
|
||||
|
||||
|
|
@ -481,6 +482,7 @@ export const getArticlesResolver = authorized<
|
|||
hasFilters: searchQuery.hasFilters,
|
||||
savedDateFilter: searchQuery.savedDateFilter,
|
||||
publishedDateFilter: searchQuery.publishedDateFilter,
|
||||
subscriptionFilter: searchQuery.subscriptionFilter,
|
||||
},
|
||||
claims.uid
|
||||
)) || [[], 0]
|
||||
|
|
@ -859,6 +861,7 @@ export const searchResolver = authorized<
|
|||
hasFilters: searchQuery.hasFilters,
|
||||
savedDateFilter: searchQuery.savedDateFilter,
|
||||
publishedDateFilter: searchQuery.publishedDateFilter,
|
||||
subscriptionFilter: searchQuery.subscriptionFilter,
|
||||
},
|
||||
claims.uid
|
||||
)) || [[], 0]
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ export type SearchFilter = {
|
|||
hasFilters: HasFilter[]
|
||||
savedDateFilter?: DateRangeFilter
|
||||
publishedDateFilter?: DateRangeFilter
|
||||
subscriptionFilter?: SubscriptionFilter
|
||||
}
|
||||
|
||||
export enum LabelFilterType {
|
||||
|
|
@ -71,6 +72,10 @@ export type SortParams = {
|
|||
order?: SortOrder
|
||||
}
|
||||
|
||||
export type SubscriptionFilter = {
|
||||
name: string
|
||||
}
|
||||
|
||||
const parseIsFilter = (str: string | undefined): ReadFilter => {
|
||||
switch (str?.toUpperCase()) {
|
||||
case 'READ':
|
||||
|
|
@ -195,6 +200,18 @@ const parseDateRangeFilter = (str?: string): DateRangeFilter | undefined => {
|
|||
}
|
||||
}
|
||||
|
||||
const parseSubscriptionFilter = (
|
||||
str?: string
|
||||
): SubscriptionFilter | undefined => {
|
||||
if (str === undefined) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
return {
|
||||
name: str.toLowerCase(),
|
||||
}
|
||||
}
|
||||
|
||||
export const parseSearchQuery = (query: string | undefined): SearchFilter => {
|
||||
const searchQuery = query ? query.replace(/\W\s":/g, '') : undefined
|
||||
const result: SearchFilter = {
|
||||
|
|
@ -225,6 +242,7 @@ export const parseSearchQuery = (query: string | undefined): SearchFilter => {
|
|||
'has',
|
||||
'saved',
|
||||
'published',
|
||||
'subscription',
|
||||
],
|
||||
tokenize: true,
|
||||
})
|
||||
|
|
@ -283,6 +301,9 @@ export const parseSearchQuery = (query: string | undefined): SearchFilter => {
|
|||
case 'published':
|
||||
result.publishedDateFilter = parseDateRangeFilter(keyword.value)
|
||||
break
|
||||
case 'subscription':
|
||||
result.subscriptionFilter = parseSubscriptionFilter(keyword.value)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue