All files / src/view/components/Header Header.tsx

100% Statements 32/32
100% Branches 10/10
75% Functions 3/4
100% Lines 32/32

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 401x 1x 1x 1x 1x 1x   1x 23x   23x 10x 1x 1x   10x 10x 23x   23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x   23x 23x 23x 23x   23x   1x  
import { NavLink } from 'react-router-dom';
import Navbar from '../Navbar/NavBar';
import { useEffect, useState } from 'react';
import { FaBars, FaTimes } from 'react-icons/fa';
import Button from '@/shared/components/button/Button';
import classNames from 'classnames';
 
const Header = () => {
  const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
 
  useEffect(() => {
    const handleEsc = (e: KeyboardEvent) => {
      if (e.key === 'Escape') setIsMobileMenuOpen(false);
    };
 
    document.addEventListener('keydown', handleEsc);
    return () => document.removeEventListener('keydown', handleEsc);
  }, []);
 
  return (
    <header className="header" role="banner">
      <h2 className="header-title">
        <NavLink to={'/'}>Rick and Morty Characters</NavLink>
      </h2>
      <Button
        className={classNames('burger-icon', { open: isMobileMenuOpen })}
        handleClick={() => setIsMobileMenuOpen((prev) => !prev)}
        aria-label={isMobileMenuOpen ? 'Close Menu' : 'Open Menu'}
        aria-expanded={isMobileMenuOpen}
        aria-controls="main-navigation"
      >
        {isMobileMenuOpen ? <FaTimes /> : <FaBars />}
      </Button>
      <Navbar isMobileMenuOpen={isMobileMenuOpen} onClose={() => setIsMobileMenuOpen(false)} />
    </header>
  );
};
 
export default Header;