"use client"; import { useState } from "react"; import { Menu, X, Trophy, ArrowBigUp } from "lucide-react"; import LevelingEditor from "@/components/LevelingEditor"; import type { Guild, LeaderboardMember } from "@/lib/discord"; type TabType = "leaderboard" | "leveling"; interface DashboardContentProps { currentGuild: Guild; leaderboardData: LeaderboardMember[]; currentUserRank?: LeaderboardMember; currentUserId?: string; } export default function DashboardContent({ currentGuild, leaderboardData, currentUserRank, currentUserId, }: DashboardContentProps) { const [activeTab, setActiveTab] = useState("leaderboard"); const [sidebarOpen, setSidebarOpen] = useState(false); const menuItems = [ { id: "leaderboard" as TabType, label: "Leaderboard", icon: Trophy }, { id: "leveling" as TabType, label: "Leveling", icon: ArrowBigUp }, ]; const handleTabChange = (tab: TabType) => { setActiveTab(tab); setSidebarOpen(false); }; return (
{/* Mobile Menu Button */} {/* Mobile Sidebar Overlay */} {sidebarOpen && (
setSidebarOpen(false)} /> )} {/* Sidebar */}
{menuItems.map((item) => { const Icon = item.icon; const isActive = activeTab === item.id; return ( ); })}
{/* Main Area */}
{activeTab === "leaderboard" && ( )} {activeTab === "leveling" && ( )}
); } interface LeaderboardViewProps { leaderboardData: LeaderboardMember[]; currentUserRank?: LeaderboardMember; currentUserId?: string; } function LeaderboardView({ leaderboardData, currentUserRank, currentUserId, }: LeaderboardViewProps) { return ( <>

Leaderboard

{currentUserRank && (
{/* Background Glow */}
{currentUserRank.avatar ? ( {currentUserRank.username} ) : (
{currentUserRank.username.charAt(0).toUpperCase()}
)}
{currentUserRank.username}

Rank

#{currentUserRank.rank}

Level

{currentUserRank.level}

Total XP

{currentUserRank.xp.toLocaleString()}

)}
{/* Mobile Card View */}
{leaderboardData.length > 0 ? (
{leaderboardData.map((member) => { const isCurrentUser = member.user_id === currentUserId; let rankColor = "text-blue-400"; if (member.rank === 1) rankColor = "text-yellow-400"; if (member.rank === 2) rankColor = "text-gray-300"; if (member.rank === 3) rankColor = "text-orange-400"; return (
#{member.rank} {member.avatar ? ( ) : (
{member.username .charAt(0) .toUpperCase()}
)}

{member.username}

{isCurrentUser && ( You )}

Lv. {member.level}

{member.xp.toLocaleString()} XP

); })}
) : (
Setup leveling system to see the leaderboard
)}
{/* Desktop Table View */}
{leaderboardData.length > 0 ? ( leaderboardData.map((member) => { const isCurrentUser = member.user_id === currentUserId; let rankColor = "text-blue-400"; if (member.rank === 1) rankColor = "text-yellow-400 drop-shadow-[0_0_10px_rgba(250,204,21,0.5)]"; if (member.rank === 2) rankColor = "text-gray-300 drop-shadow-[0_0_10px_rgba(209,213,219,0.5)]"; if (member.rank === 3) rankColor = "text-orange-400 drop-shadow-[0_0_10px_rgba(251,146,60,0.5)]"; return ( ); }) ) : ( )}
Rank User Level XP
#{member.rank}
{member.avatar ? ( ) : (
{member.username .charAt(0) .toUpperCase()}
)}
{member.username} {isCurrentUser && ( You )}
{member.level} {member.xp.toLocaleString()}
Setup leveling system to see the leaderboard
); }