'use client' import { useState } from 'react' import { startAssignment, completeAssignment, updateAssignment } from '@/lib/sdk/training/api' import type { TrainingAssignment } from '@/lib/sdk/training/types' export function AssignmentDetailDrawer({ assignment, onClose, onSaved }: { assignment: TrainingAssignment onClose: () => void onSaved: () => void }) { const [deadline, setDeadline] = useState(assignment.deadline ? assignment.deadline.split('T')[0] : '') const [savingDeadline, setSavingDeadline] = useState(false) const [actionLoading, setActionLoading] = useState(false) const [error, setError] = useState(null) const handleAction = async (action: () => Promise) => { setActionLoading(true) setError(null) try { await action() onSaved() } catch (e) { setError(e instanceof Error ? e.message : 'Fehler') setActionLoading(false) } } const handleSaveDeadline = async () => { setSavingDeadline(true) setError(null) try { await updateAssignment(assignment.id, { deadline: new Date(deadline).toISOString() }) onSaved() } catch (e) { setError(e instanceof Error ? e.message : 'Fehler beim Speichern') setSavingDeadline(false) } } const statusActions: Record Promise } | null> = { pending: { label: 'Starten', action: () => startAssignment(assignment.id) }, in_progress: { label: 'Als abgeschlossen markieren', action: () => completeAssignment(assignment.id) }, overdue: { label: 'Als erledigt markieren', action: () => completeAssignment(assignment.id) }, completed: null, expired: null, } const currentAction = statusActions[assignment.status] || null return (

{assignment.module_title || assignment.module_code}

{assignment.module_code}

{/* Employee */}
{assignment.user_name}
{assignment.user_email}
{assignment.role_code &&
Rolle: {assignment.role_code}
}
{/* Timestamps */}
Erstellt:{new Date(assignment.created_at).toLocaleString('de-DE')}
{assignment.started_at &&
Gestartet:{new Date(assignment.started_at).toLocaleString('de-DE')}
} {assignment.completed_at &&
Abgeschlossen:{new Date(assignment.completed_at).toLocaleString('de-DE')}
}
{/* Progress */}
Fortschritt {assignment.progress_percent}%
{/* Quiz Score */}
Quiz-Score {assignment.quiz_score != null ? ( {assignment.quiz_score.toFixed(0)}% {assignment.quiz_passed ? '(Bestanden)' : '(Nicht bestanden)'} ) : ( Noch kein Quiz )}
{/* Escalation */} {assignment.escalation_level > 0 && (
Eskalationslevel Level {assignment.escalation_level}
)} {/* Certificate */} {assignment.certificate_id && (
Zertifikat Zertifikat vorhanden
)} {/* Status Action */} {currentAction && ( )} {/* Deadline Edit */}
setDeadline(e.target.value)} className="flex-1 px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500" />
{error &&

{error}

}
) }