'use client' import { useState, useEffect } from 'react' import { usePartyStore } from '@/store/partyStore' import { fetchTopCharts } from '@/lib/api' import type { SearchResult } from '@/types' function TopChartsCard({ tracks }: { tracks: string[] }) { const { loadPlaylist } = usePartyStore() const [launched, setLaunched] = useState(false) const handlePlay = () => { loadPlaylist(tracks) setLaunched(true) window.scrollTo({ top: 0, behavior: 'smooth' }) setTimeout(() => setLaunched(false), 2500) } return (
Прямо сейчас

Топ чарт

{tracks.length} треков

) } export default function SoloTab() { const [search, setSearch] = useState('') const [topTracks, setTopTracks] = useState(null) const { loadPlaylist } = usePartyStore() useEffect(() => { fetchTopCharts().then((results: SearchResult[]) => { if (!results.length) { setTopTracks([]); return } setTopTracks( results.map((r) => (r.artist ? `${r.artist} — ${r.title}` : r.title)) ) }) }, []) const handleSearch = (e: React.FormEvent) => { e.preventDefault() const q = search.trim() if (!q) return loadPlaylist([q]) setSearch('') window.scrollTo({ top: 0, behavior: 'smooth' }) } return (
{topTracks === null && (
Загружаем чарт...
)} {topTracks !== null && topTracks.length > 0 && ( )}

Быстрый поиск

setSearch(e.target.value)} className="flex-1 font-sans text-[13px] bg-surface2 border border-white/[0.07] rounded-[9px] px-3 py-2.5 text-app-text outline-none focus:border-accent/35 placeholder:text-muted transition-colors" />
) }