@@ -9,12 +9,12 @@ import useUser from "@/hooks/useUser";
99import { useUserStore } from "@/lib/zustand/user" ;
1010import useAppWallet from "@/hooks/useAppWallet" ;
1111import { useWalletContext , WalletState } from "@/hooks/useWalletContext" ;
12-
1312import SessionProvider from "@/components/SessionProvider" ;
1413import { getServerSession } from "next-auth" ;
1514
16- // import MenuWallets from "@/components/common/overall-layout/menus/wallets";
15+ import MenuWallets from "@/components/common/overall-layout/menus/wallets" ;
1716import MenuWallet from "@/components/common/overall-layout/menus/multisig-wallet" ;
17+ import WalletSelector from "@/components/common/overall-layout/wallet-selector" ;
1818import {
1919 WalletDataLoaderWrapper ,
2020 DialogReportWrapper ,
@@ -83,6 +83,7 @@ export default function RootLayout({
8383 const { user, isLoading } = useUser ( ) ;
8484 const router = useRouter ( ) ;
8585 const { appWallet } = useAppWallet ( ) ;
86+ const { multisigWallet } = useMultisigWallet ( ) ;
8687 const { generateNsec } = useNostrChat ( ) ;
8788
8889 const userAddress = useUserStore ( ( state ) => state . userAddress ) ;
@@ -195,6 +196,43 @@ export default function RootLayout({
195196 const walletPageNames = walletPageRoute ? walletPageRoute . split ( "/" ) : [ ] ;
196197 const pageIsPublic = publicRoutes . includes ( router . pathname ) ;
197198 const isLoggedIn = ! ! user ;
199+ const isHomepage = router . pathname === "/" ;
200+
201+ // Keep track of the last visited wallet to show wallet menu even on other pages
202+ const [ lastVisitedWalletId , setLastVisitedWalletId ] = React . useState < string | null > ( null ) ;
203+ const [ lastVisitedWalletName , setLastVisitedWalletName ] = React . useState < string | null > ( null ) ;
204+ const [ lastWalletStakingEnabled , setLastWalletStakingEnabled ] = React . useState < boolean | null > ( null ) ;
205+
206+ React . useEffect ( ( ) => {
207+ const walletId = router . query . wallet as string | undefined ;
208+ if ( walletId && isWalletPath && appWallet && multisigWallet ) {
209+ setLastVisitedWalletId ( walletId ) ;
210+ setLastVisitedWalletName ( appWallet . name ) ;
211+ // Check if staking is enabled for this wallet
212+ try {
213+ const stakingEnabled = multisigWallet . stakingEnabled ( ) ;
214+ setLastWalletStakingEnabled ( stakingEnabled ) ;
215+ } catch ( error ) {
216+ // Don't update state on error - keep the last known value
217+ console . error ( "Error checking staking status:" , error ) ;
218+ }
219+ }
220+ } , [ router . query . wallet , isWalletPath , appWallet , multisigWallet ] ) ;
221+
222+ const clearWalletContext = React . useCallback ( ( ) => {
223+ setLastVisitedWalletId ( null ) ;
224+ setLastVisitedWalletName ( null ) ;
225+ setLastWalletStakingEnabled ( null ) ;
226+ } , [ ] ) ;
227+
228+ // Clear wallet context when navigating to homepage
229+ React . useEffect ( ( ) => {
230+ if ( isHomepage && lastVisitedWalletId ) {
231+ clearWalletContext ( ) ;
232+ }
233+ } , [ isHomepage , lastVisitedWalletId , clearWalletContext ] ) ;
234+
235+ const showWalletMenu = isLoggedIn && ( isWalletPath || ! ! lastVisitedWalletId ) ;
198236
199237 return (
200238 < div className = "flex h-screen w-screen flex-col overflow-hidden" >
@@ -206,11 +244,21 @@ export default function RootLayout({
206244 data-header = "main"
207245 >
208246 < div className = "flex h-14 items-center gap-4 lg:h-16" >
209- { /* Mobile menu button - only in wallet context */ }
210- { isWalletPath && < MobileNavigation isWalletPath = { isWalletPath } /> }
247+ { /* Mobile menu button - hidden only on public homepage (not logged in) */ }
248+ { ( isLoggedIn || ! isHomepage ) && (
249+ < MobileNavigation
250+ showWalletMenu = { showWalletMenu }
251+ isLoggedIn = { isLoggedIn }
252+ walletId = { router . query . wallet as string || lastVisitedWalletId || undefined }
253+ fallbackWalletName = { lastVisitedWalletName }
254+ onClearWallet = { clearWalletContext }
255+ stakingEnabled = { lastWalletStakingEnabled ?? undefined }
256+ isWalletPath = { isWalletPath }
257+ />
258+ ) }
211259
212260 { /* Logo - in fixed-width container matching sidebar width */ }
213- < div className = { `flex items-center md:w-[260px] lg:w-[280px] ${ isWalletPath ? 'flex-1 justify-center md:flex-none md:justify-start' : '' } ` } >
261+ < div className = { `flex items-center md:w-[260px] lg:w-[280px] ${ ( isLoggedIn || ! isHomepage ) ? 'flex-1 justify-center md:flex-none md:justify-start' : '' } ` } >
214262 < Link
215263 href = "/"
216264 className = "flex items-center gap-2 rounded-md px-4 py-2 text-sm transition-all duration-200 hover:bg-gray-100/50 dark:hover:bg-white/5 md:px-4"
@@ -249,13 +297,57 @@ export default function RootLayout({
249297 </ header >
250298
251299 { /* Content area with sidebar + main */ }
252- < div className = { `flex flex-1 overflow-hidden ${ isWalletPath ? '' : '' } ` } >
253- { /* Sidebar for larger screens - only in wallet context */ }
254- { isWalletPath && (
300+ < div className = { `flex flex-1 overflow-hidden` } >
301+ { /* Sidebar for larger screens - hidden only on public homepage (not logged in) */ }
302+ { ( isLoggedIn || ! isHomepage ) && (
255303 < aside className = "hidden w-[260px] border-r border-gray-300/50 bg-muted/40 dark:border-white/[0.03] md:block lg:w-[280px]" >
256304 < div className = "flex h-full max-h-screen flex-col" >
257- < nav className = "flex-1 pt-2" >
258- < MenuWallet />
305+ < nav className = "flex-1 pt-2 overflow-y-auto" >
306+ < div className = "flex flex-col" >
307+ { /* 1. Home Link - only when NOT logged in */ }
308+ { ! isLoggedIn && (
309+ < div className = "px-2 lg:px-4" >
310+ < div className = "space-y-1" >
311+ < Link
312+ href = "/"
313+ className = { `flex w-full items-center gap-3 rounded-md px-3 py-2 text-sm transition-all duration-200 hover:bg-gray-100/50 dark:hover:bg-white/5 ${
314+ router . pathname === "/"
315+ ? "text-white"
316+ : "text-muted-foreground hover:text-foreground"
317+ } `}
318+ >
319+ < svg className = "h-5 w-5" fill = "none" stroke = "currentColor" viewBox = "0 0 24 24" >
320+ < path strokeLinecap = "round" strokeLinejoin = "round" strokeWidth = { 2 } d = "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
321+ </ svg >
322+ < span > Home</ span >
323+ </ Link >
324+ </ div >
325+ </ div >
326+ ) }
327+
328+ { /* 2. Wallet Selector - only when logged in */ }
329+ { isLoggedIn && (
330+ < WalletSelector
331+ fallbackWalletName = { lastVisitedWalletName }
332+ onClearWallet = { clearWalletContext }
333+ />
334+ ) }
335+
336+ { /* 3. Wallet Menu - shown when wallet is selected */ }
337+ { showWalletMenu && (
338+ < div className = "mt-4" >
339+ < MenuWallet
340+ walletId = { router . query . wallet as string || lastVisitedWalletId || undefined }
341+ stakingEnabled = { isWalletPath ? undefined : ( lastWalletStakingEnabled ?? undefined ) }
342+ />
343+ </ div >
344+ ) }
345+
346+ { /* 4. Resources Menu - always visible */ }
347+ < div className = "mt-4" >
348+ < MenuWallets />
349+ </ div >
350+ </ div >
259351 </ nav >
260352 < div className = "mt-auto p-4" />
261353 </ div >
0 commit comments