11// app/layout.tsx
2+ import { NavigationWrapper } from "@/components/navigation-wrapper" ;
23import { ThemeProvider } from "@/components/theme-provider" ;
34import Providers from "@/lib/Providers" ;
45import "@/styles/globals.css" ;
56import { GeistSans } from "geist/font/sans" ;
67import { type Metadata } from "next" ;
78import { Toaster } from "react-hot-toast" ;
89
9- import {
10- Avatar ,
11- AvatarFallback ,
12- AvatarImage ,
13- } from "@/components/ui/avatar" ;
14- import { Button } from "@/components/ui/button" ;
15- import {
16- DropdownMenu ,
17- DropdownMenuContent ,
18- DropdownMenuItem ,
19- DropdownMenuTrigger ,
20- } from "@/components/ui/dropdown-menu" ;
21- import { ScrollArea } from "@/components/ui/scroll-area" ;
22- import {
23- Sheet ,
24- SheetContent ,
25- SheetTrigger ,
26- } from "@/components/ui/sheet" ;
27- import {
28- GroupIcon ,
29- HomeIcon ,
30- LogOutIcon ,
31- MenuIcon ,
32- Search ,
33- UsersIcon
34- } from "lucide-react" ;
35- import Link from "next/link" ;
36-
37-
3810export const metadata : Metadata = {
3911 title : "CodeChef-VIT" ,
4012 description : "Made with ♡ by CodeChef-VIT" ,
@@ -56,111 +28,28 @@ export const metadata: Metadata = {
5628 ] ,
5729} ;
5830
59-
6031export default function RootLayout ( {
61- children,
62- } : {
63- children : React . ReactNode ;
64- } ) {
65- return (
66- < html lang = "en" className = { `${ GeistSans . variable } ` } >
67- < body >
68- < Providers >
69- < ThemeProvider
70- attribute = "class"
71- defaultTheme = "dark"
72- enableSystem
73- disableTransitionOnChange
74- >
75- < Toaster position = "top-right" toastOptions = { { id : "_toast" } } />
76- < div className = "flex h-screen bg-black" >
77- < Sidebar />
78- < div className = "flex flex-col flex-1" >
79- < Navbar />
80- < main className = " p-8 overflow-y-scroll" >
81- { children }
82- </ main >
83- </ div >
84- </ div >
85- </ ThemeProvider >
86- </ Providers >
87- </ body >
88- </ html >
89- ) ;
90- }
91-
92-
93- function Sidebar ( ) {
94- const navigation = [
95- // { name: "Dashboard", href: "/dashboard", icon: HomeIcon },
96- { name : "Users" , href : "/users" , icon : UsersIcon } ,
97- { name : "Teams" , href : "/teams" , icon : GroupIcon } ,
98- { name : "Search Team" , href : "/team_search" , icon : Search }
99- ] ;
100-
101- return (
102- < aside className = "border-r border-gray-200 h-full w-64 dark:border-gray-700" >
103- < ScrollArea className = "h-full" >
104- < div className = "p-4" >
105- < Link href = "/" className = "text-2xl font-bold mb-6 block" >
106- Devsoc Admin
107- </ Link >
108- </ div >
109- < nav className = "px-2 py-4" >
110- { navigation . map ( ( item ) => (
111- < Link
112- key = { item . name }
113- href = { item . href }
114- className = "flex items-center space-x-2 px-3 py-2 rounded-md hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors duration-200 font-medium text-gray-700 dark:text-gray-300"
115- >
116- < item . icon className = "h-4 w-4" />
117- < span > { item . name } </ span >
118- </ Link >
119- ) ) }
120- </ nav >
121- </ ScrollArea >
122- </ aside >
123- ) ;
124- }
125- function Navbar ( ) {
126- return (
127- < nav className = "flex items-center justify-between border-b border-gray-200 dark:border-gray-700 p-4" >
128- < div className = "block md:hidden" >
129- < Sheet >
130- < SheetTrigger asChild >
131- < Button variant = "ghost" size = "icon" >
132- < MenuIcon className = "h-5 w-5" />
133- </ Button >
134- </ SheetTrigger >
135- < SheetContent side = "left" className = "p-0" >
136- < Sidebar />
137- </ SheetContent >
138- </ Sheet >
139- </ div >
140-
141- < div className = "text-xl font-semibold text-gray-700 dark:text-white" >
142- Admin Panel
143- </ div >
144- < div className = "flex items-center space-x-4" >
145- < DropdownMenu >
146- < DropdownMenuTrigger asChild >
147- < Button variant = "ghost" className = "relative" >
148- < Avatar >
149- < AvatarImage src = "https://github.com/shadcn.png" />
150- < AvatarFallback > CN</ AvatarFallback >
151- </ Avatar >
152- </ Button >
153- </ DropdownMenuTrigger >
154- < DropdownMenuContent align = "end" >
155- < DropdownMenuItem >
156- < Link href = "/api/auth/signout" className = "flex items-center" >
157- < LogOutIcon className = "mr-2 h-4 w-4" />
158- Log out
159- </ Link >
160- </ DropdownMenuItem >
161- </ DropdownMenuContent >
162- </ DropdownMenu >
163- </ div >
164- </ nav >
165- ) ;
32+ children,
33+ } : {
34+ children : React . ReactNode ;
35+ } ) {
36+ return (
37+ < html lang = "en" className = { `${ GeistSans . variable } ` } >
38+ < body >
39+ < Providers >
40+ < ThemeProvider
41+ attribute = "class"
42+ defaultTheme = "dark"
43+ enableSystem
44+ disableTransitionOnChange
45+ >
46+ < Toaster position = "top-right" toastOptions = { { id : "_toast" } } />
47+ < NavigationWrapper >
48+ { children }
49+ </ NavigationWrapper >
50+ </ ThemeProvider >
51+ </ Providers >
52+ </ body >
53+ </ html >
54+ ) ;
16655}
0 commit comments