import { useState, useEffect } from 'react'; import { motion } from 'framer-motion'; import { Link } from 'react-router-dom'; import { Calendar, Users, Disc3, ArrowRight, Clock, Link2, Tag } from 'lucide-react'; function Home() { const [members, setMembers] = useState([]); const [upcomingSchedules, setUpcomingSchedules] = useState([]); useEffect(() => { // 멤버 데이터 로드 fetch('/api/members') .then(res => res.json()) .then(data => setMembers(data)) .catch(error => console.error('멤버 데이터 로드 오류:', error)); // 다가오는 일정 로드 (오늘 이후 3개) // KST 기준으로 오늘 날짜 계산 const now = new Date(); const kstOffset = 9 * 60; // KST는 UTC+9 const kstTime = new Date(now.getTime() + (kstOffset + now.getTimezoneOffset()) * 60000); const todayStr = kstTime.toISOString().split('T')[0]; fetch(`/api/schedules?startDate=${todayStr}&limit=3`) .then(res => res.json()) .then(data => setUpcomingSchedules(data)) .catch(error => console.error('일정 데이터 로드 오류:', error)); }, []); return (
{/* 히어로 섹션 */}

fromis_9

프로미스나인

인사드리겠습니다. 둘, 셋!
이제는 약속해 소중히 간직해,
당신의 아이돌로 성장하겠습니다!

멤버 보기
{/* 장식 */}
{/* 퀵 링크 섹션 */}

멤버

5명의 멤버를 만나보세요

앨범

앨범과 음악을 확인하세요

일정

다가오는 일정을 확인하세요

{/* 멤버 미리보기 */}

멤버

전체보기
{members.filter(m => !m.is_former).map((member, index) => (
{member.name}

{member.name}

{member.position?.split(',')[0]}

))}
{/* 일정 미리보기 */}

다가오는 일정

전체보기
{upcomingSchedules.length === 0 ? (

예정된 일정이 없습니다

) : (
{upcomingSchedules.map((schedule, index) => { const scheduleDate = new Date(schedule.date); const day = scheduleDate.getDate(); const weekdays = ['일', '월', '화', '수', '목', '금', '토']; const weekday = weekdays[scheduleDate.getDay()]; // 멤버 처리 const memberList = schedule.member_names ? schedule.member_names.split(',') : []; const displayMembers = memberList.length >= 5 ? ['프로미스나인'] : memberList; return ( {/* 날짜 영역 - primary 색상 고정 */}
{day} {weekday}
{/* 내용 영역 */}

{schedule.title}

{schedule.time && (
{schedule.time.slice(0, 5)}
)} {schedule.category_name && (
{schedule.category_name}
)} {schedule.source_name && (
{schedule.source_name}
)}
{/* 멤버 태그 */} {displayMembers.length > 0 && (
{displayMembers.map((name, i) => ( {name.trim()} ))}
)}
); })}
)}
); } export default Home;