import classNames from "classnames"; import { useEffect } from "react"; import { NavLink, useLocation } from "react-router-dom"; import useCurrentUser from "@/hooks/useCurrentUser"; import { useLayoutStore } from "@/store/module"; import { useTranslate } from "@/utils/i18n"; import { resolution } from "@/utils/layout"; import Icon from "./Icon"; import UserBanner from "./UserBanner"; interface NavLinkItem { id: string; path: string; title: string; icon: React.ReactNode; } const Header = () => { const t = useTranslate(); const location = useLocation(); const layoutStore = useLayoutStore(); const showHeader = layoutStore.state.showHeader; const user = useCurrentUser(); useEffect(() => { const handleWindowResize = () => { if (window.innerWidth < resolution.sm) { layoutStore.setHeaderStatus(false); } else { layoutStore.setHeaderStatus(true); } }; window.addEventListener("resize", handleWindowResize); handleWindowResize(); }, [location]); const homeNavLink: NavLinkItem = { id: "header-home", path: "/", title: t("common.home"), icon: , }; const dailyReviewNavLink: NavLinkItem = { id: "header-daily-review", path: "/review", title: t("daily-review.title"), icon: , }; const resourcesNavLink: NavLinkItem = { id: "header-resources", path: "/resources", title: t("common.resources"), icon: , }; const exploreNavLink: NavLinkItem = { id: "header-explore", path: "/explore", title: t("common.explore"), icon: , }; const archivedNavLink: NavLinkItem = { id: "header-archived", path: "/archived", title: t("common.archived"), icon: , }; const settingNavLink: NavLinkItem = { id: "header-setting", path: "/setting", title: t("common.settings"), icon: , }; const signInNavLink: NavLinkItem = { id: "header-auth", path: "/auth", title: t("common.sign-in"), icon: , }; const navLinks: NavLinkItem[] = user ? [homeNavLink, dailyReviewNavLink, resourcesNavLink, exploreNavLink, archivedNavLink, settingNavLink] : [exploreNavLink, signInNavLink]; return (
layoutStore.setHeaderStatus(false)} >
{navLinks.map((navLink) => ( classNames( "px-4 pr-5 py-2 rounded-2xl border flex flex-row items-center text-lg text-gray-800 dark:text-gray-300 hover:bg-white hover:border-gray-200 dark:hover:border-zinc-600 dark:hover:bg-zinc-700", isActive ? "bg-white drop-shadow-sm dark:bg-zinc-700 border-gray-200 dark:border-zinc-600" : "border-transparent" ) } > <> {navLink.icon} {navLink.title} ))}
); }; export default Header;