Files
pasargad/src/components/layout/navbar/index.tsx
T

87 lines
2.5 KiB
TypeScript
Raw Normal View History

2025-05-31 18:03:15 +03:30
'use client';
2025-06-01 17:31:43 +03:30
import images from '@/assets/images/images';
2025-06-02 18:36:20 +03:30
import { Icon } from '@/components/uikit/icons';
2025-06-01 17:31:43 +03:30
import Image from 'next/image';
2025-05-31 18:03:15 +03:30
import Link from 'next/link';
import { usePathname, useParams } from 'next/navigation';
2025-05-31 18:03:15 +03:30
import { useState } from 'react';
2025-06-02 18:36:20 +03:30
import HamburgerMenu from '../hamburgerMenu';
import { useTranslations } from 'next-intl';
import routeFactory from '@/assets/constants/routeFactory';
2025-05-31 18:03:15 +03:30
export default function Navbar() {
const [open, setOpen] = useState<boolean>(false);
2025-05-31 18:03:15 +03:30
const pathname = usePathname();
const params = useParams();
const locale = params.locale as string;
const t = useTranslations();
2025-05-31 18:03:15 +03:30
// Get localized routes
const routes = routeFactory(t, locale);
2025-05-31 18:03:15 +03:30
const links = [
routes.home,
routes.productCategories,
routes.projects,
routes.blog,
routes.about,
routes.contact,
2025-05-31 18:03:15 +03:30
];
const linkClass = (href: string) => {
let isActive = false;
if (href === '/' || href === `/${locale}`) {
isActive = pathname === '/' || pathname === `/${locale}`;
} else {
isActive = pathname.startsWith(href);
}
return isActive ? 'text-primary font-semibold' : 'text-white';
};
2025-05-31 18:03:15 +03:30
return (
2025-06-02 18:36:20 +03:30
<>
<nav className="relative z-50 bg-gradient-to-b from-black to-black/0 pt-7 md:pt-11">
<div className="container mx-auto flex items-center justify-between border-b-0 border-white/10 pb-6">
<Link href={`/${locale}`} className="h-12 w-auto">
2025-06-02 18:36:20 +03:30
<Image
alt="logo"
src={images.logo}
className="h-full w-auto object-contain"
/>
</Link>
<ul className="hidden space-x-6 text-sm lg:flex lg:text-base">
{links.map(({ route, title }) => (
<li key={route()}>
2025-06-02 18:36:20 +03:30
<Link
href={route()}
className={`${linkClass(route())} hover:text-primary-light`}
2025-06-02 18:36:20 +03:30
>
{title}
2025-06-02 18:36:20 +03:30
</Link>
</li>
))}
<li>
<a className="flex items-center gap-2" href="tel:+098123456789">
<Icon name="phone" className="text-primary" />
<p>+098 123456789</p>
</a>
2025-05-31 18:03:15 +03:30
</li>
2025-06-02 18:36:20 +03:30
</ul>
2025-05-31 18:03:15 +03:30
2025-06-02 18:36:20 +03:30
{!open && (
<button
className="text-white lg:hidden"
2025-06-02 18:36:20 +03:30
onClick={() => setOpen(true)}
>
<Icon name="menu" className="h-6 w-6" />
</button>
)}
</div>
</nav>
2025-05-31 18:03:15 +03:30
2025-06-02 18:36:20 +03:30
<HamburgerMenu isOpen={open} onClose={() => setOpen(false)} />
</>
2025-05-31 18:03:15 +03:30
);
}