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, Music } from "lucide-react";
import { getTodayKST } from "../../../utils/date";
import { getMembers } from "../../../api/public/members";
import { getAlbums } from "../../../api/public/albums";
import { getUpcomingSchedules } from "../../../api/public/schedules";
function Home() {
// useQuery로 멤버 데이터 로드
const { data: members = [] } = useQuery({
queryKey: ["members"],
queryFn: getMembers,
});
// useQuery로 앨범 로드 (최신 4개)
const { data: albums = [] } = useQuery({
queryKey: ["albums"],
queryFn: getAlbums,
select: (data) => data.slice(0, 4),
});
// 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}
))}
{/* 앨범 미리보기 */}
{albums.map((album, index) => (
window.location.href = `/album/${encodeURIComponent(album.title)}`}
>

{/* 호버 오버레이 */}
{album.tracks?.length || 0}곡 수록
{album.title}
{album.release_date?.slice(0, 4)}
))}
{/* 일정 미리보기 */}
{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;