import React, { FC, useContext } from "react"; import { BoxView, View, Button, ScrollArea, Text } from "@nodegui/react-nodegui"; import BackButton from "./BackButton"; import { useLocation, useParams } from "react-router"; import { Direction, QAbstractButtonSignals, QIcon } from "@nodegui/nodegui"; import { WidgetEventListeners } from "@nodegui/react-nodegui/dist/components/View/RNView"; import playerContext from "../context/playerContext"; import IconButton from "./shared/IconButton"; import { heartRegular, play, stop } from "../icons"; import { audioPlayer } from "./Player"; import { QueryCacheKeys } from "../conf"; import useSpotifyQuery from "../hooks/useSpotifyQuery"; export interface PlaylistTrackRes { name: string; artists: string; url: string; } const PlaylistView: FC = () => { const { setCurrentTrack, currentPlaylist, currentTrack, setCurrentPlaylist } = useContext(playerContext); const params = useParams<{ id: string }>(); const location = useLocation<{ name: string; thumbnail: string }>(); const { data: tracks, isSuccess, isError, isLoading, refetch } = useSpotifyQuery( [QueryCacheKeys.playlistTracks, params.id], (spotifyApi) => spotifyApi.getPlaylistTracks(params.id).then((track) => track.body.items), { initialData: [] } ); const handlePlaylistPlayPause = () => { if (currentPlaylist?.id !== params.id && isSuccess && tracks) { setCurrentPlaylist({ ...params, ...location.state, tracks }); setCurrentTrack(tracks[0].track); } else { audioPlayer.stop().catch((error) => console.error("Failed to stop audio player: ", error)); setCurrentTrack(undefined); setCurrentPlaylist(undefined); } }; const trackClickHandler = (track: SpotifyApi.TrackObjectFull) => { setCurrentTrack(track); }; return ( {`

${location.state.name[0].toUpperCase()}${location.state.name.slice(1)}

`}
{isLoading && {`Loading Tracks...`}} {isError && ( <> {`Failed to load ${location.state.name} tracks`}