import { unwrap } from '@pipu/core'; import { useQuery } from '@tanstack/react-query'; import { Link } from '@tanstack/react-router'; import { useTranslation } from 'react-i18next'; import { useSession } from '../app/session'; import { ArtistLinks, Cover, coverSrc } from '../entities/catalog'; import { AddToPlaylist } from '../entities/playlists'; import { usePlayer, usePlayerState } from '../player/context'; import { formatDuration } from '../shared/lib/format'; import { pauseIcon, playIcon } from '../shared/ui/icons'; import { Button, PageSkeleton } from '../shared/ui/ui'; import { NotFound } from './NotFound'; import s from './page.module.css'; import c from './catalog.module.css'; import { TrackGenius } from './TrackGenius'; export function TrackPage({ id }: { id: string }) { const { t } = useTranslation(); const session = useSession(); const player = usePlayer(); const st = usePlayerState(); const track = useQuery({ queryKey: ['track', id], queryFn: async () => unwrap(await session.client.GET('/api/v1/tracks/{id}', { params: { path: { id } } })), }); if (track.isPending) { return (
); } if (track.isError) return ; const tr = track.data; if (!tr) return null; const ctx = { type: 'queue' as const }; const current = st.track?.id === tr.id; const playing = current && st.playing; return (
{tr.album.cover_url && ( )}
{t('player.track_page')}

{tr.title}

ยท {formatDuration(tr.duration_ms)} {tr.album.title}
{tr.available && ( )}
); }