11"use client" ;
22import { ChevronsDown , Github , Menu } from "lucide-react" ;
3- import React from "react" ;
3+ import React , { Suspense } from "react" ;
44import {
55 Sheet ,
66 SheetContent ,
@@ -23,6 +23,9 @@ import Link from "next/link";
2323import Image from "next/image" ;
2424import { ToggleTheme } from "./ToggleTheme" ;
2525import { 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" ;
2629
2730interface RouteProps {
2831 href : string ;
@@ -70,8 +73,41 @@ const featureList: FeatureProps[] = [
7073 } ,
7174] ;
7275
73- export const V2Navbar = ( ) => {
76+ export const NavigationContent = ( ) => {
7477 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+
75111 return (
76112 < 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" >
77113 < Link href = "/" className = "flex items-center font-semibold" >
@@ -127,6 +163,8 @@ export const V2Navbar = () => {
127163 < Separator className = "mb-2" />
128164
129165 < ToggleTheme />
166+ < Separator className = "mb-2" />
167+ { renderAuthButtons ( ) }
130168 </ SheetFooter >
131169 </ SheetContent >
132170 </ Sheet >
@@ -181,14 +219,16 @@ export const V2Navbar = () => {
181219
182220 < div className = "hidden lg:flex gap-2" >
183221 < 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 ( ) }
191223 </ div >
192224 </ header >
193225 ) ;
194226} ;
227+
228+ export const V2Navbar = ( ) => {
229+ return (
230+ < Suspense fallback = { < div > Loading...</ div > } >
231+ < NavigationContent />
232+ </ Suspense >
233+ ) ;
234+ } ;
0 commit comments