import React, {useEffect,useRef,useState} from 'react'; import {getToken} from '../services/auth'; const labels={baslik:'Başlık',kurum:'İdare',tarih:'Tarih',saat:'Saat',durum:'Durum',alimTuru:'Alım türü',aciklama:'İlan metni',documentVersion:'Doküman sürümü'}; export function TenderSourceHistory({tender}) { const [state,setState]=useState({records:[],nextCursor:null,loaded:false,error:null,loading:false}); const active=useRef(null); useEffect(()=>()=>{const pending=active.current;active.current=null;pending?.abort();},[]); const load=async(before=null)=>{ if(active.current)return; const controller=new AbortController();active.current=controller; const token=getToken(),timer=setTimeout(()=>controller.abort(),30000); setState(s=>({...s,loading:true,error:null})); try { const query=new URLSearchParams({ikn:tender.ikn,kurum:tender.kurum || ''});if(before)query.set('before',before); const res=await fetch('/api/tenders/source-history?'+query,{headers:{Authorization:`Bearer ${token}`},signal:controller.signal}); const data=await res.json(); if(!res.ok || !data.success || !Array.isArray(data.records))throw new Error(data.error || 'Kaynak geçmişi alınamadı.'); if(!controller.signal.aborted && getToken()===token)setState(s=>({records:before?[...s.records,...data.records]:data.records,nextCursor:data.nextCursor,loaded:true,error:null,loading:false})); } catch(error) { if(active.current===controller && getToken()===token)setState(s=>({...s,loading:false,error:controller.signal.aborted?'Kaynak geçmişi zamanında alınamadı. Yeniden deneyin.':error.message})); } finally {clearTimeout(timer);if(active.current===controller)active.current=null;} }; return
Kaynak değişiklik geçmişi

Uygulamanın gözlemlediği sürümler gösterilir. Gözlem zamanı resmi değişiklik tarihi değildir; kayıt öncesindeki veya iki kontrol arasındaki değişiklikler bulunmayabilir. Farklı kaynaklar ayrı izlenir.

{!state.loaded && } {state.loading &&

Kaynak geçmişi yükleniyor…

} {state.error &&

{state.error}

} {state.loaded && !state.records.length &&

Henüz gözlem kaydı yok. Bu, ihale bilgilerinin hiç değişmediğini göstermez.

}
    {state.records.map(record=>
  1. {new Date(record.observedAt).toLocaleString('tr-TR')} · {record.sourceId}

    {!record.changes.length?

    Bu kaynak için ilk gözlem.

    :record.changes.map(change=>
    {labels[change.field] || change.field} değişti

    Önce: {change.before ?? 'Bilinmiyor'}

    Sonra: {change.after ?? 'Bilinmiyor'}

    )}
  2. )}
{state.nextCursor && }
; }