Skip to content

Commit baf294c

Browse files
committed
login and signup buttons
1 parent 19b27e8 commit baf294c

File tree

1 file changed

+51
-30
lines changed

1 file changed

+51
-30
lines changed

client-test/src/components/Navbar/index.tsx

Lines changed: 51 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export function Navbar() {
1414
const [searchResults, setSearchResults] = useState<any[]>([]);
1515
const [loading, setLoading] = useState(false);
1616
const [showDropdown, setShowDropdown] = useState(false);
17+
const [showProfileDropdown, setShowProfileDropdown] = useState(false);
1718
const [isOpen, setIsOpen] = useState(false); // State for Sheet open/closed
1819
const navigate = useNavigate();
1920
const [isScrolled, setIsScrolled] = useState<boolean>(false);
@@ -90,11 +91,14 @@ export function Navbar() {
9091
if (showDropdown && !(event.target as Element).closest(".search-container")) {
9192
setShowDropdown(false);
9293
}
94+
if (showProfileDropdown && !(event.target as Element).closest(".profile-dropdown-container")) {
95+
setShowProfileDropdown(false);
96+
}
9397
}
9498

9599
document.addEventListener("mousedown", handleClickOutside);
96100
return () => document.removeEventListener("mousedown", handleClickOutside);
97-
}, [showDropdown]);
101+
}, [showDropdown, showProfileDropdown]);
98102

99103
const renderResultItem = (item: any, idx: number) => {
100104
if (item.type === "challenge") {
@@ -262,20 +266,47 @@ export function Navbar() {
262266
)}
263267

264268
{!isAuthenticated ? (
265-
<>
266-
<Button variant="outline" asChild className="text-gray-300 dark:text-gray-600 border-gray-700 dark:border-gray-300 hover:bg-gray-700 dark:hover:bg-gray-200">
267-
<Link to="/login">Log In</Link>
268-
</Button>
269-
<Button asChild className="bg-blue-600 dark:bg-blue-500 text-white hover:bg-blue-700 dark:hover:bg-blue-600">
270-
<Link to="/register">Sign Up</Link>
271-
</Button>
272-
</>
269+
<Button asChild className="bg-blue-600 dark:bg-blue-500 text-white hover:bg-blue-700 dark:hover:bg-blue-600">
270+
<Link to="/register">Enter</Link>
271+
</Button>
273272
) : (
274-
<div className="flex items-center gap-4">
275-
<Link to={`/profile/${user?.username}`}>{renderUserAvatar()}</Link>
276-
<Button onClick={logout} variant="outline" className="text-gray-300 dark:text-gray-600 border-gray-700 dark:border-gray-300 hover:bg-gray-700 dark:hover:bg-gray-200">
277-
Logout
273+
<div className="relative profile-dropdown-container">
274+
<Button
275+
variant="ghost"
276+
className="p-0 h-auto"
277+
onClick={() => setShowProfileDropdown(!showProfileDropdown)}
278+
>
279+
{renderUserAvatar()}
278280
</Button>
281+
282+
<AnimatePresence>
283+
{showProfileDropdown && (
284+
<motion.div
285+
initial={{ opacity: 0, y: -10 }}
286+
animate={{ opacity: 1, y: 0 }}
287+
exit={{ opacity: 0, y: -10 }}
288+
transition={{ duration: 0.15 }}
289+
className="absolute right-0 mt-2 w-32 bg-gray-800 dark:bg-white border border-gray-700 dark:border-gray-200 rounded-md shadow-lg z-50 overflow-hidden"
290+
>
291+
<Link
292+
to={`/profile/${user?.username}`}
293+
className="block px-4 py-2 text-sm text-gray-300 dark:text-gray-700 hover:bg-gray-700 dark:hover:bg-gray-100 transition-colors"
294+
onClick={() => setShowProfileDropdown(false)}
295+
>
296+
View Profile
297+
</Link>
298+
<button
299+
onClick={() => {
300+
logout();
301+
setShowProfileDropdown(false);
302+
}}
303+
className="block w-full text-left px-4 py-2 text-sm text-red-400 dark:text-red-600 hover:bg-red-600/20 dark:hover:bg-red-100 hover:text-red-300 dark:hover:text-red-700 transition-colors"
304+
>
305+
Logout
306+
</button>
307+
</motion.div>
308+
)}
309+
</AnimatePresence>
279310
</div>
280311
)}
281312
</div>
@@ -377,23 +408,13 @@ export function Navbar() {
377408

378409
<div className="mt-6 pt-6 border-t border-gray-700 dark:border-gray-200">
379410
{!isAuthenticated ? (
380-
<div className="flex flex-col gap-3">
381-
<Button
382-
variant="outline"
383-
asChild
384-
className="w-full text-gray-300 dark:text-gray-600 border-gray-700 dark:border-gray-300 hover:bg-gray-700 dark:hover:bg-gray-200"
385-
onClick={() => setIsOpen(false)} // Close Sheet on click
386-
>
387-
<Link to="/login">Log In</Link>
388-
</Button>
389-
<Button
390-
asChild
391-
className="w-full bg-blue-600 dark:bg-blue-500 text-white hover:bg-blue-700 dark:hover:bg-blue-600"
392-
onClick={() => setIsOpen(false)} // Close Sheet on click
393-
>
394-
<Link to="/register">Sign Up</Link>
395-
</Button>
396-
</div>
411+
<Button
412+
asChild
413+
className="w-full bg-blue-600 dark:bg-blue-500 text-white hover:bg-blue-700 dark:hover:bg-blue-600"
414+
onClick={() => setIsOpen(false)} // Close Sheet on click
415+
>
416+
<Link to="/register">Enter</Link>
417+
</Button>
397418
) : (
398419
<div className="flex flex-col gap-4">
399420
<div className="flex items-center gap-3">

0 commit comments

Comments
 (0)