import useUserLikedTracksIDs, { useMutationLikeATrack, } from '@/web/api/hooks/useUserLikedTracksIDs' import { player, state } from '@/web/store' import { resizeImage } from '@/web/utils/common' import ArtistInline from '../ArtistsInline' import Cover from '../Cover' import IconButton from '../IconButton' import Icon from '../Icon' import { State as PlayerState, Mode as PlayerMode } from '@/web/utils/player' import { useMemo } from 'react' import { useNavigate } from 'react-router-dom' import { useSnapshot } from 'valtio' import { cx } from '@emotion/css' const PlayingTrack = () => { const playerSnapshot = useSnapshot(player) const track = useMemo(() => playerSnapshot.track, [playerSnapshot.track]) const navigate = useNavigate() const toAlbum = () => { const id = track?.al?.id if (!id) return navigate(`/album/${id}`) state.uiStates.showLyricPanel = false } const trackListSource = useMemo( () => playerSnapshot.trackListSource, [playerSnapshot.trackListSource] ) const hasListSource = playerSnapshot.mode !== PlayerMode.FM && trackListSource?.type const toTrackListSource = () => { if (!hasListSource) return navigate(`/${trackListSource.type}/${trackListSource.id}`) state.uiStates.showLyricPanel = false } const toArtist = (id: number) => { navigate(`/artist/${id}`) state.uiStates.showLyricPanel = false } return (
{track?.name}
{!!track?.al?.id && ( {' '} -{' '} {track?.al.name} )}
) } const LikeButton = ({ track }: { track: Track | undefined | null }) => { const { data: userLikedSongs } = useUserLikedTracksIDs() const mutationLikeATrack = useMutationLikeATrack() return (
track?.id && mutationLikeATrack.mutate(track.id)} >
) } const Controls = () => { const playerSnapshot = useSnapshot(player) const state = useMemo(() => playerSnapshot.state, [playerSnapshot.state]) const track = useMemo(() => playerSnapshot.track, [playerSnapshot.track]) const mode = useMemo(() => playerSnapshot.mode, [playerSnapshot.mode]) return (
{mode === PlayerMode.TrackList && ( track && player.prevTrack()} disabled={!track} > )} {mode === PlayerMode.FM && ( player.fmTrash()}> )} track && player.playOrPause()} disabled={!track} className='after:rounded-xl' > track && player.nextTrack()} disabled={!track}>
) } const Player = ({ className }: { className?: string }) => { const playerSnapshot = useSnapshot(player) const track = useMemo(() => playerSnapshot.track, [playerSnapshot.track]) return (
) } export default Player