Skip to content

Commit 58b9888

Browse files
committed
Refactor Header component for improved mobile responsiveness; integrate mobile search and navigation, and update button implementation for better accessibility.
1 parent ad8b610 commit 58b9888

File tree

2 files changed

+87
-6
lines changed

2 files changed

+87
-6
lines changed

src/app/(public)/_components/header.tsx

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,31 @@ import { SearchForm } from './search-form';
77
import { auth } from '@/auth';
88
import { signInAction, signOutAction } from '../../actions';
99
import { LogoIconsSvg } from '@/components/Icons';
10+
import { Button } from './button';
11+
import { MobileMenu } from './mobile-menu';
1012

1113
export async function Header() {
1214
const session = await auth();
1315

1416
return (
15-
<header className="fixed top-0 left-0 w-full z-50 py-3 px-6">
16-
<div className="border border-hacktoberfest-light-blue rounded-lg py-4 px-6 container mx-auto backdrop-blur-md shadow-lg">
17+
<header className="fixed top-0 left-0 w-full z-50 py-3 px-4 sm:px-6">
18+
<div className="border border-hacktoberfest-light-blue rounded-lg py-4 px-4 sm:px-6 container mx-auto backdrop-blur-md shadow-lg">
1719
<div className="flex justify-between items-center">
1820
<Link href="/" className="z-5">
1921
<LogoIconsSvg />
2022
</Link>
2123

22-
<SearchForm />
24+
{/* Desktop Search - Hidden on mobile */}
25+
<div className="hidden md:block">
26+
<SearchForm />
27+
</div>
2328

24-
<div className="flex gap-2 lg:ml-40">
29+
{/* Desktop Navigation - Hidden on mobile */}
30+
<div className="hidden md:flex gap-2 lg:ml-40">
2531
<form action={session ? signOutAction : signInAction}>
26-
<button className="text-white border-white btn btn-ghost border-1 ms-4 hover:bg-blue-700 transition-colors">
32+
<Button className="text-xs sm:text-sm">
2733
{session && session.user ? 'Sign Out' : 'Sign In'}
28-
</button>
34+
</Button>
2935
</form>
3036
<Link
3137
href="/contributors"
@@ -43,6 +49,14 @@ export async function Header() {
4349
<IoLogoGithub size="1.5rem" color="white" title="GitHub" />
4450
</a>
4551
</div>
52+
53+
{/* Mobile Hamburger Menu */}
54+
<MobileMenu session={session} />
55+
</div>
56+
57+
{/* Mobile Search - Visible only on mobile */}
58+
<div className="md:hidden md:mt-4">
59+
<SearchForm />
4660
</div>
4761
</div>
4862
</header>
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
'use client';
2+
3+
import Link from 'next/link';
4+
import { useState } from 'react';
5+
6+
import { IoLogoGithub } from 'react-icons/io';
7+
import { BsPeopleFill } from 'react-icons/bs';
8+
import { HiMenu, HiX } from 'react-icons/hi';
9+
10+
import { Button } from './button';
11+
import { signInAction, signOutAction } from '../../actions';
12+
13+
interface MobileMenuProps {
14+
session: any;
15+
}
16+
17+
export function MobileMenu({ session }: MobileMenuProps) {
18+
const [isOpen, setIsOpen] = useState(false);
19+
20+
const toggleMenu = () => setIsOpen(!isOpen);
21+
22+
return (
23+
<div className="md:hidden">
24+
{/* Hamburger Button */}
25+
<button
26+
onClick={toggleMenu}
27+
className="text-white hover:text-hacktoberfest-light transition-colors p-2 rounded-lg"
28+
aria-label="Toggle menu"
29+
>
30+
{isOpen ? <HiX size="1.5rem" /> : <HiMenu size="1.5rem" />}
31+
</button>
32+
33+
{/* Mobile Menu Overlay */}
34+
{isOpen && (
35+
<div className="absolute top-full left-0 right-0 mt-2 bg-hacktoberfest-light-blue border border-hacktoberfest-light-blue rounded-lg py-4 px-4 sm:px-6 container mx-auto backdrop-blur-md shadow-lg">
36+
<div className="flex flex-col gap-4">
37+
<form action={session ? signOutAction : signInAction}>
38+
<Button className="w-full text-center text-xs sm:text-sm">
39+
{session && session.user ? 'Sign Out' : 'Sign In'}
40+
</Button>
41+
</form>
42+
43+
<Link
44+
href="/contributors"
45+
className="flex items-center gap-3 text-white hover:text-hacktoberfest-light transition-colors p-3 rounded-lg"
46+
onClick={() => setIsOpen(false)}
47+
>
48+
<BsPeopleFill size="1.2rem" />
49+
<span className="text-sm font-medium">Contributors</span>
50+
</Link>
51+
52+
<a
53+
href="https://github.com/max-programming/hacktoberfest-projects"
54+
target="_blank"
55+
rel="noreferrer"
56+
className="flex items-center gap-3 text-white hover:text-hacktoberfest-light transition-colors p-3 rounded-lg"
57+
onClick={() => setIsOpen(false)}
58+
>
59+
<IoLogoGithub size="1.2rem" />
60+
<span className="text-sm font-medium">GitHub</span>
61+
</a>
62+
</div>
63+
</div>
64+
)}
65+
</div>
66+
);
67+
}

0 commit comments

Comments
 (0)