'use client'; import { useState, useEffect } from 'react'; import WaveformPlayer from '../WaveformPlayer'; import { type EntryViewProps } from './AnnotationPageView'; const AUTO_ADVANCE_DELAY_MS = 600; export default function SingleChoiceBinaryEntryView({ entry, onSave, isSaving, ratingOptions, question, }: EntryViewProps) { const [answer, setAnswer] = useState(null); const [fullyPlayed, setFullyPlayed] = useState(false); const fileExt = entry.fileName.substring(entry.fileName.lastIndexOf('.')); const audioSrc = `/public/datasets/${entry.datasetId}/${entry.externalId}${fileExt}`; // Auto-save when answer is selected useEffect(() => { if (answer === null || isSaving) return; if (answer === entry.annotation) return; // No change, don't save const timer = setTimeout(() => { onSave(answer); }, AUTO_ADVANCE_DELAY_MS); return () => clearTimeout(timer); }, [answer, onSave, entry.annotation, isSaving]); useEffect(() => { // Reset state when entry changes setAnswer(entry.annotation); setFullyPlayed(entry.annotation !== null); // If already annotated, mark as fully played to allow changing answer }, [entry]); return (
{/* Sample header */}
Sample - {entry.externalId} {fullyPlayed && ( ✓ Gehört )}
{/* Waveform player */} setFullyPlayed(true)} /> {/* Must-listen hint */} {!fullyPlayed && (

Bitte das Sample vollständig anhören, bevor Sie eine Bewertung abgeben.

)} {/* Dialect + question */}

{question}

{/* Radio Select */}
{ratingOptions?.map(({ value, label }) => { const selected = answer === value; const disabled = !fullyPlayed || isSaving; return ( ); })}
); }