import React, { useState } from 'react'; import { useApp } from '../context/AppContext'; import { Kanban, User, Calendar, MapPin, Star, Plus, ArrowRight, Eye } from 'lucide-react'; export const KanbanBoard = () => { const { tenders, updateKanbanStatus, setActiveTenderDetail, teamMembers } = useApp(); const [selectedPersonel, setSelectedPersonel] = useState(''); const [draggedTenderId, setDraggedTenderId] = useState(null); const columns = [ { id: 'incelenecek', title: 'İncelenecek', color: 'bg-slate-100 border-slate-300 text-slate-800' }, { id: 'inceleniyor', title: 'İnceleniyor', color: 'bg-blue-50 border-blue-200 text-blue-900' }, { id: 'teklif_hazirlaniyor', title: 'Teklif Hazırlanıyor', color: 'bg-amber-50 border-amber-200 text-amber-900' }, { id: 'teklif_verildi', title: 'Teklif Verildi', color: 'bg-purple-50 border-purple-200 text-purple-900' }, { id: 'kazanildi', title: 'Kazanıldı', color: 'bg-emerald-50 border-emerald-200 text-emerald-900' }, { id: 'kaybedildi', title: 'Kaybedildi', color: 'bg-rose-50 border-rose-200 text-rose-900' } ]; // Gerçek ekip üyelerinden (Ekip Yönetimi paneli) + atanmış eski isimler const personnelList = [...new Set([ ...teamMembers.map((m) => m.name), ...tenders.map((t) => t.atananPersonel).filter(Boolean), ])]; const filteredTenders = tenders.filter(t => { if (!t.takipte && !t.kanbanStatus) return false; if (selectedPersonel && t.atananPersonel !== selectedPersonel) return false; return true; }); const handleDragStart = (e, id) => { e.dataTransfer.setData('tenderId', id); setDraggedTenderId(id); }; const handleDragOver = (e) => { e.preventDefault(); }; const handleDrop = (e, columnId) => { e.preventDefault(); const id = e.dataTransfer.getData('tenderId') || draggedTenderId; if (id) { updateKanbanStatus(id, columnId); setDraggedTenderId(null); } }; return (
{/* Kanban Header Controls */}

Ekip Kanban Takip Panosu

Kartları kolonlar arasında sürükleyerek ihale süreçlerinizi yönetin.

{/* Personnel Filter & Slack Notification Buttons */}
{/* Kanban Columns Grid */}
{columns.map(col => { const colTenders = filteredTenders.filter(t => (t.kanbanStatus || 'incelenecek') === col.id); return (
handleDrop(e, col.id)} className={`rounded-2xl border ${col.color} p-3 flex flex-col min-h-[550px] shadow-2xs transition-colors`} > {/* Column Header */}
{col.title} {colTenders.length}
{/* Column Cards */}
{colTenders.length === 0 ? (

İhale yok

) : ( colTenders.map(t => (
handleDragStart(e, t.id)} className="bg-white rounded-xl p-3 border border-slate-200 shadow-xs hover:shadow-md cursor-grab active:cursor-grabbing space-y-2 transition-all group" >
#{t.ikn}

setActiveTenderDetail(t)} className="font-bold text-xs text-slate-900 line-clamp-2 hover:text-blue-600 cursor-pointer leading-snug" > {t.baslik}

{t.sehir} {t.tarih}
{/* Personnel Select on Card */}
Atanan:
)) )}
); })}
); };