From daf5c2c11796178befff57d8ab8c2cfadf33f0b2 Mon Sep 17 00:00:00 2001 From: ht Date: Fri, 28 Aug 2026 10:46:54 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20ge=C3=A7mi=C5=9F=20ar=C5=9Fiv=20kay?= =?UTF-8?q?=C4=B1tlar=C4=B1=20ana=20ekran=C4=B1=20=C3=A7=C3=B6kertiyordu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SummaryCards/TenderList/DailyBulletin/ResultSearch/TenderCalendar: eklenmeZamani, baslik, kurum, ikn, tarih alanlarına güvenli erişim (arşiv kayıtlarında bu alanlar bulunmuyordu → TypeError, boş ekran) - history-store: arşiv kayıtlarına arayüzün beklediği varsayılan alanlar --- server/history-store.mjs | 14 ++++++++++++++ src/components/SummaryCards.jsx | 2 +- src/components/TenderList.jsx | 10 +++++----- src/components/tools/DailyBulletin.jsx | 2 +- src/components/tools/ResultSearch.jsx | 6 +++--- src/components/tools/TenderCalendar.jsx | 2 +- 6 files changed, 25 insertions(+), 11 deletions(-) diff --git a/server/history-store.mjs b/server/history-store.mjs index 0121ac2..5559240 100644 --- a/server/history-store.mjs +++ b/server/history-store.mjs @@ -126,6 +126,20 @@ function rowToTender(r) { gecerliTeklifSayisi: r.gecerli_teklif_sayisi, durum: 'Sonuçlandı', items: [], + // Arayüzün beklediği alanlar (geçmiş kayıtta karşılığı yok — güvenli varsayılan) + eklenmeZamani: 'arşivden', + isYeni: false, + aciliyetBadge: null, + usul: r.ihale_tipi || 'İhale', + kurumTipi: '', + brans: '', + bolge: '', + aciklama: '', + yeterlikKriterleri: [], + kanbanStatus: null, + atananPersonel: null, + takipte: false, + incelendi: false, }; } diff --git a/src/components/SummaryCards.jsx b/src/components/SummaryCards.jsx index 98733d9..7ffda39 100644 --- a/src/components/SummaryCards.jsx +++ b/src/components/SummaryCards.jsx @@ -6,7 +6,7 @@ export const SummaryCards = () => { const { tenders, quickFilter, setQuickFilter, setActiveTab } = useApp(); const activeCount = tenders.filter(t => t.durum === 'Aktif').length; - const todayCount = tenders.filter(t => t.eklenmeZamani.includes('önce') || t.eklenmeZamani.includes('az')).length; + const todayCount = tenders.filter(t => (t.eklenmeZamani || '').includes('önce') || (t.eklenmeZamani || '').includes('az')).length; const trackedCount = tenders.filter(t => t.takipte).length; const sinceLastLoginCount = 14; // Mocked counter const unreadCount = tenders.filter(t => !t.incelendi).length; diff --git a/src/components/TenderList.jsx b/src/components/TenderList.jsx index 756b898..17af0ad 100644 --- a/src/components/TenderList.jsx +++ b/src/components/TenderList.jsx @@ -27,17 +27,17 @@ export const TenderList = () => { // Search Query if (searchQuery) { const q = searchQuery.toLowerCase(); - const matchTitle = tender.baslik.toLowerCase().includes(q); - const matchKurum = tender.kurum.toLowerCase().includes(q); - const matchIkn = tender.ikn.toLowerCase().includes(q); - const matchItems = tender.items && tender.items.some(i => i.ad.toLowerCase().includes(q)); + const matchTitle = (tender.baslik || '').toLowerCase().includes(q); + const matchKurum = (tender.kurum || '').toLowerCase().includes(q); + const matchIkn = (tender.ikn || '').toLowerCase().includes(q); + const matchItems = tender.items && tender.items.some(i => (i.ad || '').toLowerCase().includes(q)); if (!matchTitle && !matchKurum && !matchIkn && !matchItems) return false; } // Quick Filter if (quickFilter === 'favori_kurumlar' && !(favoriteKurumlar || []).includes((tender.kurum || '').trim())) return false; if (quickFilter === 'dogrudan_temin' && tender.alimTuru !== 'Doğrudan Temin') return false; - if (quickFilter === 'bugun_eklenenler' && !(tender.eklenmeZamani.includes('önce') || tender.eklenmeZamani.includes('az'))) return false; + if (quickFilter === 'bugun_eklenenler' && !((tender.eklenmeZamani || '').includes('önce') || (tender.eklenmeZamani || '').includes('az'))) return false; if (quickFilter === 'incelenenler' && !tender.incelendi) return false; if (quickFilter === 'incelenmedi' && tender.incelendi) return false; if (quickFilter === 'takiptekiler' && !tender.takipte) return false; diff --git a/src/components/tools/DailyBulletin.jsx b/src/components/tools/DailyBulletin.jsx index dac418b..19e9108 100644 --- a/src/components/tools/DailyBulletin.jsx +++ b/src/components/tools/DailyBulletin.jsx @@ -6,7 +6,7 @@ export const DailyBulletin = () => { const { tenders, setActiveTenderDetail } = useApp(); const todayStr = '10.08.2026'; - const todayTenders = tenders.filter(t => t.tarih === todayStr || t.eklenmeZamani.includes('az') || t.eklenmeZamani.includes('önce')); + const todayTenders = tenders.filter(t => t.tarih === todayStr || (t.eklenmeZamani || '').includes('az') || (t.eklenmeZamani || '').includes('önce')); return (
diff --git a/src/components/tools/ResultSearch.jsx b/src/components/tools/ResultSearch.jsx index 63eb9ed..48c5105 100644 --- a/src/components/tools/ResultSearch.jsx +++ b/src/components/tools/ResultSearch.jsx @@ -12,9 +12,9 @@ export const ResultSearch = () => { if (!query) return true; const q = query.toLowerCase(); return ( - t.baslik.toLowerCase().includes(q) || - t.ikn.toLowerCase().includes(q) || - t.kurum.toLowerCase().includes(q) || + (t.baslik || '').toLowerCase().includes(q) || + (t.ikn || '').toLowerCase().includes(q) || + (t.kurum || '').toLowerCase().includes(q) || (t.kazananFirma && t.kazananFirma.toLowerCase().includes(q)) ); }); diff --git a/src/components/tools/TenderCalendar.jsx b/src/components/tools/TenderCalendar.jsx index 81935a8..a8047ca 100644 --- a/src/components/tools/TenderCalendar.jsx +++ b/src/components/tools/TenderCalendar.jsx @@ -15,7 +15,7 @@ export const TenderCalendar = () => { { date: '15.08.2026', label: 'Cumartesi', count: 1 } ]; - const dayTenders = tenders.filter(t => t.tarih === selectedDay || (selectedDay === '10.08.2026' && t.tarih.includes('10'))); + const dayTenders = tenders.filter(t => t.tarih === selectedDay || (selectedDay === '10.08.2026' && (t.tarih || '').includes('10'))); return (