import { useState, useEffect } from 'react'; import { motion } from 'framer-motion'; import { Link } from 'react-router-dom'; import { Calendar, ArrowRight, Clock, Link2, Tag } from 'lucide-react'; import { getTodayKST } from '../../../utils/date'; import { getMembers } from '../../../api/public/members'; import { getUpcomingSchedules } from '../../../api/public/schedules'; function Home() { const [members, setMembers] = useState([]); const [upcomingSchedules, setUpcomingSchedules] = useState([]); useEffect(() => { // 멤버 데이터 로드 getMembers() .then(data => setMembers(data)) .catch(error => console.error('멤버 데이터 로드 오류:', error)); // 다가오는 일정 로드 (오늘 이후 3개) getUpcomingSchedules(3) .then(data => setUpcomingSchedules(data)) .catch(error => console.error('일정 데이터 로드 오류:', error)); }, []); return (
{/* 히어로 섹션 */}

fromis_9

프로미스나인

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

멤버 보기
{/* 장식 */}
{/* 그룹 통계 섹션 */}
{[ { value: "2018.01.24", label: "데뷔일" }, { value: `D+${(Math.floor((new Date() - new Date('2018-01-24')) / (1000 * 60 * 60 * 24)) + 1).toLocaleString()}`, label: "D+Day" }, { value: "5", label: "멤버 수" }, { value: "flover", label: "팬덤명" } ].map((stat, index) => (

{stat.value}

{stat.label}

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

멤버

전체보기
{members.filter(m => !m.is_former).map((member, index) => ( {/* 이미지 컨테이너 */}
{member.name}
{/* 그라데이션 오버레이 */}
{/* 멤버 정보 */}

{member.name}

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

다가오는 일정

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

예정된 일정이 없습니다

) : ( {upcomingSchedules.map((schedule) => { const scheduleDate = new Date(schedule.date); const today = new Date(); const currentYear = today.getFullYear(); const currentMonth = today.getMonth(); const scheduleYear = scheduleDate.getFullYear(); const scheduleMonth = scheduleDate.getMonth(); const isCurrentYear = scheduleYear === currentYear; const isCurrentMonth = isCurrentYear && scheduleMonth === currentMonth; 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 색상 고정 */}
{/* 현재 년도가 아니면 년.월 표시 */} {!isCurrentYear && ( {scheduleYear}.{scheduleMonth + 1} )} {/* 현재 달이 아니면 월 표시 (현재 년도일 때) */} {isCurrentYear && !isCurrentMonth && ( {scheduleMonth + 1}월 )} {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;