import { unwrap } from '@pipu/core'; import { useQuery } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { useSession } from '../app/session'; import { useErrorText } from '../shared/lib/errors'; import { FormError } from '../shared/ui/ui'; import s from './page.module.css'; import g from './genius.module.css'; export function TrackGenius({ id }: { id: string }) { const session = useSession(); const { t } = useTranslation(); const errorText = useErrorText(); const query = useQuery({ queryKey: ['track-genius', id], queryFn: async () => unwrap(await session.client.GET('/api/v1/tracks/{id}/genius', { params: { path: { id } } })), refetchInterval: (q) => ['pending', 'processing'].includes(q.state.data?.status ?? '') ? 10000 : false, }); const data = query.data; if (data?.status === 'disabled') return null; return
{query.error ? errorText(query.error) : null} {query.isPending &&

{t('genius.loading')}

} {data?.description && <>

{t('genius.about')}

{data.description}

}

{t('genius.lyrics')}

{data?.source_url && Genius ↗}
{data && (data.lyrics ?
{data.lyrics}
:

{['pending', 'processing'].includes(data.status) ? t('genius.pending_text') : t('genius.no_lyrics')}

)} {!!data?.annotations.length && <>

{t('genius.explanations')}

{data.annotations.map((a, i) =>
{a.fragment}{a.verified && {t('genius.verified')}}

{a.text}

{a.authors}{a.url && <> · Genius ↗}

)} }
; }