mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
Merge pull request #3225 from omnivore-app/main
Web production deployment
This commit is contained in:
commit
b28a4620eb
9 changed files with 83 additions and 7 deletions
|
|
@ -815,11 +815,12 @@ export type FeedsSuccess = {
|
|||
|
||||
export type Filter = {
|
||||
__typename?: 'Filter';
|
||||
category?: Maybe<Scalars['String']>;
|
||||
createdAt: Scalars['Date'];
|
||||
defaultFilter?: Maybe<Scalars['Boolean']>;
|
||||
description?: Maybe<Scalars['String']>;
|
||||
filter: Scalars['String'];
|
||||
folder: Scalars['String'];
|
||||
folder?: Maybe<Scalars['String']>;
|
||||
id: Scalars['ID'];
|
||||
name: Scalars['String'];
|
||||
position: Scalars['Int'];
|
||||
|
|
@ -2238,6 +2239,7 @@ export enum SaveFilterErrorCode {
|
|||
}
|
||||
|
||||
export type SaveFilterInput = {
|
||||
category?: InputMaybe<Scalars['String']>;
|
||||
description?: InputMaybe<Scalars['String']>;
|
||||
filter: Scalars['String'];
|
||||
folder?: InputMaybe<Scalars['String']>;
|
||||
|
|
@ -2902,6 +2904,7 @@ export enum UpdateFilterErrorCode {
|
|||
}
|
||||
|
||||
export type UpdateFilterInput = {
|
||||
category?: InputMaybe<Scalars['String']>;
|
||||
description?: InputMaybe<Scalars['String']>;
|
||||
filter?: InputMaybe<Scalars['String']>;
|
||||
folder?: InputMaybe<Scalars['String']>;
|
||||
|
|
@ -4967,11 +4970,12 @@ export type FeedsSuccessResolvers<ContextType = ResolverContext, ParentType exte
|
|||
};
|
||||
|
||||
export type FilterResolvers<ContextType = ResolverContext, ParentType extends ResolversParentTypes['Filter'] = ResolversParentTypes['Filter']> = {
|
||||
category?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
||||
createdAt?: Resolver<ResolversTypes['Date'], ParentType, ContextType>;
|
||||
defaultFilter?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
|
||||
description?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
||||
filter?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
|
||||
folder?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
|
||||
folder?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
||||
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
|
||||
name?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
|
||||
position?: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
|
||||
|
|
|
|||
|
|
@ -722,11 +722,12 @@ type FeedsSuccess {
|
|||
}
|
||||
|
||||
type Filter {
|
||||
category: String
|
||||
createdAt: Date!
|
||||
defaultFilter: Boolean
|
||||
description: String
|
||||
filter: String!
|
||||
folder: String!
|
||||
folder: String
|
||||
id: ID!
|
||||
name: String!
|
||||
position: Int!
|
||||
|
|
@ -1691,6 +1692,7 @@ enum SaveFilterErrorCode {
|
|||
}
|
||||
|
||||
input SaveFilterInput {
|
||||
category: String
|
||||
description: String
|
||||
filter: String!
|
||||
folder: String
|
||||
|
|
@ -2306,6 +2308,7 @@ enum UpdateFilterErrorCode {
|
|||
}
|
||||
|
||||
input UpdateFilterInput {
|
||||
category: String
|
||||
description: String
|
||||
filter: String
|
||||
folder: String
|
||||
|
|
|
|||
|
|
@ -37,12 +37,13 @@ export const saveFilterResolver = authorized<
|
|||
return t.getRepository(Filter).save({
|
||||
user: { id: uid },
|
||||
name: input.name,
|
||||
folder: input.folder ?? undefined,
|
||||
folder: input.folder ?? 'inbox',
|
||||
description: '',
|
||||
position: input.position ?? 0,
|
||||
filter: input.filter,
|
||||
defaultFilter: false,
|
||||
visible: true,
|
||||
category: input.category ?? 'Search',
|
||||
})
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -2201,6 +2201,7 @@ const schema = gql`
|
|||
folder: String
|
||||
description: String
|
||||
position: Int
|
||||
category: String
|
||||
}
|
||||
|
||||
union SaveFilterResult = SaveFilterSuccess | SaveFilterError
|
||||
|
|
@ -2214,12 +2215,13 @@ const schema = gql`
|
|||
name: String!
|
||||
filter: String!
|
||||
position: Int!
|
||||
folder: String!
|
||||
folder: String
|
||||
description: String
|
||||
createdAt: Date!
|
||||
updatedAt: Date
|
||||
defaultFilter: Boolean
|
||||
visible: Boolean
|
||||
category: String
|
||||
}
|
||||
|
||||
type SaveFilterError {
|
||||
|
|
@ -2271,6 +2273,7 @@ const schema = gql`
|
|||
folder: String
|
||||
description: String
|
||||
visible: Boolean
|
||||
category: String
|
||||
}
|
||||
|
||||
enum UpdateFilterErrorCode {
|
||||
|
|
|
|||
|
|
@ -691,7 +691,7 @@ export const searchLibraryItems = async (
|
|||
if (query) {
|
||||
// add where clause from query
|
||||
queryBuilder
|
||||
.andWhere(query)
|
||||
.andWhere(`(${query})`)
|
||||
.setParameters(paramtersToObject(parameters))
|
||||
}
|
||||
|
||||
|
|
@ -1083,7 +1083,9 @@ export const updateLibraryItems = async (
|
|||
.where('library_item.user_id = :userId', { userId })
|
||||
|
||||
if (query) {
|
||||
queryBuilder.andWhere(query).setParameters(paramtersToObject(parameters))
|
||||
queryBuilder
|
||||
.andWhere(`(${query})`)
|
||||
.setParameters(paramtersToObject(parameters))
|
||||
}
|
||||
|
||||
if (addLabels) {
|
||||
|
|
|
|||
|
|
@ -1757,6 +1757,61 @@ describe('Article API', () => {
|
|||
expect(res.body.data.search.edges[1].node.id).to.eq(items[0].id)
|
||||
})
|
||||
})
|
||||
|
||||
context('when label:test1 OR label:test2 is in the query', () => {
|
||||
let items: LibraryItem[] = []
|
||||
let label1: Label
|
||||
let label2: Label
|
||||
|
||||
before(async () => {
|
||||
keyword = 'label:test1 OR label:test2'
|
||||
// Create some test items
|
||||
label1 = await createLabel('test1', '', user.id)
|
||||
label2 = await createLabel('test2', '', user.id)
|
||||
items = await createLibraryItems(
|
||||
[
|
||||
{
|
||||
user,
|
||||
title: 'test title 1',
|
||||
readableContent: '<p>test 1</p>',
|
||||
slug: 'test slug 1',
|
||||
originalUrl: `${url}/test1`,
|
||||
},
|
||||
{
|
||||
user,
|
||||
title: 'test title 2',
|
||||
readableContent: '<p>test 2</p>',
|
||||
slug: 'test slug 2',
|
||||
originalUrl: `${url}/test2`,
|
||||
},
|
||||
{
|
||||
user,
|
||||
title: 'test title 3',
|
||||
readableContent: '<p>test 3</p>',
|
||||
slug: 'test slug 3',
|
||||
originalUrl: `${url}/test3`,
|
||||
},
|
||||
],
|
||||
user.id
|
||||
)
|
||||
await saveLabelsInLibraryItem([label1], items[0].id, user.id)
|
||||
await saveLabelsInLibraryItem([label2], items[1].id, user.id)
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
await deleteLabels({ id: label1.id }, user.id)
|
||||
await deleteLabels({ id: label2.id }, user.id)
|
||||
await deleteLibraryItems(items, user.id)
|
||||
})
|
||||
|
||||
it('returns items with label test1 or test2', async () => {
|
||||
const res = await graphqlRequest(query, authToken).expect(200)
|
||||
|
||||
expect(res.body.data.search.pageInfo.totalCount).to.eq(2)
|
||||
expect(res.body.data.search.edges[0].node.id).to.eq(items[1].id)
|
||||
expect(res.body.data.search.edges[1].node.id).to.eq(items[0].id)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('TypeaheadSearch API', () => {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ export type SavedSearch = {
|
|||
position: number
|
||||
visible: boolean
|
||||
defaultFilter: boolean
|
||||
folder: string
|
||||
category: string
|
||||
}
|
||||
|
||||
export const savedSearchFragment = gql`
|
||||
|
|
@ -17,5 +19,7 @@ export const savedSearchFragment = gql`
|
|||
position
|
||||
visible
|
||||
defaultFilter
|
||||
folder
|
||||
category
|
||||
}
|
||||
`
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ export type AddFilterInput = {
|
|||
filter: string
|
||||
category: string
|
||||
position: number
|
||||
folder?: string
|
||||
}
|
||||
|
||||
type AddFilterOutput = {
|
||||
|
|
@ -27,6 +28,8 @@ export async function saveFilterMutation (
|
|||
position
|
||||
visible
|
||||
defaultFilter
|
||||
folder
|
||||
category
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ export type UpdateFilterInput = {
|
|||
category?: string
|
||||
description?: string
|
||||
visible?: boolean
|
||||
folder?: string
|
||||
}
|
||||
|
||||
type UpdateFilterOutput = {
|
||||
|
|
|
|||
Loading…
Reference in a new issue