diff --git a/images/architecture.png b/images/architecture.png index 55b15b816..9dfb7518f 100644 Binary files a/images/architecture.png and b/images/architecture.png differ diff --git a/src/app/chat/layout.tsx b/src/app/chat/layout.tsx index 003f6db24..87945db73 100644 --- a/src/app/chat/layout.tsx +++ b/src/app/chat/layout.tsx @@ -1,4 +1,5 @@ import { ChatMenu } from "@/features/chat/chat-menu/chat-menu"; +import { ChatMenuContainer } from "@/features/chat/chat-menu/chat-menu-container"; import { MainMenu } from "@/features/menu/menu"; import { AI_NAME } from "@/features/theme/customise"; @@ -16,7 +17,10 @@ export default async function RootLayout({ <>
- {children} + + + + {children}
); diff --git a/src/app/chat/page.tsx b/src/app/chat/page.tsx index a4d13a6ba..3ab1aeae8 100644 --- a/src/app/chat/page.tsx +++ b/src/app/chat/page.tsx @@ -1,14 +1,7 @@ import { Card } from "@/components/ui/card"; -import { FindAllChatThreadForCurrentUser } from "@/features/chat/chat-services/chat-thread-service"; import { StartNewChat } from "@/features/chat/chat-ui/start-new-chat"; -import { redirect } from "next/navigation"; export default async function Home() { - const chats = await FindAllChatThreadForCurrentUser(); - if (chats.length > 0) { - redirect(`/chat/${chats[0].id}`); - } - return ( diff --git a/src/features/chat/chat-menu/chat-menu-container.tsx b/src/features/chat/chat-menu/chat-menu-container.tsx new file mode 100644 index 000000000..6fb4faabe --- /dev/null +++ b/src/features/chat/chat-menu/chat-menu-container.tsx @@ -0,0 +1,12 @@ +"use client"; + +import { useMenuContext } from "@/features/menu/menu-context"; + +export const ChatMenuContainer = ({ + children, +}: { + children: React.ReactNode; +}) => { + const { isMenuOpen } = useMenuContext(); + return <>{isMenuOpen ? children : null}; +}; diff --git a/src/features/menu/menu-context.tsx b/src/features/menu/menu-context.tsx new file mode 100644 index 000000000..9264c855a --- /dev/null +++ b/src/features/menu/menu-context.tsx @@ -0,0 +1,27 @@ +import React, { createContext, useState } from "react"; + +interface MenuContextProps { + isMenuOpen: boolean; + toggleMenu: () => void; +} + +export const MenuContext = createContext({ + isMenuOpen: true, + toggleMenu: () => {}, +}); + +export const MenuProvider = ({ children }: { children: React.ReactNode }) => { + const [isMenuOpen, setIsMenuOpen] = useState(true); + + const toggleMenu = () => { + setIsMenuOpen(!isMenuOpen); + }; + + return ( + + {children} + + ); +}; + +export const useMenuContext = () => React.useContext(MenuContext); diff --git a/src/features/menu/menu.tsx b/src/features/menu/menu.tsx index e918c29f8..8b8cfb665 100644 --- a/src/features/menu/menu.tsx +++ b/src/features/menu/menu.tsx @@ -1,19 +1,33 @@ "use client"; import { Button } from "@/components/ui/button"; -import { LayoutDashboard, MessageCircle } from "lucide-react"; +import { + LayoutDashboard, + MessageCircle, + PanelLeftClose, + PanelRightClose, +} from "lucide-react"; import Link from "next/link"; import { ThemeToggle } from "../theme/theme-toggle"; import { UserProfile } from "../user-profile"; import { useSession } from "next-auth/react"; +import { useMenuContext } from "./menu-context"; export const MainMenu = () => { const { data: session } = useSession(); + const { isMenuOpen, toggleMenu } = useMenuContext(); return (
-
- + - ) : (<>)} + ) : ( + <> + )}
diff --git a/src/features/providers.tsx b/src/features/providers.tsx index 85bc34384..ff3224b19 100644 --- a/src/features/providers.tsx +++ b/src/features/providers.tsx @@ -1,7 +1,12 @@ "use client"; import { SessionProvider } from "next-auth/react"; +import { MenuProvider } from "./menu/menu-context"; export const Providers = ({ children }: { children: React.ReactNode }) => { - return {children}; + return ( + + {children} + + ); };