improve menu behavior
All checks were successful
Build Images and Deploy / Update-PROD-Stack (push) Successful in 34s

This commit is contained in:
2026-01-30 16:35:05 -05:00
parent 9c0fd35804
commit 45c98f9fc7
5 changed files with 39 additions and 7 deletions

View File

@@ -166,6 +166,10 @@ body {
transition: all 0.3s ease; transition: all 0.3s ease;
} }
.nav-backdrop {
display: none;
}
.nav-menu { .nav-menu {
display: flex; display: flex;
align-items: center; align-items: center;
@@ -258,6 +262,27 @@ body {
display: flex; display: flex;
} }
.nav-backdrop {
display: block;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100vh;
background: rgba(0, 0, 0, 0.5);
z-index: 999;
animation: fadeIn 0.3s ease;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.hamburger.active span:nth-child(1) { .hamburger.active span:nth-child(1) {
transform: rotate(45deg) translate(5px, 5px); transform: rotate(45deg) translate(5px, 5px);
} }

View File

@@ -44,7 +44,7 @@ function Header() {
<div className="nav-brand"> <div className="nav-brand">
<h2>WTP</h2> <h2>WTP</h2>
<button <button
className="hamburger" className={`hamburger ${mobileMenuOpen ? 'active' : ''}`}
onClick={() => setMobileMenuOpen(!mobileMenuOpen)} onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
aria-label="Toggle menu" aria-label="Toggle menu"
> >
@@ -53,6 +53,13 @@ function Header() {
<span></span> <span></span>
</button> </button>
</div> </div>
{mobileMenuOpen && (
<div
className="nav-backdrop"
onClick={closeMobileMenu}
aria-hidden="true"
/>
)}
<div className={`nav-menu ${mobileMenuOpen ? 'active' : ''}`}> <div className={`nav-menu ${mobileMenuOpen ? 'active' : ''}`}>
<ul className="nav-links"> <ul className="nav-links">
<li><Link to="/challenges" onClick={closeMobileMenu}>Challenges</Link></li> <li><Link to="/challenges" onClick={closeMobileMenu}>Challenges</Link></li>

View File

@@ -175,7 +175,7 @@ export default function ChallengeDetail() {
return; return;
} }
// Debounce search by 1 second // Debounce search by 0.5 second
const timeout = setTimeout(async () => { const timeout = setTimeout(async () => {
try { try {
const data = await api.searchUsers(query); const data = await api.searchUsers(query);
@@ -183,7 +183,7 @@ export default function ChallengeDetail() {
} catch (err) { } catch (err) {
console.error('Search failed:', err); console.error('Search failed:', err);
} }
}, 1000); }, 500);
setSearchTimeout(timeout); setSearchTimeout(timeout);
}; };

View File

@@ -80,7 +80,7 @@ export default function ChallengeList() {
return; return;
} }
// Debounce search by 1.5 seconds // Debounce search by 0.75 seconds
const timeout = setTimeout(async () => { const timeout = setTimeout(async () => {
try { try {
const data = await api.searchShows(query); const data = await api.searchShows(query);
@@ -88,7 +88,7 @@ export default function ChallengeList() {
} catch (err) { } catch (err) {
console.error('Search failed:', err); console.error('Search failed:', err);
} }
}, 1500); }, 750);
setSearchTimeout(timeout); setSearchTimeout(timeout);
}; };

View File

@@ -79,7 +79,7 @@ export default function Friends() {
return; return;
} }
// Debounce search by 1 second // Debounce search by 0.5 second
const timeout = setTimeout(async () => { const timeout = setTimeout(async () => {
try { try {
const data = await api.searchUsers(query); const data = await api.searchUsers(query);
@@ -87,7 +87,7 @@ export default function Friends() {
} catch (err) { } catch (err) {
console.error('Search failed:', err); console.error('Search failed:', err);
} }
}, 1000); }, 500);
setSearchTimeout(timeout); setSearchTimeout(timeout);
}; };