import { useEffect, useMemo, useState } from 'react'; import { Dialog } from 'primereact/dialog'; import { Button } from 'primereact/button'; import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; import { InputText } from 'primereact/inputtext'; export default function MetadataSelectionDialog({ visible, context, onHide, onSubmit, onSearch, busy }) { const [selected, setSelected] = useState(null); const [query, setQuery] = useState(''); const [manualTitle, setManualTitle] = useState(''); const [manualYear, setManualYear] = useState(''); const [manualImdb, setManualImdb] = useState(''); const [extraResults, setExtraResults] = useState([]); useEffect(() => { if (!visible) { return; } const selectedMetadata = context?.selectedMetadata || {}; const defaultTitle = selectedMetadata.title || context?.detectedTitle || ''; const defaultYear = selectedMetadata.year ? String(selectedMetadata.year) : ''; const defaultImdb = selectedMetadata.imdbId || ''; setSelected(null); setQuery(defaultTitle); setManualTitle(defaultTitle); setManualYear(defaultYear); setManualImdb(defaultImdb); setExtraResults([]); }, [visible, context]); const rows = useMemo(() => { const base = context?.omdbCandidates || []; const all = [...base, ...extraResults]; const map = new Map(); all.forEach((item) => { if (item?.imdbId) { map.set(item.imdbId, item); } }); return Array.from(map.values()); }, [context, extraResults]); const titleWithPosterBody = (row) => (
{row.poster && row.poster !== 'N/A' ? ( {row.title} ) : (
-
)}
{row.title}
{row.year} | {row.imdbId}
); const handleSearch = async () => { if (!query.trim()) { return; } const results = await onSearch(query.trim()); setExtraResults(results || []); }; const handleSubmit = async () => { const payload = selected ? { jobId: context.jobId, title: selected.title, year: selected.year, imdbId: selected.imdbId, poster: selected.poster && selected.poster !== 'N/A' ? selected.poster : null, fromOmdb: true } : { jobId: context.jobId, title: manualTitle, year: manualYear, imdbId: manualImdb, poster: null, fromOmdb: false }; await onSubmit(payload); }; return (
setQuery(event.target.value)} placeholder="Titel suchen" />
setSelected(event.value)} dataKey="imdbId" size="small" scrollable scrollHeight="22rem" emptyMessage="Keine Treffer" responsiveLayout="stack" breakpoint="960px" >

Manuelle Eingabe

setManualTitle(event.target.value)} placeholder="Titel" disabled={!!selected} /> setManualYear(event.target.value)} placeholder="Jahr" disabled={!!selected} /> setManualImdb(event.target.value)} placeholder="IMDb-ID" disabled={!!selected} />
); }