Header.jsx 2.98 KB
import React, { useState } from 'react';
import { Link, useNavigate } from 'react-router-dom';
import { useAuth } from '../../context/AuthContext';
import { useCart } from '../../context/CartContext';
import SearchBar from './SearchBar';
import './header.css';

const Header = () => {
  const { user, logout, isAuthenticated } = useAuth();
  const { getCartItemsCount } = useCart();
  const navigate = useNavigate();
  const [isMenuOpen, setIsMenuOpen] = useState(false);

  const handleLogout = () => {
    logout();
    navigate('/');
  };

  const toggleMenu = () => {
    setIsMenuOpen(!isMenuOpen);
  };

  return (
    <header className="header">
      <div className="container">
        <div className="header-content">
          {/* Logo */}
          <div className="logo">
            <Link to="/">
              <h1>E-Commerce</h1>
            </Link>
          </div>

          {/* Search Bar */}
          <div className="search-container">
            <SearchBar />
          </div>

          {/* Navigation */}
          <nav className={`nav ${isMenuOpen ? 'nav-open' : ''}`}>
            <ul className="nav-list">
              <li>
                <Link to="/products">Products</Link>
              </li>
              
              {isAuthenticated ? (
                <>
                  <li className="nav-item dropdown">
                    <span className="user-menu">
                      {user?.username || 'Account'}
                    </span>
                    <div className="dropdown-content">
                      <Link to="/profile">Profile</Link>
                      <Link to="/orders">Orders</Link>
                      <button onClick={handleLogout}>Logout</button>
                    </div>
                  </li>
                  <li>
                    <Link to="/cart" className="cart-link">
                      Cart
                      {getCartItemsCount() > 0 && (
                        <span className="cart-badge">{getCartItemsCount()}</span>
                      )}
                    </Link>
                  </li>
                </>
              ) : (
                <>
                  <li>
                    <Link to="/login">Login</Link>
                  </li>
                  <li>
                    <Link to="/register">Register</Link>
                  </li>
                  <li>
                    <Link to="/cart" className="cart-link">
                      Cart
                      {getCartItemsCount() > 0 && (
                        <span className="cart-badge">{getCartItemsCount()}</span>
                      )}
                    </Link>
                  </li>
                </>
              )}
            </ul>
          </nav>

          {/* Mobile Menu Button */}
          <button 
            className="mobile-menu-btn"
            onClick={toggleMenu}
          >
            <span></span>
            <span></span>
            <span></span>
          </button>
        </div>
      </div>
    </header>
  );
};

export default Header;