Merge pull request #3225 from omnivore-app/main

Web production deployment
This commit is contained in:
Hongbo Wu 2023-12-08 20:10:30 +08:00 committed by GitHub
commit b28a4620eb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 83 additions and 7 deletions

View file

@ -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>;

View file

@ -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

View file

@ -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',
})
})

View file

@ -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 {

View file

@ -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) {

View file

@ -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', () => {

View file

@ -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
}
`

View file

@ -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
}
}

View file

@ -10,6 +10,7 @@ export type UpdateFilterInput = {
category?: string
description?: string
visible?: boolean
folder?: string
}
type UpdateFilterOutput = {