From ec8c5ffc03d71ce2ae8796cd35d0c602b2694b8c Mon Sep 17 00:00:00 2001 From: headlesdev Date: Sat, 17 May 2025 19:33:52 +0200 Subject: [PATCH] Sidebar --- app/api/user/validate/route.ts | 2 +- app/dashboard/DashboardPage.tsx | 15 ++- app/dashboard/page.tsx | 6 +- components/Sidebar.tsx | 182 ++++++++++++++++++++++++++++++++ public/logo.png | Bin 0 -> 24845 bytes 5 files changed, 201 insertions(+), 4 deletions(-) create mode 100644 components/Sidebar.tsx create mode 100644 public/logo.png diff --git a/app/api/user/validate/route.ts b/app/api/user/validate/route.ts index 801624a..9573f4e 100644 --- a/app/api/user/validate/route.ts +++ b/app/api/user/validate/route.ts @@ -30,7 +30,7 @@ export async function POST(request: NextRequest) { return NextResponse.json({ error: "User not found" }, { status: 404 }); } - return NextResponse.json({ message: "Valid" }, { status: 200 }); + return NextResponse.json({ message: "Valid", username: user.username, name: user.name }, { status: 200 }); } catch (error: any) { return NextResponse.json({ error: "Internal Server Error" }, { status: 500 }); diff --git a/app/dashboard/DashboardPage.tsx b/app/dashboard/DashboardPage.tsx index fce7d71..a741e53 100644 --- a/app/dashboard/DashboardPage.tsx +++ b/app/dashboard/DashboardPage.tsx @@ -1,9 +1,20 @@ +"use client"; +import Sidebar from "@/components/Sidebar"; -export default function DashboardPage() { +interface DashboardPageProps { + username: string; + name: string; +} + +export default function DashboardPage({ username, name }: DashboardPageProps) { return (
-

Dashboard

+ +
+

Dashboard

+
+
); } \ No newline at end of file diff --git a/app/dashboard/page.tsx b/app/dashboard/page.tsx index fbdc5a1..7842aaa 100644 --- a/app/dashboard/page.tsx +++ b/app/dashboard/page.tsx @@ -11,6 +11,8 @@ import Cookies from "js-cookie"; export default function Dashboard() { const router = useRouter(); const [loading, setLoading] = useState(true); + const [username, setUsername] = useState(""); + const [name, setName] = useState(""); useEffect(() => { const init = async () => { @@ -23,6 +25,8 @@ export default function Dashboard() { Cookies.remove("token"); router.push("/"); } else { + setUsername(response.data.username); + setName(response.data.name); setLoading(false); } }; @@ -32,6 +36,6 @@ export default function Dashboard() { if (loading) { return ; } else { - return ; + return ; } } \ No newline at end of file diff --git a/components/Sidebar.tsx b/components/Sidebar.tsx new file mode 100644 index 0000000..ba458b4 --- /dev/null +++ b/components/Sidebar.tsx @@ -0,0 +1,182 @@ +"use client" + +import type React from "react" + +import { useState } from "react" +import Link from "next/link" +import { + Home, + Globe, + Server, + Layout, + Clock, + PenToolIcon as Tool, + Settings, + LogOut, + ChevronDown, + Menu, +} from "lucide-react" +import packageJson from "@/package.json" +import Image from "next/image" +import Cookies from "js-cookie" +import { useRouter } from "next/navigation" + +interface SidebarProps { + children: React.ReactNode + username: string + fullName: string +} + +export default function Sidebar({ children, username, fullName }: SidebarProps) { + const router = useRouter() + const [isProfileOpen, setIsProfileOpen] = useState(false) + const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false) + + const initials = useState(() => { + const nameToUse = fullName || username + + return nameToUse + .split(" ") + .filter((part) => part.length > 0) + .map((part) => part[0]) + .join("") + .toUpperCase() + .substring(0, 2) + })[0] + + const logout = () => { + Cookies.remove("token") + router.push("/") + } + + return ( +
+ {/* Mobile menu button */} +
+ + CoreControl +
+ + {/* Sidebar */} + + + {/* Main content */} +
{children}
+
+ ) +} diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..934cd5d0df67bcbbbacad458786143d8ff799fe4 GIT binary patch literal 24845 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 UHx^XMA1rv&C&0VHbL+nU0$c`dga7~l literal 0 HcmV?d00001