Files
furumi-ng/furumi-node-player/client/src/components/NowPlaying.tsx
T

54 lines
1.3 KiB
TypeScript
Raw Normal View History

2026-03-19 18:04:13 +03:00
import { useEffect, useState } from 'react'
2026-03-23 12:34:27 +03:00
import { API_ROOT } from '../furumiApi'
2026-03-19 18:04:13 +03:00
import type { QueueItem } from './QueueList'
function Cover({ src }: { src: string }) {
const [errored, setErrored] = useState(false)
useEffect(() => {
setErrored(false)
}, [src])
if (errored) return <>&#127925;</>
return <img src={src} alt="" onError={() => setErrored(true)} />
}
2026-03-23 12:34:27 +03:00
export function NowPlaying({ track }: { track: QueueItem | null }) {
2026-03-19 18:04:13 +03:00
if (!track) {
return (
<div className="np-info">
<div className="np-cover" id="npCover">
&#127925;
</div>
<div className="np-text">
<div className="np-title" id="npTitle">
Nothing playing
</div>
<div className="np-artist" id="npArtist">
&mdash;
</div>
</div>
</div>
)
}
2026-03-23 12:34:27 +03:00
const coverUrl = `${API_ROOT}/tracks/${track.slug}/cover`
2026-03-19 18:04:13 +03:00
return (
<div className="np-info">
<div className="np-cover" id="npCover">
<Cover src={coverUrl} />
</div>
<div className="np-text">
<div className="np-title" id="npTitle">
{track.title}
</div>
<div className="np-artist" id="npArtist">
{track.artist || '—'}
</div>
</div>
</div>
)
}