import { useEffect, useState } from 'react'; import { Link, useNavigate, useSearchParams, useLocation, useParams } from 'react-router-dom'; import type { Feed, Category } from '../types'; import './FeedList.css'; import { apiFetch } from '../utils'; export default function FeedList({ theme, setTheme, setSidebarVisible, }: { theme: string; setTheme: (t: string) => void; setSidebarVisible: (visible: boolean) => void; }) { const [feeds, setFeeds] = useState([]); const [tags, setTags] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const [feedsExpanded, setFeedsExpanded] = useState(false); const [searchQuery, setSearchQuery] = useState(''); const navigate = useNavigate(); const [searchParams] = useSearchParams(); const location = useLocation(); const { feedId, tagName } = useParams(); const currentFilter = searchParams.get('filter') || (location.pathname === '/' && !feedId && !tagName ? 'unread' : ''); const handleSearch = (e: React.FormEvent) => { e.preventDefault(); if (searchQuery.trim()) { navigate(`/?q=${encodeURIComponent(searchQuery.trim())}`); } }; const toggleFeeds = () => { setFeedsExpanded(!feedsExpanded); }; useEffect(() => { Promise.all([ apiFetch('/api/feed/').then((res) => { if (!res.ok) throw new Error('Failed to fetch feeds'); return res.json(); }), apiFetch('/api/tag').then((res) => { if (!res.ok) throw new Error('Failed to fetch tags'); return res.json(); }), ]) .then(([feedsData, tagsData]) => { setFeeds(feedsData); setTags(tagsData); setLoading(false); }) .catch((err) => { setError(err.message); setLoading(false); }); }, []); if (loading) return
Loading feeds...
; if (error) return
Error: {error}
; const handleLogout = () => { apiFetch('/api/logout', { method: 'POST' }).then(() => (window.location.href = '/v2/login')); }; return (

setSidebarVisible(false)}> 🐱

setSearchQuery(e.target.value)} className="search-input" />
  • unread
  • all
  • starred

{ }} className="section-header"> Tags

    {tags.map((tag) => (
  • {tag.title}
  • ))}

Feeds

{feedsExpanded && (feeds.length === 0 ? (

No feeds found.

) : (
    {feeds.map((feed) => (
  • {feed.title || feed.url}
  • ))}
))}
  • settings
); }