Skip to content

Commit 971dab0

Browse files
committed
fix: added back searchbar into navbar and added dropdown for buttons
1 parent b5d1d7f commit 971dab0

File tree

1 file changed

+81
-26
lines changed

1 file changed

+81
-26
lines changed

src/components/Navbar.tsx

Lines changed: 81 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,27 @@ import Link from "next/link";
66
import { usePathname } from "next/navigation";
77
import ccLogo from "../assets/codechef_logo.svg";
88
import ModeToggle from "@/components/toggle-theme";
9-
import { Button } from "@/components/ui/button";
109
import { ArrowDownLeftIcon, Pin, ArrowUpRight } from "lucide-react";
1110
import NavDropdownButton from "./NavDropdownButton";
1211
import FloatingNavbar from "./FloatingNavbar";
1312
import PWAInstallButton from "./ui/PWAInstallButton";
13+
import SearchBarChild from "./Searchbar/searchbar-child";
1414

1515
function Navbar() {
1616
const pathname = usePathname();
1717
const [open, setOpen] = useState(false);
18+
const [subjects, setSubjects] = useState<string[]>([]);
1819
const dropdownContainerRef = useRef<HTMLDivElement>(null);
1920

21+
useEffect(() => {
22+
async function getSubjects() {
23+
const res = await fetch("/api/course-list");
24+
const data = await res.json();
25+
setSubjects(data.map((course: { name: string }) => course.name));
26+
}
27+
if (pathname === "/catalogue") getSubjects();
28+
}, [pathname]);
29+
2030
useEffect(() => {
2131
function handleClickOutside(event: MouseEvent) {
2232
if (
@@ -36,11 +46,29 @@ function Navbar() {
3646
};
3747
}, [open]);
3848

49+
50+
const renderHomePageButtons = () => (
51+
<>
52+
<Link href="/pinned">
53+
<div className="ml-2 flex items-center gap-2 rounded-full border bg-[#e8e9ff] dark:bg-black border-[#3A3745] px-4 py-2 text-sm font-semibold dark:text-white transition hover:bg-slate-50 text-gray-700 dark:hover:bg-[#1A1823] h-10">
54+
<Pin className="h-4 w-4" />
55+
Pinned Subjects
56+
</div>
57+
</Link>
58+
<Link href="/request">
59+
<div className="ml-2 flex items-center gap-2 rounded-full border bg-[#e8e9ff] dark:bg-black border-[#3A3745] px-4 py-2 text-sm font-semibold dark:text-white transition hover:bg-slate-50 text-gray-700 dark:hover:bg-[#1A1823] h-10">
60+
<ArrowUpRight className="h-4 w-4" />
61+
Paper Request
62+
</div>
63+
</Link>
64+
</>
65+
);
66+
3967
return (
4068
<div className="sticky top-0 z-10 w-full bg-[#B2B8FF] px-4 py-4 dark:bg-[#130E1F] md:px-8 md:py-5">
4169
<div className="flex items-center justify-between">
42-
<div className="flex items-center gap-4">
43-
<Link href="https://www.codechefvit.com/" target="_blank">
70+
<div className="flex items-center gap-4 relative">
71+
<Link href="https://www.codechefvit.com/" target="_blank">
4472
<Image
4573
src={ccLogo as HTMLImageElement}
4674
alt="codechef-logo"
@@ -56,37 +84,65 @@ function Navbar() {
5684
Papers
5785
</Link>
5886

59-
<div className="mt-3 hidden md:flex">
60-
<Link href="/pinned">
61-
<div className="ml-2 flex items-center gap-2 rounded-full border bg-[#e8e9ff] dark:bg-black border-[#3A3745] px-4 py-2 text-sm font-semibold dark:text-white transition hover:bg-slate-50 text-gray-700 dark:hover:bg-[#1A1823]">
62-
<Pin className="h-4 w-4" />
63-
Pinned Subjects
64-
</div>
65-
</Link>
66-
<div className="ml-2 hidden md:flex">
67-
<Link href="/request">
68-
<div className="ml-2 flex items-center gap-2 rounded-full border bg-[#e8e9ff] dark:bg-black border-[#3A3745] px-4 py-2 text-sm font-semibold dark:text-white transition hover:bg-slate-50 text-gray-700 dark:hover:bg-[#1A1823]">
69-
<ArrowUpRight className="h-4 w-4" />
70-
Paper Request
87+
{pathname === "/catalogue" ? (
88+
<div
89+
ref={dropdownContainerRef}
90+
className="ml-4 hidden md:block relative"
91+
>
92+
<NavDropdownButton
93+
isOpen={open}
94+
onClick={() => setOpen((prev) => !prev)}
95+
variant="default"
96+
/>
97+
{open && (
98+
<div className="absolute left-0 mt-3 w-56 rounded-2xl bg-[#4B22D1] shadow-2xl border border-[rgba(255,255,255,0.1)] z-50 overflow-hidden backdrop-blur-sm">
99+
<div className="py-2">
100+
<Link href="/pinned">
101+
<button
102+
onClick={() => setOpen(false)}
103+
className="w-full px-4 py-3 text-left text-white hover:bg-[rgba(255,255,255,0.1)] transition-all duration-200 flex items-center gap-3 group"
104+
>
105+
<Pin className="h-4 w-4 transition-transform duration-200 group-hover:scale-110" />
106+
<span className="font-medium">Pinned Subjects</span>
107+
</button>
108+
</Link>
109+
<Link href="/request">
110+
<button
111+
onClick={() => setOpen(false)}
112+
className="w-full px-4 py-3 text-left text-white hover:bg-[rgba(255,255,255,0.1)] transition-all duration-200 flex items-center gap-3 group"
113+
>
114+
<ArrowUpRight className="h-4 w-4 transition-transform duration-200 group-hover:scale-110" />
115+
<span className="font-medium">Paper Request</span>
116+
</button>
117+
</Link>
118+
</div>
71119
</div>
72-
</Link>
120+
)}
73121
</div>
74-
</div>
75-
76-
{/* Desktop: Create Paper Request button */}
122+
) : (
123+
<div className="hidden md:flex items-center h-10">
124+
{renderHomePageButtons()}
125+
</div>
126+
)}
77127
</div>
78128

129+
{pathname === "/catalogue" && (
130+
<div className="hidden md:flex flex-1 justify-center mx-4">
131+
<div className="w-full max-w-[700px]">
132+
<SearchBarChild initialSubjects={subjects} />
133+
</div>
134+
</div>
135+
)}
136+
79137
<div className="hidden items-center gap-4 md:flex">
80138
<div className="rounded-full border border-[#3A3745] p-1">
81139
<ModeToggle />
82140
</div>
83-
84141
<div className="hidden max-w-[200px] md:block">
85142
<PWAInstallButton />
86143
</div>
87-
88144
<Link href={pathname === "/upload" ? "/" : "/upload"}>
89-
<div className="flex items-center gap-2 rounded-full border bg-[#e8e9ff] dark:bg-black border-[#3A3745] px-4 py-2 text-sm font-semibold dark:text-white transition hover:bg-slate-50 text-gray-700 dark:hover:bg-[#1A1823]">
145+
<div className="flex items-center gap-2 rounded-full border bg-[#e8e9ff] dark:bg-black border-[#3A3745] px-4 py-2 text-sm font-semibold dark:text-white transition hover:bg-slate-50 text-gray-700 dark:hover:bg-[#1A1823] h-10">
90146
<ArrowDownLeftIcon className="h-4 w-4 rotate-90" />
91147
<span>
92148
{pathname === "/upload" ? "Search Papers" : "Upload Papers"}
@@ -95,16 +151,15 @@ function Navbar() {
95151
</Link>
96152
</div>
97153

98-
{/* Mobile: Create Paper Request button inside dropdown */}
99154
<div className="md:hidden" ref={dropdownContainerRef}>
100155
<NavDropdownButton
101156
isOpen={open}
102157
onClick={() => setOpen((prev) => !prev)}
158+
variant="default"
103159
/>
104160
<div
105-
className={`transition-all duration-300 ease-in-out ${
106-
open ? "block" : "hidden"
107-
}`}
161+
className={`transition-all duration-300 ease-in-out ${open ? "block" : "hidden"
162+
}`}
108163
>
109164
<FloatingNavbar onNavigate={() => setOpen(false)} />
110165
</div>

0 commit comments

Comments
 (0)