import { motion } from 'framer-motion'; import { ChevronRight, Clock, Tag } from 'lucide-react'; import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { getTodayKST } from '../../../utils/date'; import { getMembers } from '../../../api/public/members'; import { getAlbums } from '../../../api/public/albums'; import { getUpcomingSchedules } from '../../../api/public/schedules'; // 모바일 홈 페이지 function MobileHome() { const navigate = useNavigate(); const [members, setMembers] = useState([]); const [albums, setAlbums] = useState([]); const [schedules, setSchedules] = useState([]); // 데이터 로드 useEffect(() => { // 멤버 로드 getMembers() .then(data => setMembers(data.filter(m => !m.is_former))) .catch(console.error); // 앨범 로드 (최신 2개) getAlbums() .then(data => setAlbums(data.slice(0, 2))) .catch(console.error); // 다가오는 일정 로드 getUpcomingSchedules(3) .then(data => setSchedules(data)) .catch(console.error); }, []); return (
{/* 히어로 섹션 */}

fromis_9

프로미스나인

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

{/* 장식 */}
{/* 멤버 섹션 */}

멤버

{members.map((member) => (
{member.image_url && ( {member.name} )}

{member.name}

))}
{/* 앨범 섹션 */}

앨범

{albums.map((album) => ( navigate(`/album/${album.folder_name}`)} className="bg-white rounded-xl overflow-hidden shadow-sm" whileTap={{ scale: 0.98 }} >
{album.cover_thumb_url && ( {album.title} )}

{album.title}

{album.release_date?.slice(0, 4)}

))}
{/* 일정 섹션 */}

다가오는 일정

{schedules.length > 0 ? (
{schedules.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; // 멤버 처리 (5명 이상이면 프로미스나인) const memberList = schedule.member_names ? schedule.member_names.split(',').map(n => n.trim()).filter(Boolean) : []; return ( navigate('/schedule')} > {/* 날짜 영역 */}
{/* 현재 년도가 아니면 년.월 표시 */} {!isCurrentYear && ( {scheduleYear}.{scheduleMonth + 1} )} {/* 현재 달이 아니면 월 표시 (현재 년도일 때) */} {isCurrentYear && !isCurrentMonth && ( {scheduleMonth + 1}월 )} {scheduleDate.getDate()} {['일', '월', '화', '수', '목', '금', '토'][scheduleDate.getDay()]}
{/* 세로 구분선 */}
{/* 내용 영역 */}

{schedule.title}

{/* 시간 + 카테고리 (PC버전 스타일) */}
{schedule.time && ( {schedule.time.slice(0, 5)} )} {schedule.category_name && ( {schedule.category_name} )}
{/* 멤버 */} {memberList.length > 0 && (
{(memberList.length >= 5 ? ['프로미스나인'] : memberList).map((name, i) => ( {name.trim()} ))}
)}
); })}
) : (

다가오는 일정이 없습니다

)}
); } export default MobileHome;