"use client"; import { useCallback, useState } from "react"; import { useDropzone } from "react-dropzone"; import { Upload, FileText, X, Loader2 } from "lucide-react"; import type { Case } from "@/lib/types"; interface ExtractionFormProps { cases: Case[]; selectedCaseId: string; onCaseChange: (caseId: string) => void; onExtract: (file: File | null, text: string) => void; isLoading: boolean; } const inputClass = "w-full rounded-md border border-neutral-200 bg-white px-3 py-2 text-sm text-neutral-900 outline-none transition-colors focus:border-neutral-400 focus:ring-1 focus:ring-neutral-400"; export function ExtractionForm({ cases, selectedCaseId, onCaseChange, onExtract, isLoading, }: ExtractionFormProps) { const [file, setFile] = useState(null); const [text, setText] = useState(""); const onDrop = useCallback((acceptedFiles: File[]) => { if (acceptedFiles.length > 0) { setFile(acceptedFiles[0]); setText(""); } }, []); const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop, accept: { "application/pdf": [".pdf"] }, maxFiles: 1, disabled: isLoading, }); function removeFile() { setFile(null); } function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (!selectedCaseId || (!file && !text.trim())) return; onExtract(file, text.trim()); } const hasInput = file !== null || text.trim().length > 0; return (
{/* Case selector */}
{/* PDF dropzone */}
{file ? (

{file.name}

{(file.size / 1024).toFixed(0)} KB

) : (

PDF hierher ziehen oder{" "} durchsuchen

Nur PDF-Dateien

)}
{/* Divider */}
oder
{/* Text input */}