import React,{useEffect,useState,useRef} from 'react'; import {listAiJobs,getAiJob,cancelAiJob,retryAiJob} from '../services/aiJobs'; const labels={queued:'Sırada',running:'İşleniyor',completed:'Tamamlandı',failed:'Hata',interrupted:'Kesildi',cancelled:'İptal edildi'}; const operations={'analiz':'Şartname analizi','belge-sor':'Belge sorusu','teklif-denetim':'Taslak denetimi','teklif-taslak':'Taslak üretimi'}; export function AiJobHistory({ikn,onOpen,revision,locked=false,operationFilter='offer'}) { const [jobs,setJobs]=useState([]),[error,setError]=useState(null),[busy,setBusy]=useState(false); const alive=useRef(true); useEffect(()=>{alive.current=true;return()=>{alive.current=false;};},[]); const act=async fn=>{ if(busy)return;setBusy(true);setError(null); try {await fn();}catch(e){if(alive.current)setError(e.message);}finally {if(alive.current)setBusy(false);} }; const refresh=async()=>{const data=await listAiJobs(ikn);if(!Array.isArray(data.jobs))throw new Error('İş listesi alınamadı.');if(alive.current)setJobs(data.jobs.filter(job=>operationFilter==='offer'?job.operation!=='analiz':job.operation===operationFilter));}; useEffect(()=>{ let current=true;setBusy(true);setError(null); listAiJobs(ikn).then(data=>{ if(!Array.isArray(data.jobs))throw new Error('İş listesi alınamadı.'); if(current)setJobs(data.jobs.filter(job=>operationFilter==='offer'?job.operation!=='analiz':job.operation===operationFilter)); }).catch(e=>{if(current)setError(e.message);}).finally(()=>{if(current)setBusy(false);}); return()=>{current=false;}; },[ikn,revision,operationFilter]); return
Kayıtlı AI işleri

Ekran kapansa da sunucudaki işler devam eder. Son 50 iş gösterilir. Kesilen işi yeniden başlatmak sağlayıcıya yeni istek gönderir. Eski sonucu açmak asistanın mevcut metinlerini değiştirir.

{busy&&

İş bilgileri alınıyor…

} {error&&

{error}

} {!jobs.length&&!busy&&!error&&

Bu ihale için kayıtlı AI işi yok.

}
; }