11import React , { useContext , useState , useEffect } from 'react' ;
22import Head from 'next/head' ;
33import Image from 'next/image' ;
4+ import Link from 'next/link' ;
5+ import { useRouter } from 'next/router' ;
46import { PhantomWalletButton } from './PhantomWalletButton' ;
57import { usePhantomWallet } from '@/contexts/PhantomWalletProvider' ;
68import { createLogger } from '@/utils/logger' ;
@@ -23,11 +25,10 @@ export default function Layout({ children, title = 'OpenSVM P2P Exchange' }) {
2325 network,
2426 selectedNetwork,
2527 setSelectedNetwork,
26- activeTab,
27- setActiveTab,
2828 networks
2929 } = useContext ( AppContext ) ;
3030
31+ const router = useRouter ( ) ;
3132 const { connected, publicKey } = usePhantomWallet ( ) ;
3233 const [ showOnboarding , setShowOnboarding ] = useState ( false ) ;
3334 const [ currentLocale , setCurrentLocale ] = useState ( 'en' ) ;
@@ -76,18 +77,18 @@ export default function Layout({ children, title = 'OpenSVM P2P Exchange' }) {
7677
7778 // Top navbar items (most important sections)
7879 const topNavItems = [
79- { key : 'buy' , label : 'BUY' , icon : 'B' } ,
80- { key : 'sell' , label : 'SELL' , icon : 'S' } ,
81- { key : 'analytics' , label : 'ANALYTICS' , icon : '📊' } ,
82- { key : 'help' , label : 'HELP' , icon : '?' } ,
80+ { key : 'buy' , label : 'BUY' , icon : 'B' , href : '/buy' } ,
81+ { key : 'sell' , label : 'SELL' , icon : 'S' , href : '/sell' } ,
82+ { key : 'analytics' , label : 'ANALYTICS' , icon : '📊' , href : '/analytics' } ,
83+ { key : 'help' , label : 'HELP' , icon : '?' , href : '/help' } ,
8384 ] ;
8485
8586 // Sidebar navigation items (secondary sections)
8687 const sidebarNavItems = [
87- { key : 'myoffers' , label : 'MY OFFERS' , icon : 'M' } ,
88- { key : 'disputes' , label : 'DISPUTES' , icon : 'D' } ,
89- { key : 'rewards' , label : 'REWARDS' , icon : '🎁' } ,
90- { key : 'profile' , label : 'PROFILE' , icon : 'P' } ,
88+ { key : 'myoffers' , label : 'MY OFFERS' , icon : 'M' , href : '/myoffers' } ,
89+ { key : 'disputes' , label : 'DISPUTES' , icon : 'D' , href : '/disputes' } ,
90+ { key : 'rewards' , label : 'REWARDS' , icon : '🎁' , href : '/rewards' } ,
91+ { key : 'profile' , label : 'PROFILE' , icon : 'P' , href : '/profile' } ,
9192 ] ;
9293
9394 return (
@@ -124,44 +125,37 @@ export default function Layout({ children, title = 'OpenSVM P2P Exchange' }) {
124125 < nav className = "desktop-nav" >
125126 { /* Primary navigation items */ }
126127 { topNavItems . map ( ( item ) => (
127- < button
128+ < Link
128129 key = { item . key }
129- className = { `nav-tab ${
130- activeTab === item . key ? 'active' : ''
131- } `}
132- onClick = { ( ) => setActiveTab ( item . key ) }
130+ href = { item . href }
131+ className = { `nav-tab ${ router . pathname === item . href ? 'active' : '' } ` }
133132 >
134133 < span className = "nav-label" > { item . label } </ span >
135- </ button >
134+ </ Link >
136135 ) ) }
137136
138137 { /* Secondary navigation items (previously in sidebar) */ }
139138 { sidebarNavItems . map ( ( item ) => (
140- < button
139+ < Link
141140 key = { item . key }
142- className = { `nav-tab ${
143- activeTab === item . key ? 'active' : ''
144- } `}
145- onClick = { ( ) => setActiveTab ( item . key ) }
141+ href = { item . href }
142+ className = { `nav-tab ${ router . pathname === item . href ? 'active' : '' } ` }
146143 >
147144 < span className = "nav-label" > { item . label } </ span >
148- </ button >
145+ </ Link >
149146 ) ) }
150147 </ nav >
151148
152149 { /* RIGHT SIDE: ALL HEADER CONTROLS */ }
153150 < div className = "header-controls" >
154151 { /* PROFILE element - now properly in the flex container */ }
155152 < div className = "profile-nav" >
156- < a
157- href = "#"
158- onClick = { ( e ) => {
159- e . preventDefault ( ) ;
160- setActiveTab ( 'profile' ) ;
161- } }
153+ < Link
154+ href = "/profile"
155+ className = { router . pathname === '/profile' ? 'active' : '' }
162156 >
163157 PROFILE
164- </ a >
158+ </ Link >
165159 </ div >
166160
167161 { /* Network selector */ }
@@ -213,28 +207,24 @@ export default function Layout({ children, title = 'OpenSVM P2P Exchange' }) {
213207 < div className = "mobile-nav-buttons" >
214208 { /* Primary navigation items */ }
215209 { topNavItems . map ( ( item ) => (
216- < button
210+ < Link
217211 key = { item . key }
218- className = { `mobile-nav-btn ${
219- activeTab === item . key ? 'active' : ''
220- } `}
221- onClick = { ( ) => setActiveTab ( item . key ) }
212+ href = { item . href }
213+ className = { `mobile-nav-btn ${ router . pathname === item . href ? 'active' : '' } ` }
222214 >
223215 < span className = "nav-label" > { item . label } </ span >
224- </ button >
216+ </ Link >
225217 ) ) }
226218
227219 { /* Secondary navigation items */ }
228220 { sidebarNavItems . map ( ( item ) => (
229- < button
221+ < Link
230222 key = { item . key }
231- className = { `mobile-nav-btn ${
232- activeTab === item . key ? 'active' : ''
233- } `}
234- onClick = { ( ) => setActiveTab ( item . key ) }
223+ href = { item . href }
224+ className = { `mobile-nav-btn ${ router . pathname === item . href ? 'active' : '' } ` }
235225 >
236226 < span className = "nav-label" > { item . label } </ span >
237- </ button >
227+ </ Link >
238228 ) ) }
239229 </ div >
240230 </ nav >
0 commit comments