import { useState, useRef } from 'react' import { api, API_BASE } from '../_api' import type { ImportJob } from '../_types' export function ImportWizard({ onClose, onImported }: { onClose: () => void onImported: () => void }) { const [step, setStep] = useState<'upload' | 'preview' | 'confirm'>('upload') const [importJob, setImportJob] = useState(null) const [uploading, setUploading] = useState(false) const [confirming, setConfirming] = useState(false) const [roadmapTitle, setRoadmapTitle] = useState('') const fileRef = useRef(null) const handleUpload = async () => { const file = fileRef.current?.files?.[0] if (!file) return setUploading(true) try { const formData = new FormData() formData.append('file', file) const res = await fetch(`${API_BASE}/import/upload`, { method: 'POST', body: formData, }) if (!res.ok) throw new Error(`Upload failed: ${res.status}`) const data = await res.json() const job = await api(`/import/${data.job_id || data.id}`) setImportJob(job) setStep('preview') } catch (err) { console.error('Upload error:', err) } finally { setUploading(false) } } const handleConfirm = async () => { if (!importJob) return setConfirming(true) try { await api(`/import/${importJob.id}/confirm`, { method: 'POST', body: JSON.stringify({ job_id: importJob.id, roadmap_title: roadmapTitle || `Import ${new Date().toLocaleDateString('de-DE')}`, selected_rows: importJob.items.filter(i => i.is_valid).map(i => i.row), apply_mappings: true, }), }) onImported() } catch (err) { console.error('Confirm error:', err) } finally { setConfirming(false) } } return (
e.stopPropagation()}>

Roadmap importieren

{step === 'upload' && (
{}} />

Excel (.xlsx, .xls) oder CSV

)} {step === 'preview' && importJob && (
{importJob.valid_rows}
Gueltig
{importJob.invalid_rows}
Ungueltig
{importJob.total_rows}
Gesamt
{importJob.items?.map(item => ( ))}
Zeile Titel Kategorie Status
{item.row} {item.title} {item.category} {item.is_valid ? ( OK ) : ( {item.errors?.join(', ')} )}
setRoadmapTitle(e.target.value)} className="w-full px-3 py-2 border rounded-lg focus:ring-2 focus:ring-purple-500" placeholder="Name fuer die importierte Roadmap" />
)}
) }