Skip to content

Commit f4a56e4

Browse files
committed
fix: floatingNavbar
1 parent 88d1fab commit f4a56e4

1 file changed

Lines changed: 68 additions & 42 deletions

File tree

src/components/FloatingNavbar.tsx

Lines changed: 68 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,93 @@
11
"use client";
22

3-
import { useState } from "react";
43
import { usePathname } from "next/navigation";
54
import Link from "next/link";
6-
import { ArrowUpRight, Pin, UploadIcon, ChevronDown } from "lucide-react";
5+
import { useState } from "react";
6+
import {
7+
ArrowUpRight,
8+
ChevronDown,
9+
Pin,
10+
UploadIcon,
11+
} from "lucide-react";
712
import ModeToggle from "./toggle-theme";
813

14+
import {
15+
DropdownMenu,
16+
DropdownMenuTrigger,
17+
DropdownMenuContent,
18+
DropdownMenuItem,
19+
} from "@/components/ui/dropdown-menu";
20+
921
interface Props {
1022
onNavigate: () => void;
1123
}
1224

1325
export default function FloatingNavbar({ onNavigate }: Props) {
1426
const pathname = usePathname();
15-
const [isOpen, setIsOpen] = useState(false);
27+
const [dropdownOpen, setDropdownOpen] = useState(false);
1628

1729
return (
18-
<div className="flex flex-col items-end h-full pointer-events-none">
19-
{}
20-
<button
21-
className="mt-[1.25rem] flex h-10 w-10 items-center justify-center rounded-full bg-[#4B22D1] text-white shadow-lg transition-transform duration-200 hover:scale-105 active:scale-95 pointer-events-auto"
22-
onClick={() => setIsOpen(prev => !prev)}
23-
aria-label={isOpen ? "Close menu" : "Open menu"}
24-
>
25-
<ChevronDown
26-
className={`h-5 w-5 transition-transform duration-200 ${isOpen ? "rotate-180" : ""}`}
27-
/>
28-
</button>
29-
30-
{}
31-
{isOpen && (
32-
<div className="absolute top-20 mt-2 flex flex-col items-center gap-4 rounded-3xl bg-[#110F18] px-6 py-6 shadow-xl ring-1 ring-white/5 pointer-events-auto">
33-
<Link
34-
href={pathname === "/upload" ? "/" : "/upload"}
35-
onClick={() => {
36-
setIsOpen(false);
37-
onNavigate();
38-
}}
30+
<div className="flex flex-col items-end h-full space-y-4 pointer-events-none">
31+
<DropdownMenu open={dropdownOpen} onOpenChange={setDropdownOpen}>
32+
<DropdownMenuTrigger asChild>
33+
<button
34+
className="flex h-10 w-10 items-center justify-center rounded-full bg-[#4B22D1] text-white shadow-lg transition-transform duration-200 hover:scale-105 active:scale-95 pointer-events-auto"
35+
aria-label="Toggle dropdown"
3936
>
40-
<div className="flex items-center gap-2 rounded-full border border-[#3A3745] px-4 py-2 text-sm font-semibold text-white transition hover:bg-[#1A1823]">
37+
<ChevronDown
38+
className={`h-5 w-5 transition-transform duration-200 ${dropdownOpen ? "rotate-180" : ""}`}
39+
/>
40+
</button>
41+
</DropdownMenuTrigger>
42+
43+
<DropdownMenuContent
44+
className="xl:hidden mt-2 w-72 space-y-1 rounded-3xl border border-white/10 bg-[#110F18] px-4 py-4 text-white shadow-xl backdrop-blur-sm pointer-events-auto"
45+
align="end"
46+
>
47+
<DropdownMenuItem asChild>
48+
<Link
49+
href={pathname === "/upload" ? "/" : "/upload"}
50+
onClick={() => onNavigate()}
51+
className="flex w-full items-center gap-3 rounded-lg px-3 py-3 hover:bg-[#1A1823] transition"
52+
>
4153
<UploadIcon className="h-4 w-4" />
42-
<span>{pathname === "/upload" ? "Search Papers" : "Upload Papers"}</span>
43-
</div>
44-
</Link>
54+
<span className="text-sm font-medium">
55+
{pathname === "/upload" ? "Search Papers" : "Upload Papers"}
56+
</span>
57+
</Link>
58+
</DropdownMenuItem>
4559

46-
<Link href="/pinned" onClick={() => { setIsOpen(false); onNavigate(); }}>
47-
<div className="flex items-center gap-2 rounded-full border border-[#3A3745] px-4 py-2 text-sm font-semibold text-white transition hover:bg-[#1A1823]">
60+
<DropdownMenuItem asChild>
61+
<Link
62+
href="/pinned"
63+
onClick={() => onNavigate()}
64+
className="flex w-full items-center gap-3 rounded-lg px-3 py-3 hover:bg-[#1A1823] transition"
65+
>
4866
<Pin className="h-4 w-4" />
49-
<span>Pinned Subjects</span>
50-
</div>
51-
</Link>
67+
<span className="text-sm font-medium">Pinned Subjects</span>
68+
</Link>
69+
</DropdownMenuItem>
5270

53-
<Link href="/request" onClick={() => { setIsOpen(false); onNavigate(); }}>
54-
<div className="flex items-center gap-2 rounded-full border border-[#3A3745] px-4 py-2 text-sm font-semibold text-white transition hover:bg-[#1A1823] w-full justify-center">
71+
<DropdownMenuItem asChild>
72+
<Link
73+
href="/request"
74+
onClick={() => onNavigate()}
75+
className="flex w-full items-center gap-3 rounded-lg px-3 py-3 hover:bg-[#1A1823] transition"
76+
>
5577
<ArrowUpRight className="h-4 w-4" />
56-
<span>Paper Request</span>
57-
</div>
58-
</Link>
78+
<span className="text-sm font-medium">Paper Request</span>
79+
</Link>
80+
</DropdownMenuItem>
5981

60-
<div className="rounded-full border border-[#3A3745] p-1">
61-
<ModeToggle />
82+
<div className="pt-2 border-t border-[#3A3745] mt-2">
83+
<div className="flex justify-center pt-2">
84+
<div className="rounded-full border border-[#3A3745] p-1">
85+
<ModeToggle />
86+
</div>
87+
</div>
6288
</div>
63-
</div>
64-
)}
89+
</DropdownMenuContent>
90+
</DropdownMenu>
6591
</div>
6692
);
6793
}

0 commit comments

Comments
 (0)