From 3be5ef4311009fdb7543a1426d103ed6f38756ce Mon Sep 17 00:00:00 2001 From: DIYgod Date: Sun, 13 Aug 2023 00:57:37 +0100 Subject: [PATCH] feat: stable feed count --- data/filter.json | 2 +- src/components/home/HomeFeed.tsx | 3 -- src/models/home.model.ts | 47 +++++++++++++++++++++++++------- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/data/filter.json b/data/filter.json index af53b9e5..8d5b93e4 100644 --- a/data/filter.json +++ b/data/filter.json @@ -1,7 +1,7 @@ { "latest": [ 151, 53994, 54570, 54481, 54537, 54302, 53944, 55768, 55855, 56592, 54986, - 56875, 56873, 56666, 55996, 57407, 56249 + 56875, 56873, 56666, 55996, 57407, 56249, 57858 ], "comment": [54986] } diff --git a/src/components/home/HomeFeed.tsx b/src/components/home/HomeFeed.tsx index c94d75d5..6268ce3c 100644 --- a/src/components/home/HomeFeed.tsx +++ b/src/components/home/HomeFeed.tsx @@ -19,8 +19,6 @@ import { ExpandedNote } from "~/lib/types" import type { FeedType, SearchType } from "~/models/home.model" import { useGetFeed } from "~/queries/home" -import topics from "../../../data/topics.json" - export const HomeFeed = ({ type }: { type?: FeedType }) => { const { t } = useTranslation("common") const searchParams = useSearchParams() @@ -53,7 +51,6 @@ export const HomeFeed = ({ type }: { type?: FeedType }) => { } break case "topic": - const info = topics.find((t) => t.name === params.topic) feedConfig = { type, topic: params.topic, diff --git a/src/models/home.model.ts b/src/models/home.model.ts index fc7e4aec..858b8e29 100644 --- a/src/models/home.model.ts +++ b/src/models/home.model.ts @@ -785,22 +785,49 @@ export async function getFeed({ } } + let isFiltered = false resultAll.list = resultAll.list - .filter( - (post) => - countCharacters(post?.metadata?.content?.content || "") > - (post?.metadata?.content?.tags?.[0] === "comment" - ? 6 - : post?.metadata?.content?.tags?.[0] === "portfolio" - ? -1 - : 300) && - !(new Date(post.metadata?.content?.date_published || "") > new Date()), - ) + .filter((post) => { + let limit = 300 + switch (post?.metadata?.content?.tags?.[0]) { + case "comment": + limit = 6 + break + case "portfolio": + limit = -1 + break + } + const pass = + countCharacters(post?.metadata?.content?.content || "") > limit && + !(new Date(post.metadata?.content?.date_published || "") > new Date()) + if (!pass) { + isFiltered = true + } + return pass + }) .map((post) => { delete post.metadata?.content.content return post }) + if (isFiltered && resultAll.list.length < limit && resultAll.cursor) { + const next = await getFeed({ + type, + cursor: resultAll.cursor, + limit: limit - resultAll.list.length, + characterId, + daysInterval, + searchKeyword, + searchType, + tag, + useHTML, + topic, + }) + resultAll.list = resultAll.list.concat(next.list) + resultAll.cursor = next.cursor + resultAll.count = next.count + } + return resultAll }