draupnir4all-web

git clone git://archive.git.mtrnord.blog/MTRNord/draupnir4all-web.git
Log | Files | Refs | README | LICENSE

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 }