File tree Expand file tree Collapse file tree 7 files changed +70
-13
lines changed Expand file tree Collapse file tree 7 files changed +70
-13
lines changed Original file line number Diff line number Diff line change 1
1
import { ChatMenu } from "@/features/chat/chat-menu/chat-menu" ;
2
+ import { ChatMenuContainer } from "@/features/chat/chat-menu/chat-menu-container" ;
2
3
import { MainMenu } from "@/features/menu/menu" ;
3
4
import { AI_NAME } from "@/features/theme/customise" ;
4
5
@@ -16,7 +17,10 @@ export default async function RootLayout({
16
17
< >
17
18
< MainMenu />
18
19
< div className = "flex-1 flex rounded-md overflow-hidden bg-card/70" >
19
- < ChatMenu /> { children }
20
+ < ChatMenuContainer >
21
+ < ChatMenu />
22
+ </ ChatMenuContainer >
23
+ { children }
20
24
</ div >
21
25
</ >
22
26
) ;
Original file line number Diff line number Diff line change 1
1
import { Card } from "@/components/ui/card" ;
2
- import { FindAllChatThreadForCurrentUser } from "@/features/chat/chat-services/chat-thread-service" ;
3
2
import { StartNewChat } from "@/features/chat/chat-ui/start-new-chat" ;
4
- import { redirect } from "next/navigation" ;
5
3
6
4
export default async function Home ( ) {
7
- const chats = await FindAllChatThreadForCurrentUser ( ) ;
8
- if ( chats . length > 0 ) {
9
- redirect ( `/chat/${ chats [ 0 ] . id } ` ) ;
10
- }
11
-
12
5
return (
13
6
< Card className = "h-full items-center flex justify-center flex-1" >
14
7
< StartNewChat />
Original file line number Diff line number Diff line change
1
+ "use client" ;
2
+
3
+ import { useMenuContext } from "@/features/menu/menu-context" ;
4
+
5
+ export const ChatMenuContainer = ( {
6
+ children,
7
+ } : {
8
+ children : React . ReactNode ;
9
+ } ) => {
10
+ const { isMenuOpen } = useMenuContext ( ) ;
11
+ return < > { isMenuOpen ? children : null } </ > ;
12
+ } ;
Original file line number Diff line number Diff line change
1
+ import React , { createContext , useState } from "react" ;
2
+
3
+ interface MenuContextProps {
4
+ isMenuOpen : boolean ;
5
+ toggleMenu : ( ) => void ;
6
+ }
7
+
8
+ export const MenuContext = createContext < MenuContextProps > ( {
9
+ isMenuOpen : true ,
10
+ toggleMenu : ( ) => { } ,
11
+ } ) ;
12
+
13
+ export const MenuProvider = ( { children } : { children : React . ReactNode } ) => {
14
+ const [ isMenuOpen , setIsMenuOpen ] = useState ( true ) ;
15
+
16
+ const toggleMenu = ( ) => {
17
+ setIsMenuOpen ( ! isMenuOpen ) ;
18
+ } ;
19
+
20
+ return (
21
+ < MenuContext . Provider value = { { isMenuOpen, toggleMenu } } >
22
+ { children }
23
+ </ MenuContext . Provider >
24
+ ) ;
25
+ } ;
26
+
27
+ export const useMenuContext = ( ) => React . useContext ( MenuContext ) ;
Original file line number Diff line number Diff line change 1
1
"use client" ;
2
2
3
3
import { Button } from "@/components/ui/button" ;
4
- import { LayoutDashboard , MessageCircle } from "lucide-react" ;
4
+ import {
5
+ LayoutDashboard ,
6
+ MessageCircle ,
7
+ PanelLeftClose ,
8
+ PanelRightClose ,
9
+ } from "lucide-react" ;
5
10
import Link from "next/link" ;
6
11
import { ThemeToggle } from "../theme/theme-toggle" ;
7
12
import { UserProfile } from "../user-profile" ;
8
13
9
14
import { useSession } from "next-auth/react" ;
15
+ import { useMenuContext } from "./menu-context" ;
10
16
11
17
export const MainMenu = ( ) => {
12
18
const { data : session } = useSession ( ) ;
19
+ const { isMenuOpen, toggleMenu } = useMenuContext ( ) ;
13
20
return (
14
21
< div className = "flex flex-col justify-between p-2" >
15
- < div className = "flex gap-2 flex-col items-center" >
16
- < Button
22
+ < div className = "flex gap-2 flex-col items-center" >
23
+ < Button
24
+ onClick = { toggleMenu }
25
+ className = "rounded-full w-[40px] h-[40px] p-1 text-primary"
26
+ variant = { "outline" }
27
+ >
28
+ { isMenuOpen ? < PanelLeftClose /> : < PanelRightClose /> }
29
+ </ Button >
30
+ < Button
17
31
asChild
18
32
className = "rounded-full w-[40px] h-[40px] p-1 text-primary"
19
33
variant = { "outline" }
@@ -41,7 +55,9 @@ export const MainMenu = () => {
41
55
< LayoutDashboard />
42
56
</ Link >
43
57
</ Button >
44
- ) : ( < > </ > ) }
58
+ ) : (
59
+ < > </ >
60
+ ) }
45
61
</ div >
46
62
< div className = "flex flex-col gap-2" >
47
63
< ThemeToggle />
Original file line number Diff line number Diff line change 1
1
"use client" ;
2
2
3
3
import { SessionProvider } from "next-auth/react" ;
4
+ import { MenuProvider } from "./menu/menu-context" ;
4
5
5
6
export const Providers = ( { children } : { children : React . ReactNode } ) => {
6
- return < SessionProvider > { children } </ SessionProvider > ;
7
+ return (
8
+ < SessionProvider >
9
+ < MenuProvider > { children } </ MenuProvider >
10
+ </ SessionProvider >
11
+ ) ;
7
12
} ;
You can’t perform that action at this time.
0 commit comments