import React,{useEffect,useRef,useState} from 'react'; import {getDocumentTextReview,saveDocumentTextReview} from '../services/account'; import {getToken} from '../services/auth'; export function DocumentTextReview({documentId,extractedText,onAnalyze}) { const [source,setSource]=useState(null); const [text,setText]=useState(extractedText || ''); const [note,setNote]=useState(''); const [compared,setCompared]=useState(false); const [busy,setBusy]=useState(false); const [error,setError]=useState(null); const [saved,setSaved]=useState(null); const [analyzing,setAnalyzing]=useState(false); const live=useRef(true); const sequence=useRef(0); const load=async()=>{ const request=++sequence.current, token=getToken(); setBusy(true);setError(null); try { const data=await getDocumentTextReview(documentId); if(!live.current || request!==sequence.current || token!==getToken())return; setSource(data); // A stale source must be compared afresh; do not seed from an old correction. setText(!data.stale && data.review ? data.review.corrected_text : extractedText || ''); setNote(!data.stale && data.review ? data.review.review_note : ''); setCompared(false);setSaved(null); } catch(e) {if(live.current && request===sequence.current && token===getToken())setError(e.message);} finally {if(live.current && request===sequence.current && token===getToken())setBusy(false);} }; useEffect(()=>{live.current=true;load();return()=>{live.current=false;sequence.current++;};},[documentId]); const save=async()=>{ if(!source || busy)return; const token=getToken();setBusy(true);setError(null);setSaved(null); try { const result=await saveDocumentTextReview(documentId,{fileHash:source.fileHash, expectedRevision:source.review?.revision || 0,correctedText:text,note,allPagesCompared:compared}); if(!live.current || token!==getToken())return; setSource(result);setSaved(result.review);setCompared(false); } catch(e) {if(live.current && token===getToken())setError(e.message);} finally {if(live.current && token===getToken())setBusy(false);} }; const analyze=async()=>{ if(!source?.review || source.stale || busy || analyzing)return; const token=getToken();setAnalyzing(true);setError(null); try {await onAnalyze({documentId,revision:source.review.revision});} catch(e) {if(live.current && token===getToken())setError(e.message);} finally {if(live.current && token===getToken())setAnalyzing(false);} }; return
Metni karşılaştır ve düzelt

Belgenin tüm sayfalarını açıp metin, miktar ve birimleri karşılaştırın. Bu kayıt kullanıcı incelemesidir; resmî onay veya e-imza değildir. Kaydetmek tek başına teklif dosyasını hazır yapmaz.

{source?.stale &&

Kaynak dosya değişmiş. Önceki inceleme geçerli değil; tüm sayfaları yeniden karşılaştırın.

} {source?.review &&

Son kayıt: sürüm {source.review.revision} · {new Date(source.review.reviewed_at).toLocaleString('tr-TR')}

}