import { PreparationOverview } from './PreparationOverview'; import { useDeadlineClock } from '../hooks/useDeadlineClock'; import { deadlineInfo } from '../services/tenderCalendar'; import React, { useState } from 'react'; import { useApp } from '../context/AppContext'; import { Kanban, User, Calendar, MapPin, Eye } from 'lucide-react'; export const KanbanBoard = () => { const now = useDeadlineClock(); const { tenders, updateKanbanStatus, setActiveTenderDetail, teamMembers, savingCount, saveError } = 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), ])]; // Panoda yalnızca takibe alınan ya da bir kolona taşınmış ihaleler durur. // Sunucu HER ilana varsayılan 'incelenecek' durumu veriyor; onu "panoda" // saymak 8 bin+ kartı tek seferde çizdirip sekmeyi saniyelerce donduruyordu. const filteredTenders = tenders.filter(t => { const panoda = t.takipte || (t.kanbanStatus && t.kanbanStatus !== 'incelenecek'); if (!panoda) return false; if (selectedPersonel && t.atananPersonel !== selectedPersonel) return false; return true; }); const handleDragStart = (e, id) => { if(savingCount > 0){e.preventDefault();return;} e.dataTransfer.setData('tenderId', id); setDraggedTenderId(id); }; const handleDragOver = (e) => { e.preventDefault(); }; const handleDrop = (e, columnId) => { e.preventDefault(); if(savingCount > 0)return; const id = e.dataTransfer.getData('tenderId') || draggedTenderId; if (id) { updateKanbanStatus(id, columnId); setDraggedTenderId(null); } }; return (
Kartın durumunu seçerek veya kartı kolonlar arasında sürükleyerek süreci yönetin.
Slack/Teams gönderimi bu panoda desteklenmiyor.
Değişiklik kaydediliyor…
} {saveError &&{saveError}
}İhale yok