/** * Header - Top navigation bar with logo, navigation links, * language selector, and user profile. * * Features a subtle gradient background and responsive * hamburger menu on mobile. */ import { useState, useCallback } from "react"; import { Link, useLocation, useNavigate } from "react-router-dom"; import { useTranslation } from "react-i18next"; import PropTypes from "prop-types"; import { Bars3Icon, XMarkIcon, UserCircleIcon, ArrowRightOnRectangleIcon, Squares2X2Icon, } from "@heroicons/react/24/outline"; import { ROUTES, APP_NAME } from "@utils/constants"; import { useAuth } from "@context/AuthContext"; import LanguageSelector from "./LanguageSelector"; function Header({ language, onLanguageChange }) { const { t } = useTranslation(); const [mobileMenuOpen, setMobileMenuOpen] = useState(false); const location = useLocation(); const navigate = useNavigate(); const { isAuthenticated, user, logout } = useAuth(); const NAV_ITEMS = [ { label: t("nav.home"), path: ROUTES.HOME }, { label: t("nav.diseaseDetection"), path: ROUTES.DISEASE_DETECTION }, { label: t("nav.weather"), path: ROUTES.WEATHER }, { label: t("nav.apmcPrice"), path: ROUTES.APMC }, { label: t("nav.schemes"), path: ROUTES.SCHEMES }, ]; const toggleMobile = useCallback(() => { setMobileMenuOpen((prev) => !prev); }, []); const closeMobile = useCallback(() => { setMobileMenuOpen(false); }, []); const handleLogout = useCallback(() => { logout(); navigate(ROUTES.HOME); closeMobile(); }, [logout, navigate, closeMobile]); return (
{/* Logo */} KN {APP_NAME} {/* Desktop Navigation */} {/* Right actions */}
{/* Language selector */} {onLanguageChange && ( )} {/* User Dashboard / Profile / Login */}
{isAuthenticated && user ? ( <>
{/* Mobile menu button */}
{/* Mobile Navigation */} {mobileMenuOpen && ( )}
); } Header.propTypes = { language: PropTypes.string, onLanguageChange: PropTypes.func, }; export default Header;