From 29e2bf45e3321c4437f033c6cac1e512c47abae1 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Tue, 5 Dec 2023 20:40:02 +0800 Subject: [PATCH] allow use:folders in search string for new clients to filter inbox items --- packages/api/src/resolvers/article/index.ts | 1 + packages/api/src/services/library_item.ts | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/api/src/resolvers/article/index.ts b/packages/api/src/resolvers/article/index.ts index 05b74a696..22413fe27 100644 --- a/packages/api/src/resolvers/article/index.ts +++ b/packages/api/src/resolvers/article/index.ts @@ -658,6 +658,7 @@ export const searchResolver = authorized< includeContent: !!params.includeContent, includeDeleted: params.query?.includes('in:trash'), query: params.query, + useFolders: params.query?.includes('use:folders'), }, uid ) diff --git a/packages/api/src/services/library_item.ts b/packages/api/src/services/library_item.ts index 823a62852..ee8bab352 100644 --- a/packages/api/src/services/library_item.ts +++ b/packages/api/src/services/library_item.ts @@ -153,7 +153,8 @@ export const buildQuery = ( searchQuery: LiqeQuery, parameters: ObjectLiteral[] = [], selects: Select[] = [], - orders: { by: string; order?: SortOrder }[] = [] + orders: { by: string; order?: SortOrder }[] = [], + useFolders = false ) => { const escapeQueryWithParameters = ( query: string, @@ -220,9 +221,13 @@ export const buildQuery = ( // return only deleted pages within 14 days return "library_item.deleted_at >= now() - interval '14 days'" default: { + if (!useFolders) { + throw new Error(`Unexpected keyword: ${folder}`) + } + const param = `folder_${parameters.length}` return escapeQueryWithParameters( - `library_item.folder = :${param}`, + `(library_item.folder = :${param} AND library_item.archived_at IS NULL)`, { [param]: folder } ) } @@ -653,7 +658,13 @@ export const searchLibraryItems = async ( const parameters: ObjectLiteral[] = [] const selects: Select[] = [] const orders: Sort[] = [] - const whereClause = buildQuery(searchQuery, parameters, selects, orders) + const whereClause = buildQuery( + searchQuery, + parameters, + selects, + orders, + args.useFolders + ) whereClause && queryBuilder .andWhere(whereClause)