/* eslint-disable @next/next/no-img-element */ "use client"; import Link from "next/link"; import Image from "next/image"; import clsx from "clsx"; import {BsList, BsXLg} from "react-icons/bs"; import {Fragment, useEffect, useState} from "react"; import {Dialog, Menu, Transition} from "@headlessui/react"; import {useRouter} from "next/navigation"; import translation from "@/translation/navbar.json"; import {Contact} from "@/types/contact"; import NavBarSection from "@/types/cms/navbar"; interface Item { page: string; key: string; entries?: { key: string; label: string; }[]; } interface Props { currentPage: string; language: "en" | "ar"; data: NavBarSection; } async function getCountryManagers(language: "en" | "ar" = "en") { const res = await fetch(`${process.env.NEXT_PUBLIC_APP_URL}/api/users/agents?language=${language}`); if (!res.ok) { throw new Error("Failed to fetch contacts"); } return res.json(); } export default function Navbar({currentPage, language, data}: Props) { const [contacts, setContacts] = useState([]); useEffect(() => { getCountryManagers(language) .then((contacts) => setContacts( contacts.map((data: Contact) => ({ key: data.key, label: data.label, })), ), ) .catch(console.error); }, [language]); const items = [ {page: "/", key: "Home"}, {page: "/services", key: "Services"}, {page: "/price", key: "Price"}, {page: "/about", key: "About"}, {page: "/history", key: "History"}, {page: "/contact", key: "Contact"}, { key: "CountryManager", page: "/contacts", entries: contacts, }, ] as Item[]; const [isOpen, setIsOpen] = useState(false); const renderItem = (item: Item, className: string) => { if (item.entries) { return (
{data[item.key as keyof typeof data]}
); } return ( {data[item.key as keyof typeof data]} ); }; return ( <>
EnCoach logo
{items.map((item) => renderItem( item, clsx( "hover:border-b-mti-purple-light transition duration-300 ease-in-out hover:border-b-2", currentPage === item.page && "border-b-mti-purple-light border-b-2", ), ), )}
Official Exam {data.Platform} {data.Join} {language === "ar" ? ( EN ) : ( AR )}
setIsOpen(false)}>
EnCoach logo
{language === "ar" ? ( EN ) : ( AR )}
setIsOpen(false)} tabIndex={0}> setIsOpen(false)} />
{items.map((item) => renderItem( item, clsx( "w-fit transition duration-300 ease-in-out", currentPage === item.page && "text-mti-purple-light border-b-mti-purple-light border-b-2 font-semibold ", ), ), )} {data.Join} {data.Platform}
EnCoach logo
{language === "ar" ? ( EN ) : ( AR )}
setIsOpen(true)}> setIsOpen(true)} />
); }