page.tsx (2430B)
1 import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; 2 import { mockPolicyLists, } from "../mockData"; 3 import AddBan from "../../../components/modals/add-ban"; 4 import TabNavigation from "../../../components/dashboard/tab-navigation"; 5 import LayoutWrapper from "@/components/dashboard/layoutWrapper"; 6 import { cookies } from "next/headers"; 7 import { User } from "@/lib/auth"; 8 import { listBots } from "@/lib/api"; 9 import BansList from "@/components/dashboard/bans-list"; 10 11 12 export default async function Bans({ 13 searchParams, 14 }: { 15 searchParams: Promise<{ [key: string]: string | string[] | undefined }> 16 }) { 17 const params = await searchParams; 18 const teamIdParam = params.team as string | undefined; 19 20 const cookieStore = await cookies() 21 const session: User = JSON.parse(cookieStore.get("d4all_session")?.value || "{}") 22 if (!session.token) { 23 return <div className="flex h-screen w-full items-center justify-center">Loading...</div> 24 } 25 const listData = await listBots(session.matrixId, session.token); 26 27 if (!listData) { 28 return <div className="flex h-screen w-full items-center justify-center">Loading...</div> 29 } 30 31 const selectedBot = listData.bots.find((team) => team.id === teamIdParam) ?? listData.bots[0]; 32 if (!selectedBot) { 33 // TODO: Redirect to register page? 34 return <div className="flex h-screen w-full items-center justify-center">Loading...</div> 35 } 36 37 // Filter policy lists based on selected team 38 // TODO: Fetch from API 39 const policyLists = mockPolicyLists 40 return ( 41 <LayoutWrapper listData={listData} activeTab="bans" teamIdParam={teamIdParam}> 42 <TabNavigation selectedBot={selectedBot} currentTab="bans" /> 43 44 <Card className="border-gray-800 bg-gray-950"> 45 <CardHeader className="pb-2"> 46 <div className="flex items-center justify-between"> 47 <CardTitle>Policy Lists</CardTitle> 48 <AddBan policyLists={policyLists} filled /> 49 </div> 50 <CardDescription className="text-gray-400">Manage ban lists across your Matrix rooms</CardDescription> 51 </CardHeader> 52 <CardContent> 53 <BansList policyLists={policyLists} /> 54 </CardContent> 55 </Card> 56 </LayoutWrapper> 57 ) 58 }