import React, { useState } from 'react' import { motion, AnimatePresence } from 'framer-motion' import { HiHeart, HiChatBubbleLeft, HiMapPin, HiUsers, HiCalendar, HiXMark, HiChevronLeft, HiChevronRight, } from 'react-icons/hi2' import dayjs from 'dayjs' import 'dayjs/locale/tr' import relativeTime from 'dayjs/plugin/relativeTime' import { mockEvents, CalendarEvent, EventComment } from '../../mocks/mockIntranetData' import { mockEmployees } from '@/mocks/mockEmployees' dayjs.locale('tr') dayjs.extend(relativeTime) const EventsModule: React.FC = () => { const [selectedEvent, setSelectedEvent] = useState(null) const [selectedPhotoIndex, setSelectedPhotoIndex] = useState(0) const [showPhotoModal, setShowPhotoModal] = useState(false) const [selectedFilter, setSelectedFilter] = useState< 'all' | 'social' | 'training' | 'company' | 'sport' | 'culture' >('all') const [newComment, setNewComment] = useState('') const [events, setEvents] = useState(mockEvents) const filteredEvents = selectedFilter === 'all' ? events.filter((e) => e.isPublished) : events.filter((e) => e.isPublished && e.type === selectedFilter) const handleLikeEvent = (eventId: string) => { setEvents((prev) => prev.map((e) => (e.id === eventId ? { ...e, likes: e.likes + 1 } : e))) if (selectedEvent?.id === eventId) { setSelectedEvent((prev) => (prev ? { ...prev, likes: prev.likes + 1 } : null)) } } const handleAddComment = (eventId: string) => { if (!newComment.trim()) return const comment: EventComment = { id: `c${Date.now()}`, author: mockEmployees[0], content: newComment, createdAt: new Date(), likes: 0, } setEvents((prev) => prev.map((e) => (e.id === eventId ? { ...e, comments: [...e.comments, comment] } : e)), ) if (selectedEvent?.id === eventId) { setSelectedEvent((prev) => (prev ? { ...prev, comments: [...prev.comments, comment] } : null)) } setNewComment('') } const getTypeColor = (type: string) => { const colors: Record = { social: 'bg-purple-100 dark:bg-purple-900/30 text-purple-700 dark:text-purple-300', training: 'bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300', company: 'bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-300', sport: 'bg-orange-100 dark:bg-orange-900/30 text-orange-700 dark:text-orange-300', culture: 'bg-pink-100 dark:bg-pink-900/30 text-pink-700 dark:text-pink-300', } return colors[type] || colors.social } const getTypeLabel = (type: string) => { const labels: Record = { social: '🎉 Sosyal', training: '📚 Eğitim', company: '🏢 Kurumsal', sport: '⚽ Spor', culture: '🎨 Kültür', } return labels[type] || type } return (
{/* Header */}

🎊 Etkinlikler

Şirket etkinlikleri, fotoğraflar ve anılar

{/* Filter Tabs */}
{[ { value: 'all' as const, label: '🌟 Tümü' }, { value: 'social' as const, label: '🎉 Sosyal' }, { value: 'training' as const, label: '📚 Eğitim' }, { value: 'company' as const, label: '🏢 Kurumsal' }, { value: 'sport' as const, label: '⚽ Spor' }, { value: 'culture' as const, label: '🎨 Kültür' }, ].map((tab) => ( ))}
{/* Events Grid */}
{filteredEvents.map((event, idx) => ( setSelectedEvent(event)} > {/* Cover Photo */}
{event.title}
{getTypeLabel(event.type)}
{event.photos.length > 1 && (
+{event.photos.length - 1} fotoğraf
)}
{/* Content */}

{event.title}

{event.description}

{dayjs(event.date).format('DD MMMM YYYY')}
{event.location}
{event.comments.length}
{event.participants} kişi
))}
{filteredEvents.length === 0 && (

Bu kategoride henüz etkinlik yok

)}
{/* Event Detail Modal */} {selectedEvent && ( <> setSelectedEvent(null)} />
e.stopPropagation()} > {/* Header */}
{getTypeLabel(selectedEvent.type)} {dayjs(selectedEvent.date).format('DD MMMM YYYY')}

{selectedEvent.title}

{selectedEvent.description}

{selectedEvent.location}
{selectedEvent.participants} katılımcı
{selectedEvent.organizer.fullName} Düzenleyen: {selectedEvent.organizer.fullName}
{/* Photo Gallery */}

📸 Fotoğraflar ({selectedEvent.photos.length})

{selectedEvent.photos.map((photo, idx) => ( { setSelectedPhotoIndex(idx) setShowPhotoModal(true) }} > {`${selectedEvent.title} ))}
{/* Comments Section */}

💬 Yorumlar ({selectedEvent.comments.length})

{/* Comments List */}
{selectedEvent.comments.map((comment) => (
{comment.author.fullName}
{comment.author.fullName} {dayjs(comment.createdAt).fromNow()}

{comment.content}

))}
{/* Add Comment */}
You
setNewComment(e.target.value)} onKeyPress={(e) => { if (e.key === 'Enter') { handleAddComment(selectedEvent.id) } }} placeholder="Yorumunuzu yazın..." className="flex-1 px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500" />
)}
{/* Photo Viewer Modal */} {showPhotoModal && selectedEvent && ( <> setShowPhotoModal(false)} />
e.stopPropagation()} > {/* Close Button */} {/* Navigation */} {selectedEvent.photos.length > 1 && ( <> )} {/* Image */} {`${selectedEvent.title} {/* Counter */}
{selectedPhotoIndex + 1} / {selectedEvent.photos.length}
)}
) } export default EventsModule