"use client";
import { Suspense, useEffect, useState } from "react";
import { useRouter, useSearchParams } from "next/navigation";
import { Award, CalendarDays, HeartHandshake, MessageSquareHeart, Sparkles } from "lucide-react";
import { useQuery } from "@tanstack/react-query";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { PageHeader } from "@/components/page-header";
import { EventsPanel } from "@/components/events-panel";
import { LeaderboardPanel } from "@/components/leaderboard-panel";
import { CommunityPanel } from "@/components/community-panel";
import { Button } from "@/components/ui/button";
import { UserAvatar, avatarPropsOf } from "@/components/ui/user-avatar";
import { Skeleton, SkeletonAvatar } from "@/components/ui/skeleton";
import { Panel } from "@/components/panel";
import { Badge } from "@/components/ui/badge";
import type { Mentor } from "@/lib/types";
import { http } from "@/lib/api";
import type { ChatMessage, Conversation } from "@/lib/types";
import { cn } from "@/lib/utils";
type Tab = "events" | "chats" | "leagues" | "community";
const TABS: Tab[] = ["events", "chats", "leagues", "community"];
function parseTab(raw: string | null): Tab {
if (raw && (TABS as string[]).includes(raw)) {
return raw as Tab;
}
return "events";
}
export default function UnwrapPage() {
return (
);
}
function HubTabs() {
const router = useRouter();
const params = useSearchParams();
const [tab, setTab] = useState(() => parseTab(params.get("tab")));
useEffect(() => {
const raw = params.get("tab");
const next = parseTab(raw);
setTab(next);
// Invalid / unknown ?tab=… → clean URL so content isn't blank.
if (raw != null && raw !== next) {
router.replace(next === "events" ? "/unwrap" : `/unwrap?tab=${next}`, { scroll: false });
}
}, [params, router]);
const onTab = (value: string) => {
const next = parseTab(value);
setTab(next);
const url = next === "events" ? "/unwrap" : `/unwrap?tab=${next}`;
router.replace(url, { scroll: false });
};
return (
جامعه، استمرار و منتورها
>
}
description="رویدادهای زنده برای تقویت مهارت، لیگهای هفتگی برای ثبات، گفتگو با منتور، و هماهنگی حمایت مالی."
className="mb-0"
/>
رویدادهاگفتگو با منتورلیگهاحمایت