diff --git a/frontend/src/proprietary/components/tools/pdfJsonEditor/PdfJsonEditorView.tsx b/frontend/src/proprietary/components/tools/pdfJsonEditor/PdfJsonEditorView.tsx index a91f6cffa..23b049864 100644 --- a/frontend/src/proprietary/components/tools/pdfJsonEditor/PdfJsonEditorView.tsx +++ b/frontend/src/proprietary/components/tools/pdfJsonEditor/PdfJsonEditorView.tsx @@ -268,27 +268,6 @@ const analyzePageContentType = (groups: TextGroup[]): boolean => { avgWordsPerGroup > 12 || longTextRatio > 0.4; - // Log detailed statistics - console.group(`📊 Page Content Analysis`); - console.log('📄 Overall Statistics:'); - console.log(` Total text groups: ${totalGroups}`); - console.log(` Total words: ${totalWords}`); - console.log(` Average words per group: ${avgWordsPerGroup.toFixed(2)}`); - console.log(` Multi-line groups: ${multiLineGroups}`); - console.log(` Long text groups (≥5 words or ≥30 chars): ${longTextGroups}`); - console.log(` Long text ratio: ${(longTextRatio * 100).toFixed(1)}%`); - console.log(''); - console.log('🔍 Detection Criteria:'); - console.log(` ✓ Multi-line groups ≥ 2 AND avg words > 8? ${multiLineGroups >= 2 && avgWordsPerGroup > 8 ? '✅ YES' : '❌ NO'} (multi-line: ${multiLineGroups}, avg: ${avgWordsPerGroup.toFixed(2)})`); - console.log(` ✓ Avg words/group > 12? ${avgWordsPerGroup > 12 ? '✅ YES' : '❌ NO'} (current: ${avgWordsPerGroup.toFixed(2)})`); - console.log(` ✓ Long text ratio > 40%? ${longTextRatio > 0.4 ? '✅ YES' : '❌ NO'} (current: ${(longTextRatio * 100).toFixed(1)}%)`); - console.log(''); - console.log(`📋 Result: ${isParagraphPage ? '📝 PARAGRAPH PAGE' : '📄 SPARSE PAGE'}`); - console.log(''); - console.log('📦 Individual Groups:'); - console.table(groupDetails); - console.groupEnd(); - return isParagraphPage; }; diff --git a/frontend/src/proprietary/tools/pdfJsonEditor/PdfJsonEditor.tsx b/frontend/src/proprietary/tools/pdfJsonEditor/PdfJsonEditor.tsx index 8cec6c5a2..90c694992 100644 --- a/frontend/src/proprietary/tools/pdfJsonEditor/PdfJsonEditor.tsx +++ b/frontend/src/proprietary/tools/pdfJsonEditor/PdfJsonEditor.tsx @@ -101,6 +101,7 @@ const PdfJsonEditor = ({ onComplete, onError }: BaseToolProps) => { const previewRenderingRef = useRef>(new Set()); const pagePreviewsRef = useRef>(pagePreviews); const previewScaleRef = useRef>(new Map()); + const cachedJobIdRef = useRef(null); // Keep ref in sync with state for access in async callbacks useEffect(() => { @@ -119,6 +120,7 @@ const PdfJsonEditor = ({ onComplete, onError }: BaseToolProps) => { pagePreviewsRef.current = pagePreviews; }, [pagePreviews]); + useEffect(() => { return () => { if (pdfDocumentRef.current) { @@ -185,6 +187,24 @@ const PdfJsonEditor = ({ onComplete, onError }: BaseToolProps) => { setHasVectorPreview(false); }, []); + const clearCachedJob = useCallback((jobId: string | null) => { + if (!jobId) { + return; + } + console.log(`[PdfJsonEditor] Cleaning up cached document for jobId: ${jobId}`); + apiClient.post(`/api/v1/convert/pdf/json/clear-cache/${jobId}`).catch((error) => { + console.warn('[PdfJsonEditor] Failed to clear cache:', error); + }); + }, []); + + useEffect(() => { + const previousJobId = cachedJobIdRef.current; + if (previousJobId && previousJobId !== cachedJobId) { + clearCachedJob(previousJobId); + } + cachedJobIdRef.current = cachedJobId; + }, [cachedJobId, clearCachedJob]); + const initializePdfPreview = useCallback( async (file: File) => { const requestId = ++previewRequestIdRef.current; @@ -976,12 +996,13 @@ const PdfJsonEditor = ({ onComplete, onError }: BaseToolProps) => { [hasVectorPreview], ); - // Re-group text when grouping mode changes + // Re-group text when grouping mode changes without forcing a full reload useEffect(() => { - if (loadedDocument) { - resetToDocument(loadedDocument, groupingMode); + const currentDocument = loadedDocumentRef.current; + if (currentDocument) { + resetToDocument(currentDocument, groupingMode); } - }, [groupingMode, loadedDocument, resetToDocument]); + }, [groupingMode, resetToDocument]); const viewData = useMemo(() => ({ document: loadedDocument, @@ -1089,19 +1110,13 @@ const PdfJsonEditor = ({ onComplete, onError }: BaseToolProps) => { return () => { // Clear backend cache if we were using lazy loading - if (cachedJobId) { - console.log(`[PdfJsonEditor] Cleaning up cached document for jobId: ${cachedJobId}`); - apiClient.post(`/api/v1/convert/pdf/json/clear-cache/${cachedJobId}`).catch((error) => { - console.warn('[PdfJsonEditor] Failed to clear cache:', error); - }); - } - + clearCachedJob(cachedJobIdRef.current); clearCustomWorkbenchViewData(VIEW_ID); unregisterCustomWorkbenchView(VIEW_ID); setLeftPanelView('toolPicker'); }; }, [ - cachedJobId, + clearCachedJob, clearCustomWorkbenchViewData, registerCustomWorkbenchView, setCustomWorkbenchViewData,