import React, { useEffect, useState } from 'react'; import { Package, Loader2, Search } from 'lucide-react'; import { kalemleriGetir } from '../services/kalem'; /** * Teklif cetveli kalemleri — ortak havuzdan. * * Kalemler EKAP API'sinde yok; doküman sayfası CAPTCHA ile korunduğu için * sunucu otomatik indiremiyor. Bir kullanıcı ihale dokümanını yüklediğinde * kalemler ayrıştırılıp havuza yazılıyor ve bu liste herkese görünür oluyor. */ export const TeklifCetveliKalemleri = ({ikn, knownItemCount = 0}) => ; const SharedItems = ({ikn, knownItemCount}) => { const [durum, setDurum] = useState({ yukleniyor: true, kalemler: [], kaynak: null }); const [suzgec, setSuzgec] = useState(''); const [retry, setRetry] = useState(0); useEffect(() => { if (!ikn) { setDurum({ yukleniyor: false, kalemler: [], kaynak: null }); return; } let iptal = false; const controller = new AbortController(); setDurum({yukleniyor:true,kalemler:[],kaynak:null}); kalemleriGetir(ikn, {signal:controller.signal}) .then((d) => { if (!iptal) setDurum({ yukleniyor: false, kalemler: d.kalemler || [], kaynak: d.kaynak }); }) .catch(error => { if (!iptal) setDurum({ yukleniyor:false, kalemler:[], kaynak:null, hata:error.message }); }); return () => { iptal = true; controller.abort(); }; }, [ikn, retry]); if (durum.yukleniyor) { return (

Teklif cetveli kalemleri okunuyor…

); } if (durum.hata) return

Ortak doküman kalemleri yüklenemedi. {durum.hata}

; if (!durum.kalemler.length) { return (

Teklif Cetveli Kalemleri

{knownItemCount > 0 ? `İhale kaydında aşağıda gösterilen ${knownItemCount} kalem var. Ortak doküman havuzunda ayrıca çıkarılmış bir cetvel bulunamadı; mevcut kalemleri resmi dokümanla karşılaştırın.` : 'Ortak doküman havuzunda bu ihale için kalem bulunamadı. Resmi ihale dokümanını yükleyerek kalemleri çıkarmayı deneyebilirsiniz.'} {' '}İhale dokümanından ortak havuza aktarılan kalemler diğer kullanıcılara da görünür.

); } const q = suzgec.trim().toLocaleLowerCase('tr-TR'); const gorunen = q ? durum.kalemler.filter((k) => (k.ad || '').toLocaleLowerCase('tr-TR').includes(q)) : durum.kalemler; return (

Ortak Doküman Kalemleri ({durum.kalemler.length})

{gorunen.map((k, i) => ( ))} {gorunen.length === 0 && ( )}
# Kalem adı Miktar
{k.sira ?? i + 1} {k.ad} {k.miktar != null ? k.miktar.toLocaleString('tr-TR') : '—'} {k.birim || ''}
Bu aramayla eşleşen kalem yok.
{durum.kaynak?.dosya && (

Kaynak: {durum.kaynak.dosya} — bir kullanıcının yüklediği ihale dokümanından otomatik çıkarıldı. Teklif vermeden önce şartnamenin aslıyla karşılaştırın.

)}
); };