@@ -9,12 +9,14 @@ import useUser from "@/hooks/useUser";
99import { useUserStore } from "@/lib/zustand/user" ;
1010import useAppWallet from "@/hooks/useAppWallet" ;
1111import { useWalletContext , WalletState } from "@/hooks/useWalletContext" ;
12+ import useMultisigWallet from "@/hooks/useMultisigWallet" ;
1213
1314import SessionProvider from "@/components/SessionProvider" ;
1415import { getServerSession } from "next-auth" ;
1516
16- // import MenuWallets from "@/components/common/overall-layout/menus/wallets";
17+ import MenuWallets from "@/components/common/overall-layout/menus/wallets" ;
1718import MenuWallet from "@/components/common/overall-layout/menus/multisig-wallet" ;
19+ import WalletSelector from "@/components/common/overall-layout/wallet-selector" ;
1820import {
1921 WalletDataLoaderWrapper ,
2022 DialogReportWrapper ,
@@ -83,6 +85,7 @@ export default function RootLayout({
8385 const { user, isLoading } = useUser ( ) ;
8486 const router = useRouter ( ) ;
8587 const { appWallet } = useAppWallet ( ) ;
88+ const { multisigWallet } = useMultisigWallet ( ) ;
8689 const { generateNsec } = useNostrChat ( ) ;
8790
8891 const userAddress = useUserStore ( ( state ) => state . userAddress ) ;
@@ -195,6 +198,43 @@ export default function RootLayout({
195198 const walletPageNames = walletPageRoute ? walletPageRoute . split ( "/" ) : [ ] ;
196199 const pageIsPublic = publicRoutes . includes ( router . pathname ) ;
197200 const isLoggedIn = ! ! user ;
201+ const isHomepage = router . pathname === "/" ;
202+
203+ // Keep track of the last visited wallet to show wallet menu even on other pages
204+ const [ lastVisitedWalletId , setLastVisitedWalletId ] = React . useState < string | null > ( null ) ;
205+ const [ lastVisitedWalletName , setLastVisitedWalletName ] = React . useState < string | null > ( null ) ;
206+ const [ lastWalletStakingEnabled , setLastWalletStakingEnabled ] = React . useState < boolean | null > ( null ) ;
207+
208+ React . useEffect ( ( ) => {
209+ const walletId = router . query . wallet as string | undefined ;
210+ if ( walletId && isWalletPath && appWallet && multisigWallet ) {
211+ setLastVisitedWalletId ( walletId ) ;
212+ setLastVisitedWalletName ( appWallet . name ) ;
213+ // Check if staking is enabled for this wallet
214+ try {
215+ const stakingEnabled = multisigWallet . stakingEnabled ( ) ;
216+ setLastWalletStakingEnabled ( stakingEnabled ) ;
217+ } catch ( error ) {
218+ // Don't update state on error - keep the last known value
219+ console . error ( "Error checking staking status:" , error ) ;
220+ }
221+ }
222+ } , [ router . query . wallet , isWalletPath , appWallet , multisigWallet ] ) ;
223+
224+ const clearWalletContext = React . useCallback ( ( ) => {
225+ setLastVisitedWalletId ( null ) ;
226+ setLastVisitedWalletName ( null ) ;
227+ setLastWalletStakingEnabled ( null ) ;
228+ } , [ ] ) ;
229+
230+ // Clear wallet context when navigating to homepage
231+ React . useEffect ( ( ) => {
232+ if ( isHomepage && lastVisitedWalletId ) {
233+ clearWalletContext ( ) ;
234+ }
235+ } , [ isHomepage , lastVisitedWalletId , clearWalletContext ] ) ;
236+
237+ const showWalletMenu = isLoggedIn && ( isWalletPath || ! ! lastVisitedWalletId ) ;
198238
199239 return (
200240 < div className = "flex h-screen w-screen flex-col overflow-hidden" >
@@ -206,11 +246,21 @@ export default function RootLayout({
206246 data-header = "main"
207247 >
208248 < 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 } /> }
249+ { /* Mobile menu button - hidden only on public homepage (not logged in) */ }
250+ { ( isLoggedIn || ! isHomepage ) && (
251+ < MobileNavigation
252+ showWalletMenu = { showWalletMenu }
253+ isLoggedIn = { isLoggedIn }
254+ walletId = { router . query . wallet as string || lastVisitedWalletId || undefined }
255+ fallbackWalletName = { lastVisitedWalletName }
256+ onClearWallet = { clearWalletContext }
257+ stakingEnabled = { lastWalletStakingEnabled ?? undefined }
258+ isWalletPath = { isWalletPath }
259+ />
260+ ) }
211261
212262 { /* 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' : '' } ` } >
263+ < div className = { `flex items-center md:w-[260px] lg:w-[280px] ${ ( isLoggedIn || ! isHomepage ) ? 'flex-1 justify-center md:flex-none md:justify-start' : '' } ` } >
214264 < Link
215265 href = "/"
216266 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 +299,57 @@ export default function RootLayout({
249299 </ header >
250300
251301 { /* 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 && (
302+ < div className = { `flex flex-1 overflow-hidden` } >
303+ { /* Sidebar for larger screens - hidden only on public homepage (not logged in) */ }
304+ { ( isLoggedIn || ! isHomepage ) && (
255305 < aside className = "hidden w-[260px] border-r border-gray-300/50 bg-muted/40 dark:border-white/[0.03] md:block lg:w-[280px]" >
256306 < div className = "flex h-full max-h-screen flex-col" >
257- < nav className = "flex-1 pt-2" >
258- < MenuWallet />
307+ < nav className = "flex-1 pt-2 overflow-y-auto" >
308+ < div className = "flex flex-col" >
309+ { /* 1. Home Link - only when NOT logged in */ }
310+ { ! isLoggedIn && (
311+ < div className = "px-2 lg:px-4" >
312+ < div className = "space-y-1" >
313+ < Link
314+ href = "/"
315+ 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 ${
316+ router . pathname === "/"
317+ ? "text-white"
318+ : "text-muted-foreground hover:text-foreground"
319+ } `}
320+ >
321+ < svg className = "h-5 w-5" fill = "none" stroke = "currentColor" viewBox = "0 0 24 24" >
322+ < 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" />
323+ </ svg >
324+ < span > Home</ span >
325+ </ Link >
326+ </ div >
327+ </ div >
328+ ) }
329+
330+ { /* 2. Wallet Selector - only when logged in */ }
331+ { isLoggedIn && (
332+ < WalletSelector
333+ fallbackWalletName = { lastVisitedWalletName }
334+ onClearWallet = { clearWalletContext }
335+ />
336+ ) }
337+
338+ { /* 3. Wallet Menu - shown when wallet is selected */ }
339+ { showWalletMenu && (
340+ < div className = "mt-4" >
341+ < MenuWallet
342+ walletId = { router . query . wallet as string || lastVisitedWalletId || undefined }
343+ stakingEnabled = { isWalletPath ? undefined : ( lastWalletStakingEnabled ?? undefined ) }
344+ />
345+ </ div >
346+ ) }
347+
348+ { /* 4. Resources Menu - always visible */ }
349+ < div className = "mt-4" >
350+ < MenuWallets />
351+ </ div >
352+ </ div >
259353 </ nav >
260354 < div className = "mt-auto p-4" />
261355 </ div >
0 commit comments