diff --git a/packages/api/src/jobs/update_home.ts b/packages/api/src/jobs/update_home.ts index d60d4a3e4..f2d6d5e59 100644 --- a/packages/api/src/jobs/update_home.ts +++ b/packages/api/src/jobs/update_home.ts @@ -311,7 +311,8 @@ const mixHomeItems = (rankedHomeItems: Array): Array
=> { const authorCount = batch.filter((i) => i.author === item.author).length const siteCount = batch.filter((i) => i.siteName === item.siteName).length const subscriptionCount = batch.filter( - (i) => i.subscription?.name === item.subscription?.name + (i) => + item.subscription && i.subscription?.name === item.subscription.name ).length return ( diff --git a/packages/api/src/resolvers/function_resolvers.ts b/packages/api/src/resolvers/function_resolvers.ts index 6f4e84ee9..6e84fcc50 100644 --- a/packages/api/src/resolvers/function_resolvers.ts +++ b/packages/api/src/resolvers/function_resolvers.ts @@ -639,7 +639,9 @@ export const functionResolvers = { _: unknown, ctx: WithDataSourcesContext ) { - const libraryItemIds = section.items + const items = section.items + + const libraryItemIds = items .filter((item) => item.type === 'library_item') .map((item) => item.id) const libraryItems = ( @@ -653,10 +655,13 @@ export const functionResolvers = { await ctx.dataLoaders.publicItems.loadMany(publicItemIds) ).filter((publicItem) => !isError(publicItem)) as Array - return libraryItems - .map( - (libraryItem) => - ({ + return items + .map((item) => { + const libraryItem = libraryItems.find( + (libraryItem) => item.id === libraryItem.id + ) + if (libraryItem) { + return { id: libraryItem.id, title: libraryItem.title, author: libraryItem.author, @@ -667,36 +672,43 @@ export const functionResolvers = { canArchive: !libraryItem.archivedAt, canDelete: !libraryItem.deletedAt, canSave: false, + canComment: false, + canShare: true, dir: libraryItem.directionality, previewContent: libraryItem.description, subscription: libraryItem.subscription, siteName: libraryItem.siteName, siteIcon: libraryItem.siteIcon, - } as HomeItem) - ) - .concat( - publicItems.map( - (publicItem) => - ({ - id: publicItem.id, - title: publicItem.title, - author: publicItem.author, - dir: publicItem.dir, - previewContent: publicItem.previewContent, - thumbnail: publicItem.thumbnail, - wordCount: publicItem.wordCount, - date: publicItem.createdAt, - url: publicItem.url, - canArchive: false, - canDelete: false, - canSave: true, - broadcastCount: publicItem.stats.broadcastCount, - likeCount: publicItem.stats.likeCount, - saveCount: publicItem.stats.saveCount, - source: publicItem.source, - } as HomeItem) + } + } + + const publicItem = publicItems.find( + (publicItem) => item.id === publicItem.id ) - ) + if (publicItem) { + return { + id: publicItem.id, + title: publicItem.title, + author: publicItem.author, + dir: publicItem.dir, + previewContent: publicItem.previewContent, + thumbnail: publicItem.thumbnail, + wordCount: publicItem.wordCount, + date: publicItem.createdAt, + url: publicItem.url, + canArchive: false, + canDelete: false, + canSave: true, + canComment: true, + canShare: true, + broadcastCount: publicItem.stats.broadcastCount, + likeCount: publicItem.stats.likeCount, + saveCount: publicItem.stats.saveCount, + source: publicItem.source, + } + } + }) + .filter((item) => !!item) }, }, HomeItem: { diff --git a/packages/api/src/services/library_item.ts b/packages/api/src/services/library_item.ts index b90aa0e80..d242c9f31 100644 --- a/packages/api/src/services/library_item.ts +++ b/packages/api/src/services/library_item.ts @@ -141,7 +141,26 @@ interface Select { const readingProgressDataSource = new ReadingProgressDataSource() export const batchGetLibraryItems = async (ids: readonly string[]) => { - return findLibraryItemsByIds(ids as string[]) + const items = await findLibraryItemsByIds(ids as string[], undefined, { + select: [ + 'id', + 'title', + 'author', + 'thumbnail', + 'wordCount', + 'savedAt', + 'originalUrl', + 'directionality', + 'description', + 'subscription', + 'siteName', + 'siteIcon', + 'archivedAt', + 'deletedAt', + ], + }) + + return ids.map((id) => items.find((item) => item.id === id) || null) } export const getItemUrl = (id: string) => `${env.client.url}/me/${id}`