'use client'; import { useState } from 'react'; import { FileUpload } from '@/components/file-upload'; import { SchemaDefinition, type SchemaField } from '@/components/schema-definition'; import { Button } from '@/components/ui/button'; import { useToast } from '@/hooks/use-toast'; interface ExtractedData { company: string; address: string; total_sum: number; items: { item: string; unit_price: number; quantity: number; sum: number; }[]; } interface FileWithText { file: File; text?: string; } export default function Home() { const [files, setFiles] = useState([]); const [schema, setSchema] = useState([]); const [isProcessing, setIsProcessing] = useState(false); const [processedData, setProcessedData] = useState([]); const { toast } = useToast(); const handleFilesUploaded = (newFiles: File[]) => { const filesWithText = newFiles.map(file => ({ file })); setFiles(prev => [...prev, ...filesWithText]); }; const handleTextExtracted = (fileName: string, text: string) => { setFiles(prev => prev.map(f => f.file.name === fileName ? { ...f, text } : f ) ); }; const handleSchemaChange = (newSchema: SchemaField[]) => { setSchema(newSchema); }; const handleStartExtraction = async () => { setIsProcessing(true); const results: ExtractedData[] = []; try { for (const { file, text } of files) { if (!text) { toast({ title: 'Error', description: `Text not yet extracted for ${file.name}`, variant: 'destructive', }); continue; } const response = await fetch('/api/process', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ text, schema, }), }); if (!response.ok) { throw new Error(`Failed to process ${file.name}`); } const data = await response.json(); results.push(data); toast({ title: 'Success', description: `Processed ${file.name}`, }); } setProcessedData(results); } catch (error) { console.error('Error during extraction:', error); toast({ title: 'Error', description: 'Failed to process files', variant: 'destructive', }); } finally { setIsProcessing(false); } }; return (

PDF Data Extractor

Upload PDF Files

{processedData.length > 0 && ( )}
{processedData.length > 0 && (

Extracted Data

{processedData.map((data, index) => (

{data.company}

{data.address}

Total: ${data.total_sum.toFixed(2)}

Items:

{data.items.map((item, itemIndex) => ( ))}
Item Unit Price Quantity Sum
{item.item} ${item.unit_price.toFixed(2)} {item.quantity} ${item.sum.toFixed(2)}
))}
)}
); }