Skip to content

Commit 3f2d0d2

Browse files
committed
feature admin dashboard layout: add top navigation bar using shadcn navigation menu components
1 parent cd3a489 commit 3f2d0d2

File tree

2 files changed

+93
-3
lines changed

2 files changed

+93
-3
lines changed

src/app/admin/layout.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
11
import React from "react";
2+
import AdminNavbar from "@/components/AdminNavbar";
23

34
export default function AdminLayout({
45
children,
56
}: Readonly<{
67
children: React.ReactNode;
78
}>) {
89
return (
9-
<section className="min-h-screen flex bg-neutral-50 text-neutral-900 dark:bg-neutral-950 dark:text-neutral-100">
10-
{/* Navbar will go here soon */}
11-
<div className="flex-1 p-6">{children}</div>
10+
<section className="min-h-screen flex flex-col bg-neutral-50 text-neutral-900 dark:bg-neutral-950 dark:text-neutral-100">
11+
{/* Top nav bar */}
12+
<AdminNavbar />
13+
14+
{/* Page content */}
15+
<main className="flex-1 p-6">
16+
{children}
17+
</main>
18+
19+
{/* Footer */}
1220
</section>
1321
);
1422
}

src/components/AdminNavbar.tsx

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
"use client";
2+
3+
import React from "react";
4+
import Link from "next/link";
5+
import {
6+
NavigationMenu,
7+
NavigationMenuList,
8+
NavigationMenuItem,
9+
NavigationMenuLink,
10+
navigationMenuTriggerStyle,
11+
} from "@/components/ui/navigation-menu";
12+
13+
const today = new Date().toLocaleDateString(undefined, {
14+
weekday: "short",
15+
month: "short",
16+
day: "numeric",
17+
year: "numeric",
18+
});
19+
20+
const AdminNavbar = () => {
21+
return (
22+
<header className="border-b border-neutral-200 bg-white/80 backdrop-blur dark:border-neutral-800 dark:bg-neutral-900/60">
23+
<div className="mx-auto flex h-14 w-full max-w-7xl items-center px-3 sm:px-4 lg:px-5">
24+
25+
{/* Left side: logo */}
26+
<div className="mr-6 flex flex-col leading-tight">
27+
<span className="text-sm font-semibold text-neutral-800 dark:text-neutral-100">
28+
Admin Panel
29+
</span>
30+
<span className="text-[11px] text-neutral-500 dark:text-neutral-400">
31+
ACM @ UTSA
32+
</span>
33+
</div>
34+
35+
{/* Center: nav menu links */}
36+
<nav aria-label="Admin navigation" className="flex-1">
37+
<NavigationMenu>
38+
<NavigationMenuList className="flex-wrap">
39+
40+
{/* Dashboard */}
41+
<NavigationMenuItem>
42+
<NavigationMenuLink asChild className={navigationMenuTriggerStyle()}>
43+
<Link href="/admin">Dashboard</Link>
44+
</NavigationMenuLink>
45+
</NavigationMenuItem>
46+
47+
{/* Courses */}
48+
<NavigationMenuItem>
49+
<NavigationMenuLink asChild className={navigationMenuTriggerStyle()}>
50+
<Link href="/admin/courses">Courses</Link>
51+
</NavigationMenuLink>
52+
</NavigationMenuItem>
53+
54+
{/* Tags */}
55+
<NavigationMenuItem>
56+
<NavigationMenuLink asChild className={navigationMenuTriggerStyle()}>
57+
<Link href="/admin/tags">Tags</Link>
58+
</NavigationMenuLink>
59+
</NavigationMenuItem>
60+
61+
{/* Users */}
62+
<NavigationMenuItem>
63+
<NavigationMenuLink asChild className={navigationMenuTriggerStyle()}>
64+
<Link href="/admin/users">Users</Link>
65+
</NavigationMenuLink>
66+
</NavigationMenuItem>
67+
68+
</NavigationMenuList>
69+
</NavigationMenu>
70+
</nav>
71+
72+
{/* Right side: date */}
73+
<div className="hidden text-xs text-neutral-500 dark:text-neutral-400 md:block">
74+
{today}
75+
</div>
76+
77+
</div>
78+
</header>
79+
);
80+
};
81+
82+
export default AdminNavbar;

0 commit comments

Comments
 (0)