mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
Support sort and filter by published in resolver
This commit is contained in:
parent
61065efd2b
commit
a35b096d73
2 changed files with 33 additions and 46 deletions
|
|
@ -448,16 +448,7 @@ export const getArticlesResolver = authorized<
|
|||
event: 'get_articles',
|
||||
properties: {
|
||||
env: env.server.apiEnv,
|
||||
query: searchQuery.query,
|
||||
inFilter: searchQuery.inFilter,
|
||||
readFilter: searchQuery.readFilter,
|
||||
typeFilter: searchQuery.typeFilter,
|
||||
labelFilters: searchQuery.labelFilters,
|
||||
sortParams: searchQuery.sortParams,
|
||||
hasFilters: searchQuery.hasFilters,
|
||||
savedDateFilter: searchQuery.savedDateFilter,
|
||||
publishedDateFilter: searchQuery.publishedDateFilter,
|
||||
subscriptionFilter: searchQuery.subscriptionFilter,
|
||||
...searchQuery,
|
||||
},
|
||||
})
|
||||
|
||||
|
|
@ -466,16 +457,8 @@ export const getArticlesResolver = authorized<
|
|||
from: Number(startCursor),
|
||||
size: first + 1, // fetch one more item to get next cursor
|
||||
sort: searchQuery.sortParams,
|
||||
query: searchQuery.query,
|
||||
inFilter: searchQuery.inFilter,
|
||||
readFilter: searchQuery.readFilter,
|
||||
typeFilter: searchQuery.typeFilter,
|
||||
labelFilters: searchQuery.labelFilters,
|
||||
hasFilters: searchQuery.hasFilters,
|
||||
savedDateFilter: searchQuery.savedDateFilter,
|
||||
publishedDateFilter: searchQuery.publishedDateFilter,
|
||||
subscriptionFilter: searchQuery.subscriptionFilter,
|
||||
includePending: params.includePending,
|
||||
...searchQuery,
|
||||
},
|
||||
claims.uid
|
||||
)) || [[], 0]
|
||||
|
|
@ -818,16 +801,8 @@ export const searchResolver = authorized<
|
|||
userId: claims.uid,
|
||||
event: 'search',
|
||||
properties: {
|
||||
query: searchQuery.query,
|
||||
inFilter: searchQuery.inFilter,
|
||||
readFilter: searchQuery.readFilter,
|
||||
typeFilter: searchQuery.typeFilter,
|
||||
labelFilters: searchQuery.labelFilters,
|
||||
sortParams: searchQuery.sortParams,
|
||||
hasFilters: searchQuery.hasFilters,
|
||||
savedDateFilter: searchQuery.savedDateFilter,
|
||||
publishedDateFilter: searchQuery.publishedDateFilter,
|
||||
env: env.server.apiEnv,
|
||||
...searchQuery,
|
||||
},
|
||||
})
|
||||
|
||||
|
|
@ -853,16 +828,8 @@ export const searchResolver = authorized<
|
|||
from: Number(startCursor),
|
||||
size: first + 1, // fetch one more item to get next cursor
|
||||
sort: searchQuery.sortParams,
|
||||
query: searchQuery.query,
|
||||
inFilter: searchQuery.inFilter,
|
||||
readFilter: searchQuery.readFilter,
|
||||
typeFilter: searchQuery.typeFilter,
|
||||
labelFilters: searchQuery.labelFilters,
|
||||
hasFilters: searchQuery.hasFilters,
|
||||
savedDateFilter: searchQuery.savedDateFilter,
|
||||
publishedDateFilter: searchQuery.publishedDateFilter,
|
||||
subscriptionFilter: searchQuery.subscriptionFilter,
|
||||
includePending: true,
|
||||
...searchQuery,
|
||||
},
|
||||
claims.uid
|
||||
)) || [[], 0]
|
||||
|
|
|
|||
|
|
@ -31,8 +31,7 @@ export type SearchFilter = {
|
|||
labelFilters: LabelFilter[]
|
||||
sortParams?: SortParams
|
||||
hasFilters: HasFilter[]
|
||||
savedDateFilter?: DateRangeFilter
|
||||
publishedDateFilter?: DateRangeFilter
|
||||
dateFilters: DateFilter[]
|
||||
subscriptionFilter?: SubscriptionFilter
|
||||
}
|
||||
|
||||
|
|
@ -51,7 +50,8 @@ export enum HasFilter {
|
|||
SHARED_AT,
|
||||
}
|
||||
|
||||
export type DateRangeFilter = {
|
||||
export interface DateFilter {
|
||||
field: string
|
||||
startDate?: Date
|
||||
endDate?: Date
|
||||
}
|
||||
|
|
@ -60,6 +60,7 @@ export enum SortBy {
|
|||
SAVED = 'savedAt',
|
||||
UPDATED = 'updatedAt',
|
||||
SCORE = '_score',
|
||||
PUBLISHED = 'publishedAt',
|
||||
}
|
||||
|
||||
export enum SortOrder {
|
||||
|
|
@ -67,7 +68,7 @@ export enum SortOrder {
|
|||
DESCENDING = 'desc',
|
||||
}
|
||||
|
||||
export type SortParams = {
|
||||
export interface SortParams {
|
||||
by: SortBy
|
||||
order?: SortOrder
|
||||
}
|
||||
|
|
@ -171,6 +172,11 @@ const parseSortParams = (str?: string): SortParams | undefined => {
|
|||
return {
|
||||
by: SortBy.SCORE,
|
||||
}
|
||||
case 'PUBLISHED':
|
||||
return {
|
||||
by: SortBy.PUBLISHED,
|
||||
order: sortOrder,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -185,7 +191,10 @@ const parseHasFilter = (str?: string): HasFilter | undefined => {
|
|||
}
|
||||
}
|
||||
|
||||
const parseDateRangeFilter = (str?: string): DateRangeFilter | undefined => {
|
||||
const parseDateFilter = (
|
||||
field: string,
|
||||
str?: string
|
||||
): DateFilter | undefined => {
|
||||
if (str === undefined) {
|
||||
return undefined
|
||||
}
|
||||
|
|
@ -194,7 +203,16 @@ const parseDateRangeFilter = (str?: string): DateRangeFilter | undefined => {
|
|||
const startDate = start && start !== '*' ? new Date(start) : undefined
|
||||
const endDate = end && end !== '*' ? new Date(end) : undefined
|
||||
|
||||
switch (field.toUpperCase()) {
|
||||
case 'PUBLISHED':
|
||||
field = 'publishedAt'
|
||||
break
|
||||
case 'SAVED':
|
||||
field = 'savedAt'
|
||||
}
|
||||
|
||||
return {
|
||||
field,
|
||||
startDate,
|
||||
endDate,
|
||||
}
|
||||
|
|
@ -220,6 +238,7 @@ export const parseSearchQuery = (query: string | undefined): SearchFilter => {
|
|||
inFilter: searchQuery ? InFilter.ALL : InFilter.INBOX,
|
||||
labelFilters: [],
|
||||
hasFilters: [],
|
||||
dateFilters: [],
|
||||
}
|
||||
|
||||
if (!searchQuery) {
|
||||
|
|
@ -229,6 +248,7 @@ export const parseSearchQuery = (query: string | undefined): SearchFilter => {
|
|||
readFilter: ReadFilter.ALL,
|
||||
labelFilters: [],
|
||||
hasFilters: [],
|
||||
dateFilters: [],
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -296,11 +316,11 @@ export const parseSearchQuery = (query: string | undefined): SearchFilter => {
|
|||
break
|
||||
}
|
||||
case 'saved':
|
||||
result.savedDateFilter = parseDateRangeFilter(keyword.value)
|
||||
break
|
||||
case 'published':
|
||||
result.publishedDateFilter = parseDateRangeFilter(keyword.value)
|
||||
case 'published': {
|
||||
const dateFilter = parseDateFilter(keyword.keyword, keyword.value)
|
||||
dateFilter && result.dateFilters.push(dateFilter)
|
||||
break
|
||||
}
|
||||
case 'subscription':
|
||||
result.subscriptionFilter = parseSubscriptionFilter(keyword.value)
|
||||
break
|
||||
|
|
|
|||
Loading…
Reference in a new issue