fix: home items order is not accurate

This commit is contained in:
Hongbo Wu 2024-05-28 21:29:35 +08:00
parent 3aed295340
commit 5257d95559
3 changed files with 63 additions and 31 deletions

View file

@ -311,7 +311,8 @@ const mixHomeItems = (rankedHomeItems: Array<Candidate>): Array<Section> => {
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 (

View file

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

View file

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