2026-07-26 11:27:21 +07:00
|
|
|
"use client";
|
|
|
|
|
|
2026-07-27 21:54:31 +07:00
|
|
|
import { BarChart3, Hash, Users } from "lucide-react";
|
|
|
|
|
import { useState } from "react";
|
2026-07-26 11:27:21 +07:00
|
|
|
import {
|
2026-07-27 21:54:31 +07:00
|
|
|
ChannelDetailSection,
|
|
|
|
|
ChannelsSection,
|
|
|
|
|
StatsSection,
|
|
|
|
|
UserDetailSection,
|
|
|
|
|
UsersSection,
|
|
|
|
|
} from "@/components/dashboard";
|
2026-07-26 15:39:41 +07:00
|
|
|
import { GuildSelector } from "@/components/shared/guild-selector";
|
2026-07-26 15:34:08 +07:00
|
|
|
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
|
2026-07-26 11:27:21 +07:00
|
|
|
|
|
|
|
|
type View = "stats" | "users" | "channels" | "user-detail" | "channel-detail";
|
|
|
|
|
|
2026-07-26 15:34:08 +07:00
|
|
|
export default function DashboardPage() {
|
2026-07-26 11:27:21 +07:00
|
|
|
const [view, setView] = useState<View>("stats");
|
2026-07-26 15:34:08 +07:00
|
|
|
const [guildId, setGuildId] = useState("");
|
2026-07-26 16:55:20 +07:00
|
|
|
const [selectedUserId, setSelectedUserId] = useState<string | null>(null);
|
|
|
|
|
const [selectedChannelId, setSelectedChannelId] = useState<string | null>(
|
2026-07-26 11:27:21 +07:00
|
|
|
null,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return (
|
2026-07-26 15:13:18 +07:00
|
|
|
<div className="space-y-5">
|
2026-07-26 15:34:08 +07:00
|
|
|
<GuildSelector value={guildId} onChange={setGuildId} />
|
|
|
|
|
|
2026-07-26 15:13:18 +07:00
|
|
|
<Tabs
|
|
|
|
|
value={
|
|
|
|
|
view === "user-detail"
|
|
|
|
|
? "users"
|
|
|
|
|
: view === "channel-detail"
|
|
|
|
|
? "channels"
|
|
|
|
|
: view
|
|
|
|
|
}
|
|
|
|
|
onValueChange={(v) => setView(v as View)}
|
|
|
|
|
>
|
|
|
|
|
<TabsList>
|
|
|
|
|
<TabsTrigger value="stats" onClick={() => setView("stats")}>
|
2026-07-26 16:55:20 +07:00
|
|
|
<BarChart3 className="size-4" /> Stats
|
2026-07-26 15:13:18 +07:00
|
|
|
</TabsTrigger>
|
|
|
|
|
<TabsTrigger value="users" onClick={() => setView("users")}>
|
2026-07-26 16:55:20 +07:00
|
|
|
<Users className="size-4" /> Users
|
2026-07-26 15:13:18 +07:00
|
|
|
</TabsTrigger>
|
|
|
|
|
<TabsTrigger value="channels" onClick={() => setView("channels")}>
|
2026-07-26 16:55:20 +07:00
|
|
|
<Hash className="size-4" /> Channels
|
2026-07-26 15:13:18 +07:00
|
|
|
</TabsTrigger>
|
|
|
|
|
</TabsList>
|
|
|
|
|
</Tabs>
|
2026-07-26 11:27:21 +07:00
|
|
|
|
2026-07-26 16:14:32 +07:00
|
|
|
{view === "stats" && <StatsSection />}
|
2026-07-26 17:15:08 +07:00
|
|
|
{view === "users" && (
|
|
|
|
|
<UsersSection
|
|
|
|
|
onSelect={(userId) => {
|
|
|
|
|
setSelectedUserId(userId);
|
|
|
|
|
setView("user-detail");
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
)}
|
|
|
|
|
{view === "user-detail" && selectedUserId && (
|
|
|
|
|
<UserDetailSection
|
|
|
|
|
userId={selectedUserId}
|
|
|
|
|
onBack={() => setView("users")}
|
|
|
|
|
/>
|
|
|
|
|
)}
|
2026-07-26 16:14:32 +07:00
|
|
|
{view === "channels" && (
|
|
|
|
|
<ChannelsSection
|
|
|
|
|
guildId={guildId}
|
2026-07-26 16:55:20 +07:00
|
|
|
onSelect={(chId) => {
|
|
|
|
|
setSelectedChannelId(chId);
|
|
|
|
|
setView("channel-detail");
|
2026-07-26 16:14:32 +07:00
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
)}
|
2026-07-26 16:55:20 +07:00
|
|
|
{view === "channel-detail" && selectedChannelId && (
|
|
|
|
|
<ChannelDetailSection
|
|
|
|
|
channelId={selectedChannelId}
|
2026-07-26 16:14:32 +07:00
|
|
|
onBack={() => setView("channels")}
|
|
|
|
|
/>
|
|
|
|
|
)}
|
2026-07-26 11:27:21 +07:00
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|