diff --git a/src/renderer/src/components/feed-list.tsx b/src/renderer/src/components/feed-list.tsx index f84d9aee6..2a3f33dae 100644 --- a/src/renderer/src/components/feed-list.tsx +++ b/src/renderer/src/components/feed-list.tsx @@ -6,26 +6,20 @@ import { useState } from 'react' export function FeedList({ type }: { type: string }) { const feeds = useFeeds() - const categories = {} - feeds.data?.forEach((feed) => { - if (!categories[feed.category.title]) { - categories[feed.category.title] = [] - } - categories[feed.category.title].push(feed) - }) - console.log('categories', categories) - return (
-
{type}
- {Object.keys(categories).map((category) => ( - +
+
{type}
+
{feeds.data?.unread}
+
+ {Object.keys(feeds.data?.list || {}).map((category) => ( + ))}
) } -function FeedCategory({ name, list }: { name: string; list: any[] }) { +function FeedCategory({ name, data }: { name: string; data: any }) { const [open, setOpen] = useState(false) return ( @@ -33,9 +27,12 @@ function FeedCategory({ name, list }: { name: string; list: any[] }) { open={open} onOpenChange={(o) => setOpen(o)} > - - - {name} + +
+ + {name} +
+ {!!data.unread &&
{data.unread}
}
{open && ( @@ -60,16 +57,19 @@ function FeedCategory({ name, list }: { name: string; list: any[] }) { opacity: 0 }} > - {list.map((feed) => ( + {data.list.map((feed) => (
- -
{feed.title}
+
+ +
{feed.title}
+
+ {!!feed.unread &&
{feed.unread}
}
))} diff --git a/src/renderer/src/lib/feeds.ts b/src/renderer/src/lib/feeds.ts index bc7890b86..3a1fa9842 100644 --- a/src/renderer/src/lib/feeds.ts +++ b/src/renderer/src/lib/feeds.ts @@ -4,10 +4,34 @@ export const useFeeds = () => useQuery({ queryKey: ['feeds'], queryFn: async () => { - return (await fetch(`${import.meta.env.VITE_MINIFLUX_ENDPOINT}/v1/feeds`, { + const feeds = await (await fetch(`${import.meta.env.VITE_MINIFLUX_ENDPOINT}/v1/feeds`, { headers: { 'X-Auth-Token': import.meta.env.VITE_MINIFLUX_TOKEN } })).json() + const counters = await (await fetch(`${import.meta.env.VITE_MINIFLUX_ENDPOINT}/v1/feeds/counters`, { + headers: { + 'X-Auth-Token': import.meta.env.VITE_MINIFLUX_TOKEN + } + })).json() + + const categories = { + list: {}, + unread: 0, + } + feeds?.forEach((feed) => { + if (!categories.list[feed.category.title]) { + categories.list[feed.category.title] = { + list: [], + unread: 0 + } + } + const unread = counters.unreads[feed.id] || 0 + feed.unread = unread + categories.list[feed.category.title].list.push(feed) + categories.list[feed.category.title].unread += unread + categories.unread += unread + }) + return categories } })