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
}
})