import { HeartFillIcon, HeartIcon } from '@primer/octicons-react' 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 { MoreIcon } from '../components/SvgIcons' import { useDropdownContext } from '../context/DropdownContext/DropdownContext' import { usePageTitle } from '../context/PageTitleContext/PageTitleContext' import { usePlaybackContext } from '../context/PlaybackContext/PlaybackContext' import { useJellyfinPlaylistData } from '../hooks/Jellyfin/Infinite/useJellyfinPlaylistData' import { useFavorites } from '../hooks/useFavorites' import { formatDate } from '../utils/formatDate' import { formatDurationReadable } from '../utils/formatDurationReadable' import './Playlist.css' export const Playlist = () => { const playback = usePlaybackContext() const { addToFavorites, removeFromFavorites } = useFavorites() const { playlistId } = useParams<{ playlistId: string }>() const { playlistData, items: tracks, infiniteData, isLoading, error, totalPlaytime, totalTrackCount, totalPlays, reviver, loadMore, } = useJellyfinPlaylistData(playlistId!) const { setPageTitle } = usePageTitle() const { isOpen, selectedItem, onContextMenu } = useDropdownContext() useEffect(() => { if (playlistData) { setPageTitle(playlistData.Name) } return () => { setPageTitle('') } }, [playlistData, setPageTitle]) if (isLoading && tracks.length === 0) { return } if (error || !playlistData) { return
{error || 'Playlist not found'}
} const handleMoreClick = (e: React.MouseEvent) => { e.stopPropagation() onContextMenu(e, { item: playlistData }, true, { add_to_favorite: true, remove_from_favorite: true }) } return (
{playlistData.Name}
{formatDate(playlistData.DateCreated)}
{totalTrackCount}{' '} {totalTrackCount === 1 ? 'Track' : 'Tracks'}
{formatDurationReadable(totalPlaytime)} Total
{totalPlays > 0 && ( <>
{totalPlays} {totalPlays === 1 ? 'Play' : 'Plays'}
)}
{ playback.setCurrentPlaylistSimple({ playlist: tracks, title: playlistData.Name }) playback.playTrack(0) }} >
Play
{ if (playlistData?.Id) { try { if (playlistData.UserData?.IsFavorite) { await removeFromFavorites(playlistData) } else { await addToFavorites(playlistData) } } catch (error) { console.error('Failed to update favorite status:', error) } } }} > {playlistData.UserData?.IsFavorite ? ( ) : ( )}
) }