import { useState } from 'react'; import { Swiper, SwiperSlide } from 'swiper/react'; import { Navigation } from 'swiper/modules'; import { Calendar, Clock, MapPin, Link2, GraduationCap, ExternalLink, ChevronLeft, ChevronRight, } from 'lucide-react'; import 'swiper/css'; import 'swiper/css/navigation'; import { Lightbox, KakaoMap } from '@/components/common'; import { decodeHtmlEntities, formatFullDate, formatTime } from './utils'; /** * 행사 일정 섹션 컴포넌트 (학교 행사 등) */ function EventSection({ schedule }) { const members = schedule.members || []; const isFullGroup = members.length === 5; const posters = schedule.posters || []; const postUrls = schedule.postUrls || []; const venue = schedule.venue || null; const categoryColor = schedule.category?.color || '#facc15'; const kakaoMapUrl = venue && venue.lat && venue.lng ? `https://map.kakao.com/link/map/${encodeURIComponent(venue.name)},${venue.lat},${venue.lng}` : null; const [lightbox, setLightbox] = useState({ open: false, index: 0 }); const lightboxImages = posters.map((p) => p.originalUrl || p.mediumUrl); const openLightbox = (index) => setLightbox({ open: true, index }); return (
{/* 왼쪽: 포스터 슬라이드 */}
{posters.length > 0 ? (
1 ? { prevEl: '.event-poster-prev', nextEl: '.event-poster-next', } : false} spaceBetween={0} slidesPerView={1} loop={posters.length > 1} className="w-full" > {posters.map((p, idx) => ( ))} {posters.length > 1 && ( <>
{posters.length}장
)}
) : (
)}
{/* 오른쪽: 정보 */}
{/* 학교 + 날짜 */}
{schedule.schoolName && ( {schedule.schoolName} )} {formatFullDate(schedule.date)} {schedule.time && ( {formatTime(schedule.time)} )}
{/* 제목 */}

{decodeHtmlEntities(schedule.title)}

{/* 멤버 */} {members.length > 0 && (
{isFullGroup ? ( 프로미스나인 ) : ( members.map((member) => ( {member.name} )) )}
)} {/* 장소 */} {venue && (

{venue.name}

{venue.address && (

{venue.address}

)} {kakaoMapUrl && ( 카카오맵에서 보기 )}
{venue.lat && venue.lng && ( )}
)} {/* URL 목록 */} {postUrls.length > 0 && (

관련 링크

    {postUrls.map((url, idx) => (
  • · {url}
  • ))}
)}
{/* Lightbox */} {posters.length > 0 && ( setLightbox((prev) => ({ ...prev, open: false }))} onIndexChange={(index) => setLightbox((prev) => ({ ...prev, index }))} showCounter={posters.length > 1} showDownload /> )}
); } export default EventSection;