'use client'; import { useState } from 'react'; import { duplicateDatasetWithCriteria } from '@/app/actions/datasets'; import Modal from '@/components/Modal'; interface DuplicateDatasetModalProps { datasetId: number; datasetName: string; isOpen: boolean; onClose: () => void; } export default function DuplicateDatasetModal({ datasetId, datasetName, isOpen, onClose, }: DuplicateDatasetModalProps) { const [newName, setNewName] = useState(`${datasetName} - Copy`); const [description, setDescription] = useState(''); const [iterations, setIterations] = useState(1); const [prioritizationMetric, setPrioritizationMetric] = useState<'utmos' | 'wer'>('utmos'); // Filter states const [showFilters, setShowFilters] = useState(false); const [utmosMin, setUtmosMin] = useState(''); const [utmosMax, setUtmosMax] = useState(''); const [werMin, setWerMin] = useState(''); const [werMax, setWerMax] = useState(''); const [durationMsMin, setDurationMsMin] = useState(''); const [durationMsMax, setDurationMsMax] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(false); const [result, setResult] = useState(null); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setError(null); setSuccess(false); if (!newName.trim()) { setError('Dataset name is required'); return; } if (iterations < 1) { setError('Iterations must be at least 1'); return; } setLoading(true); try { const filters: any = {}; if (utmosMin !== '') filters.utmosMin = Number(utmosMin); if (utmosMax !== '') filters.utmosMax = Number(utmosMax); if (werMin !== '') filters.werMin = Number(werMin); if (werMax !== '') filters.werMax = Number(werMax); if (durationMsMin !== '') filters.durationMsMin = Number(durationMsMin); if (durationMsMax !== '') filters.durationMsMax = Number(durationMsMax); const res = await duplicateDatasetWithCriteria( datasetId, newName.trim(), description.trim() || undefined, iterations, prioritizationMetric, Object.keys(filters).length > 0 ? filters : undefined ); if (res.success) { setResult(res); setSuccess(true); setTimeout(() => { setSuccess(false); handleClose(); // Refresh the page to show the new dataset window.location.reload(); }, 2000); } else { setError((res as any).error || 'Failed to duplicate dataset'); } } catch (err) { setError(err instanceof Error ? err.message : 'Failed to duplicate dataset'); } finally { setLoading(false); } } function handleClose() { if (!loading) { onClose(); setNewName(`${datasetName} - Copy`); setDescription(''); setIterations(1); setPrioritizationMetric('utmos'); setUtmosMin(''); setUtmosMax(''); setWerMin(''); setWerMax(''); setDurationMsMin(''); setDurationMsMax(''); setError(null); setSuccess(false); setResult(null); } } return ( { const form = document.getElementById('duplicateDatasetForm') as HTMLFormElement; form?.dispatchEvent(new Event('submit', { bubbles: true })); }, variant: 'primary', disabled: loading || !newName.trim(), }, ]} > {error && (
{error}
)} {success && result && (

{result.message}

Created {result.totalEntriesCreated} entries ({result.selectedEntriesCount} unique × {iterations})

)}
{/* Dataset Info */}
setNewName(e.target.value)} disabled={loading || success} className="w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:bg-gray-100" placeholder="Enter dataset name" />