'use client'; import { useEffect, useState } from 'react'; import Link from 'next/link'; import { cn, fetchApi } from '@/lib/utils/client'; import { formatBpPercent, bpDirection } from '@/lib/utils/paper'; import type { PaperLeaderboardResponse, PaperLeaderboardRow } from '@/types/paper'; // 홈 리더보드 Top10 미니 — 수익률·전체 기준 export default function PaperLeaderboardMini() { const [rows, setRows] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { let cancelled = false; (async () => { const res = await fetchApi('/api/paper/leaderboard?sort=return&period=all&page=1', { silent: true }); if (cancelled) { return; } setRows(res.success ? (res.data?.rows ?? []).slice(0, 10) : []); setLoading(false); })(); return () => { cancelled = true; }; }, []); return (

리더보드 Top 10

전체 보기
{loading ? (
불러오는 중...
) : rows.length === 0 ? (
아직 등재된 참여자가 없습니다.
) : (
{rows.map(row => { const dir = bpDirection(row.returnBp); return ( ); })}
순위 닉네임 수익률
{row.rank} {row.nickname || '익명'} {formatBpPercent(row.returnBp)}
)}
); }