diff --git a/package.json b/package.json index eada62c..ac4db3c 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "@mui/material": "^6.1.1", "@supabase/supabase-js": "^2.81.1", "jszip": "^3.10.1", + "pdfjs-dist": "^5.4.394", "react": "^18.3.1", "react-dom": "^18.3.1", "react-dropzone": "^14.2.3", diff --git a/src/components/OcrStep.jsx b/src/components/OcrStep.jsx index 12da1c9..3323dcf 100644 --- a/src/components/OcrStep.jsx +++ b/src/components/OcrStep.jsx @@ -5,6 +5,7 @@ import { Button, LinearProgress, Stack, + TextField, Typography, } from '@mui/material'; import { useNavigate } from 'react-router-dom'; @@ -22,9 +23,11 @@ const OcrStep = () => { const clearTranslation = useAppStore((state) => state.clearTranslation); const bookMetadata = useAppStore((state) => state.bookMetadata); const epubImports = useAppStore((state) => state.epubImports); + const pdfImports = useAppStore((state) => state.pdfImports); const [status, setStatus] = useState('idle'); const [currentIndex, setCurrentIndex] = useState(0); const [previewText, setPreviewText] = useState(''); + const [isEditing, setIsEditing] = useState(false); const total = croppedImages.length; const abortRef = useRef(false); @@ -39,6 +42,12 @@ const OcrStep = () => { const [workerReady, setWorkerReady] = useState(false); const previewRef = useRef(null); // removed auto navigation to translation + const handlePreviewChange = (event) => { + if (!isEditing) return; + const value = event.target.value; + setPreviewText(value); + setOcrText(value); + }; const orderedImages = useMemo( () => [...croppedImages].sort((a, b) => (a.order ?? 0) - (b.order ?? 0)), @@ -119,13 +128,15 @@ const OcrStep = () => { }, [assetBase, isDev, orderedImages.length, setError]); useEffect(() => { - if (!orderedImages.length) return; + if (!orderedImages.length && !(epubImports.length || pdfImports.length)) return; setStatus('idle'); setCurrentIndex(0); - setPreviewText(''); - setOcrText(''); + setPreviewText(ocrText || ''); + if (!ocrText) { + setOcrText(''); + } clearTranslation(); - }, [clearTranslation, orderedImages, setOcrText]); + }, [clearTranslation, epubImports.length, orderedImages, pdfImports.length, ocrText, setOcrText]); useEffect(() => { if (previewRef.current) { @@ -176,7 +187,7 @@ const OcrStep = () => { }, [orderedImages, setError, setOcrText, status, total, workerReady]); - if (!orderedImages.length && !epubImports.length) { + if (!orderedImages.length && !epubImports.length && !pdfImports.length) { return ( Önce görselleri cropla. @@ -187,7 +198,8 @@ const OcrStep = () => { ); } - if (!orderedImages.length && epubImports.length) { + if (!orderedImages.length && (epubImports.length || pdfImports.length)) { + const documentCount = epubImports.length + pdfImports.length; return ( {bookMetadata && ( @@ -197,30 +209,50 @@ const OcrStep = () => { )} - EPUB metni ayrıştırıldı + Belge metni ayrıştırıldı - {epubImports.length > 1 - ? `${epubImports.length} EPUB dosyasından metin çıkarıldı.` - : 'EPUB dosyasındaki metin çıkarıldı.'} + {documentCount > 1 + ? `${documentCount} belge dosyasından metin çıkarıldı.` + : 'Yüklediğin belgedeki metin çıkarıldı.'} - Ön izleme - - {ocrText?.trim() || 'Metin ayrıştırılıyor...'} - + + Ön izleme + + + {isEditing ? ( + + ) : ( + + {previewText || ocrText?.trim() || 'Metin ayrıştırılıyor...'} + + )} + + {isEditing ? ( + + ) : ( + + {previewText || 'Metin bekleniyor'} + + )}