import { useState, useEffect } from 'react' import { createPortal } from 'react-dom' import { X, Search, Music, Heart } from 'lucide-react' import { searchMusic, getFavorites } from '../utils/musicApi' import { hapticFeedback } from '../utils/telegram' import './MusicPickerModal.css' export default function MusicPickerModal({ onClose, onSelect }) { const [activeTab, setActiveTab] = useState('favorites') const [query, setQuery] = useState('') const [searchResults, setSearchResults] = useState([]) const [favorites, setFavorites] = useState([]) const [loading, setLoading] = useState(false) useEffect(() => { if (activeTab === 'favorites') { loadFavorites() } }, [activeTab]) const loadFavorites = async () => { try { setLoading(true) const data = await getFavorites({ limit: 50 }) setFavorites(data.tracks || []) } catch (error) { console.error('Ошибка загрузки избранного:', error) } finally { setLoading(false) } } const handleSearch = async () => { if (!query.trim()) return try { setLoading(true) hapticFeedback('light') const results = await searchMusic(query.trim(), 'tracks') setSearchResults(results.tracks || []) hapticFeedback('success') } catch (error) { console.error('Ошибка поиска:', error) hapticFeedback('error') } finally { setLoading(false) } } const handleSelectTrack = (track) => { hapticFeedback('light') onSelect(track) onClose() } const renderTrack = (track) => (
handleSelectTrack(track)} >
{track.coverImage ? ( {track.title} { e.target.style.display = 'none' e.target.nextElementSibling.style.display = 'flex' }} /> ) : null}
{track.title}
{track.artist?.name || 'Unknown'}
) return createPortal(
e.stopPropagation()}>

Выбрать трек

{activeTab === 'search' && (
setQuery(e.target.value)} onKeyPress={(e) => e.key === 'Enter' && handleSearch()} />
{loading ? (

Поиск...

) : searchResults.length === 0 && query ? (

Ничего не найдено

) : searchResults.length > 0 ? (
{searchResults.map(renderTrack)}
) : (

Введите запрос для поиска

)}
)} {activeTab === 'favorites' && ( loading ? (

Загрузка...

) : favorites.length === 0 ? (

Нет избранных треков

) : (
{favorites.map(renderTrack)}
) )}
, document.body ) }