import React, { useMemo } from 'react'; import { useApp } from '../../context/AppContext'; import { MapPin } from 'lucide-react'; import { provinceDensity, normProvince } from '../../services/analytics'; const ILLER = [ 'Adana','Adıyaman','Afyonkarahisar','Ağrı','Amasya','Ankara','Antalya','Artvin','Aydın','Balıkesir', 'Bilecik','Bingöl','Bitlis','Bolu','Burdur','Bursa','Çanakkale','Çankırı','Çorum','Denizli', 'Diyarbakır','Edirne','Elazığ','Erzincan','Erzurum','Eskişehir','Gaziantep','Giresun','Gümüşhane','Hakkari', 'Hatay','Isparta','Mersin','İstanbul','İzmir','Kars','Kastamonu','Kayseri','Kırklareli','Kırşehir', 'Kocaeli','Konya','Kütahya','Malatya','Manisa','Kahramanmaraş','Mardin','Muğla','Muş','Nevşehir', 'Niğde','Ordu','Rize','Sakarya','Samsun','Siirt','Sinop','Sivas','Tekirdağ','Tokat', 'Trabzon','Tunceli','Şanlıurfa','Uşak','Van','Yozgat','Zonguldak','Aksaray','Bayburt','Karaman', 'Kırıkkale','Batman','Şırnak','Bartın','Ardahan','Iğdır','Yalova','Karabük','Kilis','Osmaniye','Düzce', ]; function heat(count, max) { if (!count) return { bg: '#f1f5f9', fg: '#94a3b8' }; const r = count / (max || 1); if (r > 0.66) return { bg: '#b91c1c', fg: '#fff' }; if (r > 0.4) return { bg: '#ef4444', fg: '#fff' }; if (r > 0.2) return { bg: '#f59e0b', fg: '#111' }; if (r > 0.08) return { bg: '#fcd34d', fg: '#111' }; return { bg: '#dbeafe', fg: '#1e40af' }; } export const TurkeyHeatMap = () => { const { tenders, setActiveTab, setSelectedCity } = useApp(); const density = useMemo(() => provinceDensity(tenders), [tenders]); const max = Math.max(1, ...density.values()); const withData = ILLER.filter((il) => density.get(normProvince(il))); const topPct = Math.round((withData.length / 81) * 100); const openCity = (il) => { setSelectedCity(il); setActiveTab('list'); }; return (

İl Bazlı İhale Yoğunluk Haritası — Canlı

Yüklü ihalelerin illere dağılımı. Bir ile tıklayınca liste o ile filtrelenir. {withData.length}/81 ilde aktif ihale (%{topPct}).

Az Çok
{ILLER.map((il) => { const c = density.get(normProvince(il)) || 0; const { bg, fg } = heat(c, max); return ( ); })}
); };