import { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import { useJellyfinContext } from '../context/JellyfinContext/JellyfinContext'; import { usePageTitle } from '../context/PageTitleContext/PageTitleContext'; import { MediaItem } from '../api/jellyfin'; import { Loader } from '../components/Loader'; import './Genres.css'; export const Genres = () => { const { setPageTitle } = usePageTitle(); const api = useJellyfinContext(); const [genres, setGenres] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { setPageTitle('Genres'); }, [setPageTitle]); useEffect(() => { const fetchAllGenres = async () => { setLoading(true); setError(null); try { // Get genres by searching with empty term (should return all) const allGenres = await api.searchGenres('', 200); setGenres(allGenres || []); } catch (err) { console.error('Error fetching genres:', err); setError('Failed to load genres'); } finally { setLoading(false); } }; if (api.auth.token) { fetchAllGenres(); } }, [api]); if (loading) { return ; } if (error) { return
{error}
; } return (

Music Genres

Browse your music by genre

{genres.length === 0 ? (

No genres found in your music library

) : (
{genres.map((genre) => (

{genre.Name}

{genre.UserData?.UnplayedItemCount !== undefined && (

{genre.UserData.UnplayedItemCount} tracks

)}
))}
)}
); };