layoutWrapper.tsx (1335B)
1 import { Suspense } from "react"; 2 import { DashboardHeader } from "./dashboard-header"; 3 import { ListResponse } from "@/lib/api"; 4 5 interface LayoutWrapperProps { 6 children: React.ReactNode; 7 activeTab: "overview" | "reports" | "bans" | "analytics" | "settings"; 8 teamIdParam?: string; 9 listData: ListResponse | undefined; 10 } 11 12 export default function LayoutWrapper({ children, activeTab, teamIdParam, listData }: LayoutWrapperProps) { 13 // Get first team id if there is no teamIdParam 14 const teamId = teamIdParam || listData?.bots[0]?.id; 15 16 return ( 17 <div className="flex min-h-screen flex-col bg-black text-white"> 18 <Suspense 19 fallback={ 20 <div className="flex h-16 items-center justify-between border-b border-gray-800 bg-black/80 backdrop-blur-sm"> 21 Loading... 22 </div> 23 } 24 > 25 <DashboardHeader listData={listData} activeTab={activeTab} teamIdParam={teamId} /> 26 </Suspense> 27 <main className="flex-1 container px-4 py-8 md:px-6 md:py-12"> 28 <Suspense fallback={<div className="flex h-screen w-full items-center justify-center">Loading...</div>}> 29 {children} 30 </Suspense> 31 </main> 32 </div> 33 ) 34 }