import { useEffect } from 'react' import { useParams } from 'react-router-dom' import { JellyImg } from '../components/JellyImg' import { Loader } from '../components/Loader' import { PlaylistTrackList } from '../components/PlaylistTrackList' import { Squircle } from '../components/Squircle' import { usePageTitle } from '../context/PageTitleContext/PageTitleContext' import { usePlaybackContext } from '../context/PlaybackContext/PlaybackContext' import { useJellyfinInstantMixData } from '../hooks/Jellyfin/useJellyfinInstantMixData' import { formatDurationReadable } from '../utils/formatDurationReadable' import './InstantMix.css' export const InstantMix = () => { const { songId } = useParams<{ songId: string }>() const { items, loading, error } = useJellyfinInstantMixData({ songId }) const playback = usePlaybackContext() const { setPageTitle } = usePageTitle() const sourceSong = items.find(item => item.Id === songId) useEffect(() => { if (sourceSong) { setPageTitle(`Instant Mix - ${sourceSong.Name}`) } return () => { setPageTitle('') } }, [sourceSong, setPageTitle]) if (loading && items.length === 0) { return } if (error) { return
{error}
} const totalPlaytime = items.reduce((total, item) => total + (item.RunTimeTicks || 0), 0) return (
Instant Mix
Based on {sourceSong?.Name || 'Unknown Song'}
{items.length}{' '} {items.length === 1 ? 'Track' : 'Tracks'}
{formatDurationReadable(totalPlaytime)} Total
{ playback.setCurrentPlaylistSimple({ playlist: items, title: 'Instant Mix' }) playback.playTrack(0) }} >
Play
) }