import React, { useState } from 'react' import { motion, AnimatePresence } from 'framer-motion' import { HiBell as BellIcon, HiCalendar as CalendarIcon, HiDocumentText as DocumentTextIcon, HiChartBar as ChartBarIcon, HiUserGroup as UserGroupIcon, HiClock as ClockIcon, HiSparkles as SparklesIcon, HiArrowTrendingUp as ArrowTrendingUpIcon, HiArrowTrendingDown as ArrowTrendingDownIcon, HiXMark, HiEye, HiPaperClip, } from 'react-icons/hi2' import dayjs from 'dayjs' import 'dayjs/locale/tr' import relativeTime from 'dayjs/plugin/relativeTime' import isBetween from 'dayjs/plugin/isBetween' import { mockAnnouncements, mockEvents, mockBirthdays, mockAnniversaries, mockQuickLinks, mockTasks, mockDocuments, Announcement, } from '../../mocks/mockIntranetData' dayjs.locale('tr') dayjs.extend(relativeTime) dayjs.extend(isBetween) const IntranetDashboard: React.FC = () => { const [selectedDate] = useState(new Date()) const [selectedAnnouncement, setSelectedAnnouncement] = useState(null) // Bugünün etkinlikleri const todayEvents = mockEvents.filter( (event) => event.isPublished && dayjs(event.date).isSame(dayjs(), 'day'), ) // Yaklaşan etkinlikler (7 gün içinde) const upcomingEvents = mockEvents.filter( (event) => event.isPublished && dayjs(event.date).isAfter(dayjs()) && dayjs(event.date).isBefore(dayjs().add(7, 'day')), ) // Bugün doğanlar (sadece ay ve günü karşılaştır) const todayBirthdays = mockBirthdays.filter((b) => { const birthDate = dayjs(b.date) const today = dayjs() return birthDate.month() === today.month() && birthDate.date() === today.date() }) // Bu haftaki doğum günleri (sadece ay ve günü karşılaştır) const weekBirthdays = mockBirthdays.filter((b) => { const birthDate = dayjs(b.date) const today = dayjs() const weekStart = today.startOf('week') const weekEnd = today.endOf('week') // Bu yılki doğum gününü oluştur const thisBirthday = today.year(today.year()).month(birthDate.month()).date(birthDate.date()) return thisBirthday.isBetween(weekStart, weekEnd, null, '[]') }) // Bu ayki iş yıldönümleri const monthAnniversaries = mockAnniversaries.filter( (a) => dayjs(a.hireDate).month() === dayjs().month(), ) // Öncelikli görevler const priorityTasks = mockTasks .filter((t) => t.priority === 'high' || t.priority === 'urgent') .slice(0, 3) // Sabitlenmiş duyurular const pinnedAnnouncements = mockAnnouncements.filter((a) => a.isPinned).slice(0, 3) const getCategoryColor = (category: string) => { const colors: Record = { general: 'bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300', hr: 'bg-purple-100 dark:bg-purple-900/30 text-purple-700 dark:text-purple-300', it: 'bg-orange-100 dark:bg-orange-900/30 text-orange-700 dark:text-orange-300', event: 'bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-300', urgent: 'bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300', } return colors[category] || colors.general } const getPriorityColor = (priority: string) => { const colors: Record = { low: 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-300', medium: 'bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-300', high: 'bg-orange-100 dark:bg-orange-900/30 text-orange-600 dark:text-orange-300', urgent: 'bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-300', } return colors[priority] } return (
{/* Header */}

Hoş geldiniz, {dayjs().format('DD MMMM YYYY dddd')}

{/* Main Grid */}
{/* Sol Kolon - Duyurular */}
{/* Duyurular */}

Önemli Duyurular

{pinnedAnnouncements.map((announcement) => (
setSelectedAnnouncement(announcement)} className="p-6 hover:bg-gray-50 dark:hover:bg-gray-700/50 cursor-pointer transition-colors" >
{announcement.author.fullName}

{announcement.title}

{announcement.category === 'general' && 'Genel'} {announcement.category === 'hr' && 'İK'} {announcement.category === 'it' && 'IT'} {announcement.category === 'event' && 'Etkinlik'} {announcement.category === 'urgent' && 'Acil'}

{announcement.excerpt}

{announcement.author.fullName} {dayjs(announcement.publishDate).fromNow()} {announcement.viewCount} görüntülenme
))}
{/* Hızlı Erişim */}

Hızlı Erişim

{mockQuickLinks.map((link) => ( {link.icon} {link.name} ))}
{/* Öncelikli Görevler */}

Öncelikli Görevler

