@@ -4,7 +4,7 @@ import { Toaster } from "@components/ui/sonner";
4
4
import { TRPCReactProvider } from "trpc/react" ;
5
5
import { TooltipProvider } from "@radix-ui/react-tooltip" ;
6
6
import Link from "next/link" ;
7
- import { Goal , Key , LogIn , Settings , Users } from "lucide-react" ;
7
+ import { Goal , Key , LogIn , PanelLeft , Settings , Users } from "lucide-react" ;
8
8
9
9
import {
10
10
Tooltip ,
@@ -19,6 +19,8 @@ import {
19
19
} from "@components/ui/dropdown-menu" ;
20
20
import { MenuActions } from "./_components/menuActions" ;
21
21
import type { Metadata } from "next/types" ;
22
+ import { Sheet , SheetContent , SheetTrigger } from "@components/ui/sheet" ;
23
+ import { Button } from "@components/ui/button" ;
22
24
23
25
interface Props {
24
26
children : React . ReactNode ;
@@ -28,6 +30,28 @@ export const metadata: Metadata = {
28
30
title : "TUM.ai Space" ,
29
31
} ;
30
32
33
+ const navigationItems : {
34
+ href : string ;
35
+ label : string ;
36
+ icon : React . ReactNode ;
37
+ } [ ] = [
38
+ {
39
+ href : "/opportunities" ,
40
+ label : "Opportunities" ,
41
+ icon : < Goal className = "h-5 w-5" /> ,
42
+ } ,
43
+ {
44
+ href : "/members" ,
45
+ label : "Members" ,
46
+ icon : < Users className = "h-5 w-5" /> ,
47
+ } ,
48
+ {
49
+ href : "/homebase_keys" ,
50
+ label : "Keys" ,
51
+ icon : < Key className = "h-5 w-5" /> ,
52
+ } ,
53
+ ] ;
54
+
31
55
export default async function RootLayout ( { children } : Props ) {
32
56
const session = await getServerAuthSession ( ) ;
33
57
@@ -43,7 +67,7 @@ export default async function RootLayout({ children }: Props) {
43
67
disableTransitionOnChange
44
68
>
45
69
< >
46
- < aside className = "fixed inset-y-0 left-0 z-10 flex w-14 flex-col gap-4 border-r bg-background py-4" >
70
+ < aside className = "fixed inset-y-0 left-0 z-10 hidden w-14 flex-col gap-4 border-r bg-background py-4 sm:flex " >
47
71
< nav className = "flex flex-col items-center gap-4 px-2" >
48
72
< Link
49
73
href = "/"
@@ -52,50 +76,21 @@ export default async function RootLayout({ children }: Props) {
52
76
< Logo className = "h-8 w-8 transition-all group-hover:scale-110" />
53
77
< span className = "sr-only" > TUM.ai space</ span >
54
78
</ Link >
55
- { ! ! session && (
56
- < >
57
- < Tooltip >
79
+ { ! ! session &&
80
+ navigationItems . map ( ( { href , label , icon } ) => (
81
+ < Tooltip key = { href } >
58
82
< TooltipTrigger asChild >
59
83
< Link
60
84
href = "/opportunities"
61
85
className = "flex h-9 w-9 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:text-foreground md:h-8 md:w-8"
62
86
>
63
- < Goal className = "h-5 w-5" />
64
- < span className = "sr-only" > Opportunities </ span >
87
+ { icon }
88
+ < span className = "sr-only" > { label } </ span >
65
89
</ Link >
66
90
</ TooltipTrigger >
67
- < TooltipContent side = "right" >
68
- Opportunities
69
- </ TooltipContent >
91
+ < TooltipContent side = "right" > { label } </ TooltipContent >
70
92
</ Tooltip >
71
-
72
- < Tooltip >
73
- < TooltipTrigger asChild >
74
- < Link
75
- href = "/members"
76
- className = "flex h-9 w-9 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:text-foreground md:h-8 md:w-8"
77
- >
78
- < Users className = "h-5 w-5" />
79
- < span className = "sr-only" > Members</ span >
80
- </ Link >
81
- </ TooltipTrigger >
82
- < TooltipContent side = "right" > Members</ TooltipContent >
83
- </ Tooltip >
84
-
85
- < Tooltip >
86
- < TooltipTrigger asChild >
87
- < Link
88
- href = "/homebase_keys"
89
- className = "flex h-9 w-9 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:text-foreground md:h-8 md:w-8"
90
- >
91
- < Key className = "h-5 w-5" />
92
- < span className = "sr-only" > Keys</ span >
93
- </ Link >
94
- </ TooltipTrigger >
95
- < TooltipContent side = "right" > Keys</ TooltipContent >
96
- </ Tooltip >
97
- </ >
98
- ) }
93
+ ) ) }
99
94
</ nav >
100
95
< nav className = "mt-auto flex flex-col items-center gap-4 px-2" >
101
96
{ session && (
@@ -122,7 +117,35 @@ export default async function RootLayout({ children }: Props) {
122
117
) }
123
118
</ nav >
124
119
</ aside >
125
- < div className = "flex flex-col pl-14 sm:gap-4" >
120
+ < header className = "fixed top-0 z-30 flex h-14 w-full items-center gap-4 border-b bg-background px-4 sm:static sm:h-auto sm:border-0 sm:bg-transparent sm:px-6" >
121
+ < Sheet >
122
+ < SheetTrigger asChild >
123
+ < Button
124
+ size = "icon"
125
+ variant = "outline"
126
+ className = "sm:hidden"
127
+ >
128
+ < PanelLeft className = "h-5 w-5" />
129
+ < span className = "sr-only" > Toggle Menu</ span >
130
+ </ Button >
131
+ </ SheetTrigger >
132
+ < SheetContent side = "left" className = "pt-16 sm:max-w-xs" >
133
+ < nav className = "grid gap-6 text-lg font-medium" >
134
+ { navigationItems . map ( ( { href, label, icon } ) => (
135
+ < Link
136
+ key = { href }
137
+ href = { href }
138
+ className = "flex items-center gap-4 px-2.5 text-muted-foreground hover:text-foreground"
139
+ >
140
+ { icon }
141
+ { label }
142
+ </ Link >
143
+ ) ) }
144
+ </ nav >
145
+ </ SheetContent >
146
+ </ Sheet >
147
+ </ header >
148
+ < div className = "flex flex-col sm:gap-4 sm:pl-14" >
126
149
< main className = "px-4 sm:px-10" > { children } </ main >
127
150
</ div >
128
151
</ >
0 commit comments