// frontend/src/pages/Dashboard.jsx import React, { useState } from "react"; import { motion } from "framer-motion"; import { Sparkles, Zap, FileText, TrendingUp, Clock, AlertCircle } from "lucide-react"; import { Button } from "@/components/ui/button"; import UploadZone from "@/components/ocr/UploadZone"; import DocumentPreview from "@/components/ocr/DocumentPreview"; import ExtractionOutput from "@/components/ocr/ExtractionOutput"; import ExportButtons from "@/components/ExportButtons"; import ProcessingStatus from "@/components/ocr/ProcessingStatus"; import { extractDocument } from "@/services/api"; export default function Dashboard() { const [selectedFile, setSelectedFile] = useState(null); const [isProcessing, setIsProcessing] = useState(false); const [isComplete, setIsComplete] = useState(false); const [extractionResult, setExtractionResult] = useState(null); const [error, setError] = useState(null); const handleFileSelect = (file) => { setSelectedFile(file); setIsComplete(false); setExtractionResult(null); setError(null); }; const handleClear = () => { setSelectedFile(null); setIsProcessing(false); setIsComplete(false); setExtractionResult(null); setError(null); }; const handleExtract = async () => { if (!selectedFile) return; setIsProcessing(true); setIsComplete(false); setError(null); setExtractionResult(null); try { const result = await extractDocument(selectedFile); setExtractionResult(result); setIsComplete(true); } catch (err) { console.error("Extraction error:", err); setError(err.message || "Failed to extract document. Please try again."); setIsComplete(false); } finally { setIsProcessing(false); } }; return (
Upload any document and extract structured data with AI
{error}
Extract structured data from any document
{feature.description}
Supported Formats