import { useState } from "react"; import { useQuery } from "@tanstack/react-query"; 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() { // useQuery로 멤버 데이터 로드 const { data: members = [] } = useQuery({ queryKey: ["members"], queryFn: getMembers, }); // useQuery로 다가오는 일정 로드 (오늘 이후 3개) const { data: upcomingSchedules = [] } = useQuery({ queryKey: ["upcomingSchedules", 3], queryFn: () => getUpcomingSchedules(3), }); 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;