Seth0330 commited on
Commit
09b7f69
·
verified ·
1 Parent(s): b0ebcbb

Update frontend/src/components/ocr/ExtractionOutput.jsx

Browse files
frontend/src/components/ocr/ExtractionOutput.jsx CHANGED
@@ -1,4 +1,4 @@
1
- import React, { useState, useEffect } from "react";
2
  import { motion, AnimatePresence } from "framer-motion";
3
  import {
4
  Code2,
@@ -317,12 +317,48 @@ function fieldsToText(fields) {
317
  export default function ExtractionOutput({ hasFile, isProcessing, isComplete, extractionResult }) {
318
  const [activeTab, setActiveTab] = useState("json");
319
  const [copied, setCopied] = useState(false);
 
320
 
321
  // Get fields from extraction result, default to empty object
322
  const fields = extractionResult?.fields || {};
323
  const confidence = extractionResult?.confidence || 0;
324
  const fieldsExtracted = extractionResult?.fieldsExtracted || 0;
325
  const totalTime = extractionResult?.totalTime || 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
326
 
327
  // Initialize expanded sections based on available fields
328
  const [expandedSections, setExpandedSections] = useState(() =>
@@ -523,7 +559,7 @@ export default function ExtractionOutput({ hasFile, isProcessing, isComplete, ex
523
  <Sparkles className="h-8 w-8 text-indigo-500" />
524
  </motion.div>
525
  <p className="text-slate-700 font-medium mb-1">Extracting data...</p>
526
- <p className="text-slate-400 text-sm">Analyzing document structure</p>
527
 
528
  <div className="mt-6 flex items-center justify-center gap-1">
529
  {[0, 1, 2].map((i) => (
 
1
+ import React, { useState, useEffect, useRef } from "react";
2
  import { motion, AnimatePresence } from "framer-motion";
3
  import {
4
  Code2,
 
317
  export default function ExtractionOutput({ hasFile, isProcessing, isComplete, extractionResult }) {
318
  const [activeTab, setActiveTab] = useState("json");
319
  const [copied, setCopied] = useState(false);
320
+ const [statusMessage, setStatusMessage] = useState("Preparing document...");
321
 
322
  // Get fields from extraction result, default to empty object
323
  const fields = extractionResult?.fields || {};
324
  const confidence = extractionResult?.confidence || 0;
325
  const fieldsExtracted = extractionResult?.fieldsExtracted || 0;
326
  const totalTime = extractionResult?.totalTime || 0;
327
+
328
+ // Dynamic status messages that rotate during processing
329
+ const statusMessages = [
330
+ "Preparing document...",
331
+ "Converting pages to images...",
332
+ "Sending to AI model...",
333
+ "Reading text from document...",
334
+ "Identifying document structure...",
335
+ "Extracting tables and data...",
336
+ "Analyzing content...",
337
+ "Processing pages...",
338
+ "Organizing extracted information...",
339
+ "Finalizing results...",
340
+ ];
341
+
342
+ // Rotate status messages during processing
343
+ const messageIndexRef = useRef(0);
344
+
345
+ useEffect(() => {
346
+ if (!isProcessing) {
347
+ setStatusMessage("Analyzing document structure");
348
+ messageIndexRef.current = 0;
349
+ return;
350
+ }
351
+
352
+ setStatusMessage(statusMessages[0]);
353
+ messageIndexRef.current = 0;
354
+
355
+ const interval = setInterval(() => {
356
+ messageIndexRef.current = (messageIndexRef.current + 1) % statusMessages.length;
357
+ setStatusMessage(statusMessages[messageIndexRef.current]);
358
+ }, 2500); // Change message every 2.5 seconds
359
+
360
+ return () => clearInterval(interval);
361
+ }, [isProcessing]);
362
 
363
  // Initialize expanded sections based on available fields
364
  const [expandedSections, setExpandedSections] = useState(() =>
 
559
  <Sparkles className="h-8 w-8 text-indigo-500" />
560
  </motion.div>
561
  <p className="text-slate-700 font-medium mb-1">Extracting data...</p>
562
+ <p className="text-slate-400 text-sm">{statusMessage}</p>
563
 
564
  <div className="mt-6 flex items-center justify-center gap-1">
565
  {[0, 1, 2].map((i) => (