"use client"; import Link from "next/link"; import { useEffect, useState } from "react"; import { CATEGORIES, slugifyCategory } from "./categories"; import { useSession } from "next-auth/react"; type HeaderProps = { forceScrolled?: boolean; }; export default function MobileHeader({ forceScrolled = false }: HeaderProps) { const [isShrunk, setIsShrunk] = useState(forceScrolled); const [isHidden, setIsHidden] = useState(false); const [touchStartY, setTouchStartY] = useState(null); useSession(); const categoryIcons: Record = { Interior: "/categories/cat-interior.png", Tools: "/categories/cat-tools.png", Exterior: "/categories/cat-exterior.png", Drivetrain: "/categories/cat-drivetrain.png", Lighting: "/categories/cat-lighting.png", Suspension: "/categories/cat-suspension.png", Audio: "/categories/cat-audio.png", Performance: "/categories/cat-performance.png", }; useEffect(() => { if (forceScrolled) { setIsShrunk(true); setIsHidden(false); return; } const SHRINK_AT = 140; const EXPAND_AT = 80; const onScroll = () => { const y = window.scrollY; setIsShrunk((prev) => (prev ? y > EXPAND_AT : y > SHRINK_AT)); setIsHidden((prev) => (y > SHRINK_AT ? prev : false)); }; onScroll(); window.addEventListener("scroll", onScroll, { passive: true }); return () => window.removeEventListener("scroll", onScroll); }, [forceScrolled]); const handleTouchStart = (e: React.TouchEvent) => { setTouchStartY(e.touches[0]?.clientY ?? null); }; const handleTouchEnd = (e: React.TouchEvent) => { if (touchStartY === null) return; const endY = e.changedTouches[0]?.clientY ?? touchStartY; const delta = endY - touchStartY; const SWIPE_THRESHOLD = 40; if (isShrunk && !isHidden && delta < -SWIPE_THRESHOLD) { setIsHidden(true); } else if (isHidden && delta > SWIPE_THRESHOLD) { setIsHidden(false); } setTouchStartY(null); }; return ( <>
Shifted Offroad
); }