diff options
| author | Adam Mathes <adam@adammathes.com> | 2026-02-13 19:16:18 -0800 |
|---|---|---|
| committer | Adam Mathes <adam@adammathes.com> | 2026-02-13 19:16:18 -0800 |
| commit | ea39f5aac74621861f6d88f98f0e0ca2eaad82f8 (patch) | |
| tree | 97bd020e4db3287270ae708ebc65015f45a15127 /frontend/src/components/FeedList.tsx | |
| parent | ea523255778c598e0551626f98194c12487d4018 (diff) | |
| download | neko-ea39f5aac74621861f6d88f98f0e0ca2eaad82f8.tar.gz neko-ea39f5aac74621861f6d88f98f0e0ca2eaad82f8.tar.bz2 neko-ea39f5aac74621861f6d88f98f0e0ca2eaad82f8.zip | |
feat(ui): collapsible feed list (NK-4juza2)
Diffstat (limited to 'frontend/src/components/FeedList.tsx')
| -rw-r--r-- | frontend/src/components/FeedList.tsx | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/frontend/src/components/FeedList.tsx b/frontend/src/components/FeedList.tsx index 4af1bbc..56c96cd 100644 --- a/frontend/src/components/FeedList.tsx +++ b/frontend/src/components/FeedList.tsx @@ -8,6 +8,7 @@ export default function FeedList({ theme, setTheme }: { theme: string, setTheme: const [tags, setTags] = useState<Category[]>([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); + const [feedsExpanded, setFeedsExpanded] = useState(false); const [searchQuery, setSearchQuery] = useState(''); const navigate = useNavigate(); const [searchParams] = useSearchParams(); @@ -23,6 +24,10 @@ export default function FeedList({ theme, setTheme }: { theme: string, setTheme: } }; + const toggleFeeds = () => { + setFeedsExpanded(!feedsExpanded); + }; + useEffect(() => { Promise.all([ fetch('/api/feed/').then(res => { @@ -69,20 +74,24 @@ export default function FeedList({ theme, setTheme }: { theme: string, setTheme: </ul> </div> <div className="feed-section"> - <h2>Feeds</h2> - {feeds.length === 0 ? ( - <p>No feeds found.</p> - ) : ( - <ul className="feed-list-items"> - {feeds.map((feed) => ( - <li key={feed._id} className="sidebar-feed-item"> - <Link to={`/feed/${feed._id}`} className={`feed-title ${feedId === String(feed._id) ? 'active' : ''}`}> - {feed.title || feed.url} - </Link> - {feed.category && <span className="feed-category">{feed.category}</span>} - </li> - ))} - </ul> + <h2 onClick={toggleFeeds} className="feed-section-header"> + <span className="toggle-indicator">{feedsExpanded ? '▼' : '▶'}</span> Feeds + </h2> + {feedsExpanded && ( + feeds.length === 0 ? ( + <p>No feeds found.</p> + ) : ( + <ul className="feed-list-items"> + {feeds.map((feed) => ( + <li key={feed._id} className="sidebar-feed-item"> + <Link to={`/feed/${feed._id}`} className={`feed-title ${feedId === String(feed._id) ? 'active' : ''}`}> + {feed.title || feed.url} + </Link> + {feed.category && <span className="feed-category">{feed.category}</span>} + </li> + ))} + </ul> + ) )} </div> |
