Snai3i-MarketPlace / frontend / src / layouts / Main / Header / index.tsx
index.tsx
Raw
'use client';
import NavBar from '@/components/Nav';
import logo from '../../../assets/logo.svg';
import logoMobile from '../../../assets/logoMobile.svg';
import { Button } from '@/components/ui/button';
import { MenuIcon, X } from 'lucide-react';
import { Link, useNavigate } from 'react-router-dom';
import { motion, useMotionValueEvent, useScroll } from 'framer-motion';
import { useState } from 'react';

function Header() {
  const { scrollY } = useScroll();
  const [hidden, setHidden] = useState(false);
  const [nav, setNav] = useState(false);
  const navigate = useNavigate();

  useMotionValueEvent(scrollY, 'change', (latest) => {
    const previous = scrollY.getPrevious();
    if (previous !== undefined && latest > previous && latest > 150 && !nav) {
      setHidden(true);
    } else {
      setHidden(false);
    }
  });

  return (
    <motion.div
      variants={{
        visible: { opacity: 1, y: 0 },
        hidden: { opacity: 0, y: -100 },
      }}
      initial={{ opacity: 0, y: -10 }}
      animate={hidden ? 'hidden' : 'visible'}
      transition={{ duration: 0.35, ease: 'easeInOut' }}
      className={`sticky top-0 mt-6 lg:mt-0 bg-white z-50 px-[1.5rem] lg:px-[3.25rem] xl:px-[6.25rem] py-[1rem] lg:py-[1.56rem] ${
        nav ? 'shadow' : ''
      }`}
    >
      <div
        // initial={{ y: -100 }}
        // animate={{ y: 0 }}
        // transition={{ duration: 0.35, type: 'spring', stiffness: 100,  }}
        className="flex items-center justify-between lg:justify-start"
      >
        <div className="mr-10 hidden md:block">
          <Link to="/">
            <img draggable={false} src={logo} alt="logo" />
          </Link>
        </div>
        <div className="mr-10 md:hidden">
          <Link to="/">
            <img draggable={false} src={logoMobile} alt="logo" />
          </Link>
        </div>
        <div className="hidden lg:block lg:flex-1">
          <NavBar />
        </div>
        <Button
          className="font-semibold hidden lg:block bg-primaryMarket hover:bg-primaryMarket/80"
          size="lg"
          onClick={() => navigate('/login')}
        >
          Login
        </Button>
        <Button
          className="hover:bg-transparent lg:hidden block justify-end"
          variant="ghost"
          onClick={() => setNav(!nav)}
        >
          {nav ? <X size="30" /> : <MenuIcon size="30" />}
        </Button>
      </div>
      {nav && <NavBar mobile />}
    </motion.div>
  );
}

export default Header;

// function Header() {
//   return (
//     <div className="px-[100px] py-[25px]">
//       <div className="flex items-center">
//         <div className="mr-[65px]">
//           <img src={logo} alt="logo" />
//         </div>
//         <nav className='flex-1'>
//           <ul className="flex space-x-6">
//             <li>Home</li>
//             <li>Market</li>
//             <li>Programs</li>
//             <li>Events</li>
//           </ul>
//         </nav>
//         <div>
//           <button className="btn btn-primary">Login</button>
//         </div>
//       </div>

//     </div>
//   )
// }

// export default Header