import { useState, useEffect } from 'react' import { Search, Loader2, Film } from 'lucide-react' import { api } from '../lib/api' import { Modal } from './ui/Modal' import { Button } from './ui/Button' import { Input } from './ui/Input' interface SuchKandidat { title: string year?: number poster?: string overview?: string type: string source: string id?: string } interface Props { devicePath: string vorschlag?: string isOpen: boolean onClose: () => void onUebernommen: () => void } export default function MetadataKorrektur({ devicePath, vorschlag, isOpen, onClose, onUebernommen }: Props) { const [suchbegriff, setSuchbegriff] = useState('') const [kandidaten, setKandidaten] = useState([]) const [laeuft, setLaeuft] = useState(false) const [fehler, setFehler] = useState(null) useEffect(() => { if (isOpen) { setSuchbegriff(vorschlag || '') setKandidaten([]) setFehler(null) } }, [isOpen, vorschlag]) const suchen = async () => { if (!suchbegriff) return setLaeuft(true) setFehler(null) try { const r = await api.get('/metadata/search', { params: { q: suchbegriff } }) setKandidaten(r.data) if (r.data.length === 0) setFehler('Nichts gefunden — anderen Suchbegriff probieren.') } catch { setFehler('Suche fehlgeschlagen.') } finally { setLaeuft(false) } } const waehlen = async (k: SuchKandidat) => { try { await api.post('/metadata/override', { device_path: devicePath, title: k.title, year: k.year, poster: k.poster, overview: k.overview, type: k.type, source: k.source, id: k.id, }) onUebernommen() onClose() } catch { setFehler('Übernehmen fehlgeschlagen.') } } return (

Deine Wahl gilt für diese Disc — auch beim nächsten Einlegen.

setSuchbegriff(e.target.value)} onKeyDown={e => e.key === 'Enter' && suchen()} autoFocus placeholder="Titel eingeben…" />
{fehler &&

{fehler}

} {kandidaten.length > 0 && (
{kandidaten.map((k, i) => ( ))}
)}
) }