improve menu behavior
All checks were successful
Build Images and Deploy / Update-PROD-Stack (push) Successful in 34s
All checks were successful
Build Images and Deploy / Update-PROD-Stack (push) Successful in 34s
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user