{priorityTasks.map((task) => (

{task.title}

{task.priority === 'urgent' && '🔥 Acil'} {task.priority === 'high' && 'Yüksek'} {task.priority === 'medium' && 'Orta'} {task.priority === 'low' && 'Düşük'}

{task.description}

{dayjs(task.dueDate).format('DD MMM')} {task.assignedTo.length} kişi
))}
{/* Sağ Kolon - Etkinlikler & Kutlamalar */}
{/* Bugünün Etkinlikleri */}

Bugün

{todayEvents.length > 0 ? ( todayEvents.map((event) => (

{event.title}

{dayjs(event.date).format('DD MMMM YYYY')} - {event.location}

{event.participants} katılımcı

)) ) : (

Bugün etkinlik yok

)}
{/* Bugün Doğanlar */}

🎂 Bugün Doğanlar

{todayBirthdays.length > 0 ? ( todayBirthdays.map((birthday, index) => (
{birthday.employee.fullName}

{birthday.employee.fullName}

{birthday.age} yaşında 🎉

{birthday.employee.department?.name || 'Genel'}

)) ) : (

Bugün doğan yok

)}
{/* Yaklaşan Etkinlikler */}

Yaklaşan Etkinlikler

{upcomingEvents.length > 0 ? ( upcomingEvents.slice(0, 3).map((event) => (

{event.title}

{dayjs(event.date).format('DD MMMM YYYY')} - {event.location}

)) ) : (

Yaklaşan etkinlik yok

)}
{/* Dokümanlar */}

Son Dokümanlar

{mockDocuments.slice(0, 5).map((doc) => (

{doc.name}

{doc.category === 'policy' && '📋 Politika'} {doc.category === 'procedure' && '📝 Prosedür'} {doc.category === 'form' && '📄 Form'} {doc.category === 'template' && '� Şablon'} {doc.category === 'report' && '📊 Rapor'} {doc.category === 'other' && '📄 Diğer'}

{dayjs(doc.uploadDate).fromNow()} {doc.size}
))}
{/* Doğum Günleri */} {weekBirthdays.length > 0 && (

🎂 Bu Hafta Doğanlar

{weekBirthdays.map((birthday, index) => (
{birthday.employee.fullName}

{birthday.employee.fullName}

{dayjs(birthday.date).format('DD MMMM')} • {birthday.age} yaşında

))}
)} {/* İş Yıldönümleri */} {monthAnniversaries.length > 0 && (

🎉 İş Yıldönümleri

{monthAnniversaries.map((anniversary, index) => (
{anniversary.employee.fullName}

{anniversary.employee.fullName}

{anniversary.years} yıldır bizimle! 🎊

))}
)}
{/* Announcement Detail Modal */} {selectedAnnouncement && ( <> setSelectedAnnouncement(null)} />
e.stopPropagation()} > {/* Header */}
{selectedAnnouncement.category === 'general' && '📢 Genel'} {selectedAnnouncement.category === 'hr' && '👥 İnsan Kaynakları'} {selectedAnnouncement.category === 'it' && '💻 Bilgi Teknolojileri'} {selectedAnnouncement.category === 'event' && '🎉 Etkinlik'} {selectedAnnouncement.category === 'urgent' && '🚨 Acil'} {selectedAnnouncement.isPinned && ( 📌 Sabitlenmiş )}

{selectedAnnouncement.title}

{/* Author Info */}
{selectedAnnouncement.author.fullName}

{selectedAnnouncement.author.fullName}

{dayjs(selectedAnnouncement.publishDate).format('DD MMMM YYYY, HH:mm')} {selectedAnnouncement.viewCount} görüntülenme
{/* Content */}
{/* Image if exists */} {selectedAnnouncement.imageUrl && ( {selectedAnnouncement.title} )} {/* Full Content */}

{selectedAnnouncement.content}

{/* Attachments */} {selectedAnnouncement.attachments && selectedAnnouncement.attachments.length > 0 && (

Ekler ({selectedAnnouncement.attachments.length})

{selectedAnnouncement.attachments.map((attachment, idx) => (

{attachment.name}

{attachment.size}

İndir
))}
)} {/* Departments */} {selectedAnnouncement.departments && selectedAnnouncement.departments.length > 0 && (

Hedef Departmanlar

{selectedAnnouncement.departments.map((dept, idx) => ( {dept} ))}
)} {/* Expiry Date */} {selectedAnnouncement.expiryDate && (

Son Geçerlilik Tarihi:{' '} {dayjs(selectedAnnouncement.expiryDate).format('DD MMMM YYYY')}

)}
{/* Footer */}
)}
) } export default IntranetDashboard