"use client"; import type { CompanyInfo } from "@/types/company"; type Props = { company: CompanyInfo; }; import Link from "next/link"; import { useState, useEffect, useRef } from "react"; import React from "react"; // Font Awesome import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faInstagram } from "@fortawesome/free-brands-svg-icons"; // Lucide import { ShoppingBag } from "lucide-react"; type MenuItem = { label: string; href?: string; external?: boolean; children?: MenuItem[]; icon?: React.ReactNode; }; // --- 省略 --- const menuItems: MenuItem[] = [ { label: "スケジュール", href: "/schedule" }, { label: "新着情報", href: "/news" }, { label: "ブランド", href: "/brand" }, { label: "会社情報", href: "/company" }, { label: "ウェブストア", href: "https://store.basecafe.jp", external: true, icon: , }, { label: "Instagram", icon: , children: [ { label: "Base Bettaku", href: "https://www.instagram.com/basebettaku/", external: true, }, { label: "BaseCafe", href: "https://www.instagram.com/basecafe_2024/", external: true, }, ], }, { label: "個室予約", href: "/reservation" }, ]; export default function Header({ company }: Props) { const [openSubMenu, setOpenSubMenu] = useState(null); const [isDesktop, setIsDesktop] = useState(false); const [mobileOpen, setMobileOpen] = useState(false); const [scrolled, setScrolled] = useState(false); // ← 追加 const menuRef = useRef(null); useEffect(() => { // ウィンドウ幅チェック const checkSize = () => setIsDesktop(window.innerWidth >= 1024); checkSize(); window.addEventListener("resize", checkSize); // クリックアウトサイドでサブメニュー閉じる const handleClickOutside = (event: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(event.target as Node)) { setOpenSubMenu(null); } }; document.addEventListener("mousedown", handleClickOutside); // スクロール監視(Headerの半透明切替) const handleScroll = () => { setScrolled(window.scrollY > 20); // 20px以上スクロールで true }; window.addEventListener("scroll", handleScroll); return () => { window.removeEventListener("resize", checkSize); document.removeEventListener("mousedown", handleClickOutside); window.removeEventListener("scroll", handleScroll); }; }, []); const toggleSubMenu = (label: string) => { setOpenSubMenu(openSubMenu === label ? null : label); }; return (
{/* ロゴ */} {company.name} {/* PCメニュー */} {/* モバイルメニュー ボタン */}
{/* モバイルメニュー */} {mobileOpen && ( )}
); }