"use client" import * as React from "react" import { CircleHelp, RefreshCw } from "lucide-react" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog" import { useUser } from "@/contexts/user-context" import { useLeaderboard } from "@/hooks/use-leaderboard" import { LeaderboardPodium } from "@/components/common/leaderboard/leaderboard-podium" import { LeaderboardTable } from "@/components/common/leaderboard/leaderboard-table" import { cn } from "@/lib/utils" /** * 排行榜主组件 */ export function LeaderboardMain() { const { user } = useUser() const { items, myRank, loading, loadingMore, myRankLoading, hasMore, loadNextPage, refresh, } = useLeaderboard() const isInitialLoading = loading && items.length === 0 const currentUserEntry = React.useMemo(() => { if (!myRank?.user) return undefined const matchedEntry = items.find((item) => item.user_id === myRank.user.user_id) if (matchedEntry) return matchedEntry if (!user) return undefined return { user_id: myRank.user.user_id, username: user.nickname || user.username, avatar_url: user.avatar_url, available_balance: myRank.user.available_balance, } }, [items, myRank, user]) return (