From 04b865131341bcd74e20fe73e7ef3072d905fbaa Mon Sep 17 00:00:00 2001 From: Leo dev Date: Wed, 15 Oct 2025 17:41:36 +0200 Subject: [PATCH] Toggle-able sidebar --- src/app/chat/[id]/page.tsx | 7 ++++--- src/app/chat/page.tsx | 3 +++ src/app/server/[ip]/page.tsx | 4 ++++ src/components/MessageBox.tsx | 9 ++++++-- src/components/Sidebar.tsx | 39 ++++++++++++++++++++++++++++++++--- 5 files changed, 54 insertions(+), 8 deletions(-) diff --git a/src/app/chat/[id]/page.tsx b/src/app/chat/[id]/page.tsx index 470eb32..8af22d6 100644 --- a/src/app/chat/[id]/page.tsx +++ b/src/app/chat/[id]/page.tsx @@ -9,9 +9,6 @@ import { StringMap } from "@/types/typeUtils"; import { useParams } from "next/navigation"; import { useMessages } from "@/hooks/use-messages"; -// In this testing instance we are assuming that the target's node is localhost -// To make this functional we need to add a settings feature to the api - export default function DMs() { const { id } = useParams<{ id: string }>(); const wsRef = useRef(null); @@ -19,9 +16,12 @@ export default function DMs() { const addMessage = useMessages((s) => s.addMessage); const [userList, setUserList] = useState>({}); const [user, setUser] = useState(); + const [sidebarOpen, setSidebarOpen] = useState(false); return ( setSidebarOpen(true)} channelName={userList[id]?.display_name || id} userList={userList} setUserList={setUserList} diff --git a/src/app/chat/page.tsx b/src/app/chat/page.tsx index 67377d1..6dbca1b 100644 --- a/src/app/chat/page.tsx +++ b/src/app/chat/page.tsx @@ -14,9 +14,12 @@ export default function Chat() { const [userList, setUserList] = useState>({}); const messages = useMessages((s) => s.messages); const addMessage = useMessages((s) => s.addMessage); + const [sidebarOpen, setSidebarOpen] = useState(false); return ( >({}); const messages = useMessages((s) => s.messages); const addMessage = useMessages((s) => s.addMessage); + const [sidebarOpen, setSidebarOpen] = useState(false); useEffect(() => { if (!ip) return; @@ -26,6 +27,8 @@ export default function Server() { return ( {}} userList={userList} @@ -33,6 +36,7 @@ export default function Server() { server={server} > setSidebarOpen(true)} channelName="General" userList={userList} setUserList={setUserList} diff --git a/src/components/MessageBox.tsx b/src/components/MessageBox.tsx index 289bfb2..8cc19d5 100644 --- a/src/components/MessageBox.tsx +++ b/src/components/MessageBox.tsx @@ -10,7 +10,7 @@ import { DropdownMenuContent, DropdownMenuTrigger, } from "./ui/dropdown-menu"; -import { SmilePlusIcon } from "lucide-react"; +import { ChevronLeft, ChevronLeftIcon, SmilePlusIcon } from "lucide-react"; import { useEffect, useRef, useState } from "react"; import { format, isToday, isYesterday } from "date-fns"; import ReactMarkdown from "react-markdown"; @@ -144,12 +144,14 @@ export default function MessageBox({ setUserList, sendMessage, channelName, + toggleSidebar, }: { messages: Message[]; userList: NumberMap; setUserList: React.Dispatch>>; sendMessage: (m: string) => void; channelName?: string; + toggleSidebar: () => void; }) { const [text, setText] = useState(""); @@ -157,7 +159,10 @@ export default function MessageBox({
{channelName && (
- {channelName} + + + {channelName} +
)}
diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 4b78b12..c3f6e8b 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -35,6 +35,7 @@ import SettingsDialog from "./settings/SettingsDialog"; import Link from "next/link"; import axios from "axios"; import { get, Response } from "@/lib/request"; +import { cn } from "@/lib/utils"; export default function AppSidebar({ children, @@ -45,6 +46,8 @@ export default function AppSidebar({ server, messages, addMessage, + open, + setOpen, }: Readonly<{ wsRef: React.RefObject; addMessage: (msg: Message) => void; @@ -56,6 +59,8 @@ export default function AppSidebar({ children?: React.ReactNode; setUser?: React.Dispatch>; server?: Server | undefined; + open: boolean; + setOpen: React.Dispatch>; }>) { const [servers, setServers] = useState<[string, string][]>([]); const [newServer, setNewServer] = useState({ name: "", ip: "" }); @@ -123,7 +128,28 @@ export default function AppSidebar({ return (
-
+ {open && ( +
setOpen(false)} + /> + )} + {/*
*/} +
- - {children} + {open ? ( +
+
+ {children} +
+
+ ) : ( + children + )}
); }