1
1
"use client" ;
2
2
import { ChevronsDown , Github , Menu } from "lucide-react" ;
3
- import React from "react" ;
3
+ import React , { Suspense } from "react" ;
4
4
import {
5
5
Sheet ,
6
6
SheetContent ,
@@ -23,6 +23,9 @@ import Link from "next/link";
23
23
import Image from "next/image" ;
24
24
import { ToggleTheme } from "./ToggleTheme" ;
25
25
import { Avatar , AvatarFallback , AvatarImage } from "../ui/avatar" ;
26
+ import { useAuth } from "@/hooks/useAuth" ;
27
+ import { signout } from "@/app/actions/action" ;
28
+ import { useRouter } from "next/navigation" ;
26
29
27
30
interface RouteProps {
28
31
href : string ;
@@ -70,8 +73,41 @@ const featureList: FeatureProps[] = [
70
73
} ,
71
74
] ;
72
75
73
- export const V2Navbar = ( ) => {
76
+ export const NavigationContent = ( ) => {
74
77
const [ isOpen , setIsOpen ] = React . useState ( false ) ;
78
+ const { user, loading } = useAuth ( ) ;
79
+ const router = useRouter ( ) ;
80
+ const [ authState , setAuthState ] = React . useState ( { user, loading } ) ;
81
+
82
+ React . useEffect ( ( ) => {
83
+ setAuthState ( { user, loading } ) ;
84
+ } , [ user , loading ] ) ;
85
+
86
+ const handleSignOut = async ( ) => {
87
+ await signout ( ) ;
88
+ router . push ( "/auth/signin" ) ;
89
+ } ;
90
+
91
+ const renderAuthButtons = ( ) => {
92
+ if ( authState . loading ) return null ;
93
+
94
+ return authState . user ? (
95
+ < Button onClick = { handleSignOut } className = "rounded-2xl" >
96
+ Sign Out
97
+ </ Button >
98
+ ) : (
99
+ < >
100
+ < Link href = "/auth/register" >
101
+ < Button className = "rounded-2xl" > Register</ Button >
102
+ </ Link >
103
+ < Link href = "/auth/signin" >
104
+ < Button className = "rounded-2xl" > Login</ Button >
105
+ </ Link >
106
+ </ >
107
+ ) ;
108
+ } ;
109
+
110
+
75
111
return (
76
112
< header className = "shadow-inner w-[90%] md:w-[70%] lg:w-[75%] lg:max-w-screen-xl top-5 mx-auto sticky border border-secondary z-40 rounded-2xl flex justify-between items-center p-2 bg-secondary/30 backdrop-blur-md" >
77
113
< Link href = "/" className = "flex items-center font-semibold" >
@@ -127,6 +163,8 @@ export const V2Navbar = () => {
127
163
< Separator className = "mb-2" />
128
164
129
165
< ToggleTheme />
166
+ < Separator className = "mb-2" />
167
+ { renderAuthButtons ( ) }
130
168
</ SheetFooter >
131
169
</ SheetContent >
132
170
</ Sheet >
@@ -181,14 +219,16 @@ export const V2Navbar = () => {
181
219
182
220
< div className = "hidden lg:flex gap-2" >
183
221
< ToggleTheme />
184
-
185
- < Link href = "/auth/register" >
186
- < Button className = "rounded-2xl" > Register</ Button >
187
- </ Link >
188
- < Link href = "/auth/signin" >
189
- < Button className = "rounded-2xl" > Login</ Button >
190
- </ Link >
222
+ { renderAuthButtons ( ) }
191
223
</ div >
192
224
</ header >
193
225
) ;
194
226
} ;
227
+
228
+ export const V2Navbar = ( ) => {
229
+ return (
230
+ < Suspense fallback = { < div > Loading...</ div > } >
231
+ < NavigationContent />
232
+ </ Suspense >
233
+ ) ;
234
+ } ;
0 commit comments