import React, { useState, useMemo } from 'react'; import { useApp } from '../context/AppContext'; import { TenderCard } from './TenderCard'; import { Download, SlidersHorizontal, Layers, ChevronLeft, ChevronRight } from 'lucide-react'; import confetti from 'canvas-confetti'; export const TenderList = () => { const { tenders, searchQuery, selectedCity, selectedAlimTuru, selectedSektor, selectedKurumTipi, quickFilter, onlyValidOnly } = useApp(); const [sortBy, setSortBy] = useState('newest'); // 'newest', 'urgent', 'distant' const [currentPage, setCurrentPage] = useState(1); const itemsPerPage = 10; // Filter logic const filteredTenders = useMemo(() => { return tenders.filter(tender => { // 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)); if (!matchTitle && !matchKurum && !matchIkn && !matchItems) return false; } // Quick Filter 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 === 'incelenenler' && !tender.incelendi) return false; if (quickFilter === 'incelenmedi' && tender.incelendi) return false; if (quickFilter === 'takiptekiler' && !tender.takipte) return false; if (quickFilter === 'sozlesmeler' && tender.durum !== 'Sözleşme İmzalandı') return false; if (quickFilter === 'sonuclananlar' && tender.durum !== 'Sonuçlandı') return false; if (quickFilter === 'iptal' && tender.durum !== 'İptal') return false; // Dropdown Filters if (selectedCity && tender.sehir !== selectedCity) return false; if (selectedAlimTuru && tender.alimTuru !== selectedAlimTuru) return false; if (selectedSektor && tender.sektor !== selectedSektor) return false; if (selectedKurumTipi && tender.kurumTipi !== selectedKurumTipi) return false; return true; }).sort((a, b) => { if (sortBy === 'newest') return b.id.localeCompare(a.id); if (sortBy === 'urgent') return a.tarih.localeCompare(b.tarih); if (sortBy === 'distant') return b.tarih.localeCompare(a.tarih); return 0; }); }, [tenders, searchQuery, selectedCity, selectedAlimTuru, selectedSektor, selectedKurumTipi, quickFilter, sortBy]); const totalPages = Math.max(1, Math.ceil(filteredTenders.length / itemsPerPage)); const paginatedTenders = filteredTenders.slice((currentPage - 1) * itemsPerPage, currentPage * itemsPerPage); const handleExportExcel = () => { confetti({ particleCount: 80, spread: 60, origin: { y: 0.6 } }); const headers = ['IKN', 'Baslik', 'Kurum', 'Sehir', 'Tarih', 'Alim Turu', 'Sektor']; const rows = filteredTenders.map(t => [ t.ikn, `"${t.baslik.replace(/"/g, '""')}"`, `"${t.kurum.replace(/"/g, '""')}"`, t.sehir, t.tarih, t.alimTuru, t.sektor ]); const csvContent = 'data:text/csv;charset=utf-8,\uFEFF' + [headers.join(','), ...rows.map(r => r.join(','))].join('\n'); const encodedUri = encodeURI(csvContent); const link = document.createElement('a'); link.setAttribute('href', encodedUri); link.setAttribute('download', `ihaleist_ihale_listesi_${Date.now()}.csv`); document.body.appendChild(link); link.click(); document.body.removeChild(link); }; return (
Lütfen arama kelimenizi değiştirin veya filtreleri temizleyin.