Skip to content

Commit f48e425

Browse files
committed
Fix mobile menu
1 parent d541a2b commit f48e425

1 file changed

Lines changed: 45 additions & 15 deletions

File tree

src/components/Header.js

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,60 @@
11
'use client';
22
import Link from 'next/link';
3-
import { useState } from 'react';
3+
import { useState, useEffect, useRef } from 'react';
44
import Image from 'next/image';
55

66
export default function Header() {
77
const [isMenuOpen, setIsMenuOpen] = useState(false);
8-
8+
const menuRef = useRef(null);
9+
10+
// Manejador para cerrar el menú
11+
useEffect(() => {
12+
function handleClickOutside(event) {
13+
if (menuRef.current && !menuRef.current.contains(event.target) && isMenuOpen) {
14+
setIsMenuOpen(false);
15+
}
16+
}
17+
18+
// Listener solo cuando el menú está abierto
19+
if (isMenuOpen) {
20+
document.addEventListener('mousedown', handleClickOutside);
21+
document.addEventListener('touchstart', handleClickOutside);
22+
}
23+
24+
// Limpieza al desmontar
25+
return () => {
26+
document.removeEventListener('mousedown', handleClickOutside);
27+
document.removeEventListener('touchstart', handleClickOutside);
28+
};
29+
}, [isMenuOpen]);
30+
31+
// Manejador para cerrar el menú
32+
const handleLinkClick = () => {
33+
setIsMenuOpen(false);
34+
};
35+
936
return (
1037
<header className="bg-black/30 backdrop-blur-md sticky top-0 z-50">
1138
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
1239
<div className="flex justify-between items-center py-4">
1340
<Link href="/" className="flex items-center space-x-2">
1441
<div className="w-12 h-12 relative">
15-
<Image
16-
src="/images/logo.webp"
17-
alt="PyDay Chile Logo"
18-
fill
19-
className="object-contain"
42+
<Image
43+
src="/images/logo.webp"
44+
alt="PyDay Chile Logo"
45+
fill
46+
className="object-contain"
2047
/>
2148
</div>
2249
<span className="text-xl font-bold">PyDay Chile 2025</span>
2350
</Link>
24-
51+
2552
{/* Menú para móvil */}
2653
<div className="md:hidden">
2754
<button
2855
onClick={() => setIsMenuOpen(!isMenuOpen)}
2956
className="text-white p-2"
57+
aria-label={isMenuOpen ? "Cerrar menú" : "Abrir menú"}
3058
>
3159
{isMenuOpen ? (
3260
<svg xmlns="http://www.w3.org/2000/svg" className="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
@@ -39,24 +67,26 @@ export default function Header() {
3967
)}
4068
</button>
4169
</div>
42-
70+
4371
{/* Menú para desktop */}
4472
<nav className="hidden md:flex space-x-8">
4573
<Link href="/" className="text-white hover:text-green-400 transition">Inicio</Link>
74+
<Link href="/talks" className="text-white hover:text-green-400 transition">Charlas</Link>
4675
<Link href="/multimedia" className="text-white hover:text-green-400 transition">Multimedia</Link>
4776
<Link href="/previous-editions" className="text-white hover:text-green-400 transition">Ediciones Anteriores</Link>
4877
<Link href="/register" className="text-white bg-green-600 hover:bg-green-700 px-4 py-2 rounded-full transition">Registrarse</Link>
4978
</nav>
5079
</div>
51-
80+
5281
{/* Menú móvil desplegable */}
5382
{isMenuOpen && (
54-
<div className="md:hidden py-4">
83+
<div className="md:hidden py-4" ref={menuRef}>
5584
<div className="flex flex-col space-y-4">
56-
<Link href="/" className="text-white hover:text-green-400 transition">Inicio</Link>
57-
<Link href="/multimedia" className="text-white hover:text-green-400 transition">Multimedia</Link>
58-
<Link href="/previous-editions" className="text-white hover:text-green-400 transition">Ediciones Anteriores</Link>
59-
<Link href="/register" className="text-white bg-green-600 hover:bg-green-700 px-4 py-2 rounded-full transition text-center">Registrarse</Link>
85+
<Link href="/" onClick={handleLinkClick} className="text-white hover:text-green-400 transition">Inicio</Link>
86+
<Link href="/talks" onClick={handleLinkClick} className="text-white hover:text-green-400 transition">Charlas</Link>
87+
<Link href="/multimedia" onClick={handleLinkClick} className="text-white hover:text-green-400 transition">Multimedia</Link>
88+
<Link href="/previous-editions" onClick={handleLinkClick} className="text-white hover:text-green-400 transition">Ediciones Anteriores</Link>
89+
<Link href="/register" onClick={handleLinkClick} className="text-white bg-green-600 hover:bg-green-700 px-4 py-2 rounded-full transition text-center">Registrarse</Link>
6090
</div>
6191
</div>
6292
)}

0 commit comments

Comments
 (0)