import React, { useEffect } from "react"; import {useTranslation } from "react-i18next"; import Button from "./Button"; import robotLogo from "../../assets/images/robot-logo.png"; import { BsNewspaper, BsGithub } from "react-icons/bs"; import Whitepaper from "../../assets/Whitepaper.pdf"; import { MdLanguage } from "react-icons/md"; import { locales, resources } from "../../i18n/i18n"; type Props = {}; const menuItems = [ { name: "Home", path: "/", id: "home", }, { name: "About", path: "", id: "about", }, { name: "Roadmap", path: "", id: "roadmap", }, { name: "Tokenomics", path: "", id: "tokenomics", }, ]; const Header = (props: Props) => { const [isScrolled, setIsScrolled] = React.useState(false); const [isOpenMenu, setIsOpenMenu] = React.useState(false); const [isMobile, setIsMobile] = React.useState(false); const { i18n } = useTranslation(); const currentLanguage = locales[i18n.language as keyof typeof locales ] const languages = Object.keys(resources) console.log(Object.keys(resources)); console.log(currentLanguage); React.useEffect(() => { // check is mobile if (window.innerWidth <= 768) { setIsMobile(true); } else { setIsMobile(false); } console.log(window.innerWidth); if (window.innerWidth <= 1024) { setIsScrolled(true); } else { window.addEventListener("scroll", () => { if (window.scrollY > 0) { setIsScrolled(true); } else { setIsScrolled(false); } }); } }, [window.innerWidth]); const jumpToSection = (section: string) => { console.log("section", section); const element = document.getElementById(section); if (element) { element.scrollIntoView({ behavior: "smooth" }); } }; const backToHome = () => { const element = document.getElementById("home"); if (element) { element.scrollIntoView({ behavior: "smooth" }); } }; const openLocalPdf = () => { const pdf = Whitepaper; window.open(pdf); }; const changeLanguage = (lng: string)=>{ i18n.changeLanguage(lng) } return ( <> {isScrolled ? ( <div className="fixed w-full z-30 p-4 transition-all duration-150 bg-gray-800"> <div className="container mx-auto flex justify-between items-center "> <div className="flex gap-2 items-center cursor-pointer hover:text-orange-400" onClick={() => backToHome()} > <div className="bg-white w-8 rounded-full overflow-hidden p-1 "> <img src={robotLogo} className="w-full transition-all duration-150 rounded-full" alt="" /> </div> <h4 className="text-xl transition-all duration-150 text-white hover:text-orange-400 uppercase font-bold"> SGPT </h4> </div> { // Mobile menu isMobile ? ( <div className="flex flex-col items-center gap-1 px-2 py-1 cursor-pointer" onClick={() => setIsOpenMenu(!isOpenMenu)} > <div className="w-6 h-1 bg-white rounded-full"></div> <div className="w-6 h-1 bg-white rounded-full"></div> <div className="w-6 h-1 bg-white rounded-full"></div> </div> ) : ( <div className="flex gap-10 items-center"> <ul className="flex gap-10"> {menuItems.map((item) => ( <li className="inline-block " key={item.path} onClick={() => jumpToSection(item.id)} > <p className="text-white text-md transition-all duration-150 cursor-pointer transform motion-safe:hover:scale-110 hover:text-orange-500"> {item.name} </p> </li> ))} </ul> <div className="flex gap-4"> <Button size="sm" onClick={() => openLocalPdf()}> <div className="flex items-center gap-2 shadow-slate-50 transition-all transform motion-safe:hover:scale-110"> <BsNewspaper /> Whitepaper </div> </Button> <Button size="sm"> <div className="flex items-center gap-2 shadow-slate-50 transform motion-safe:hover:scale-110"> <BsGithub /> Audit </div> </Button> </div> </div> ) } { // Mobile menu isMobile && isOpenMenu ? ( <div className="fixed top-12 right-0 py-4 pl-6 pr-10 bg-gray-800 z-40 rounded-xl"> <div className="flex flex-col items-center justify-center h-full"> <ul className="flex flex-col gap-3"> {menuItems.map((item) => ( <li className="inline-block" key={item.path} onClick={() => jumpToSection(item.id)} > <p className="text-white text-md transition-all duration-150 cursor-pointer"> {item.name} </p> </li> ))} <li className="inline-block" onClick={() => openLocalPdf()} > <p className="text-white text-md transition-all duration-150 cursor-pointer"> Whitepaper </p> </li> <li className="inline-block"> <p className="text-white text-md transition-all duration-150 cursor-pointer"> Audit </p> </li> </ul> </div> </div> ) : null } </div> </div> ) : ( <div className="fixed z-30 w-full p-5 transition-all duration-150"> <div className="container mx-auto flex justify-between items-center"> <div className="flex gap-2 items-center"> <div className="bg-white w-12 rounded-full overflow-hidden p-1"> <img src={robotLogo} className="w-full transition-all duration-150 rounded-full" alt="" /> </div> <h4 className="text-4xl transition-all duration-150 text-white uppercase font-bold"> SGPT </h4> </div> <div className="flex text-white items-center gap-x-2 cursor-pointer group relative" > <MdLanguage className="text-[24px]" /> <span className="group-hover:text-orange-400">{currentLanguage}</span> <div className=" h-40 w-[140px] absolute top-3"></div> <ul className="hidden group-hover:flex animate-show-list-language absolute top-10 flex-col gap-y-4 "> {languages.map((lng)=>( <> <li className="lng-item relative group/lng-item w-fit hover:text-orange-400 animate-show" onClick={()=>changeLanguage(lng)}> {locales[lng as keyof typeof locales]} <div className="absolute bottom-0 bg-white h-[1px] w-0 animate-show group-hover/lng-item:w-full group-hover/lng-item:bg-orange-400"></div> </li> </> ))} </ul> </div> <div className="flex gap-10 items-center"> <ul className="flex gap-10"> {menuItems.map((item) => ( <li className="inline-block " key={item.path} onClick={() => jumpToSection(item.id)} > <p className="text-white text-md transition-all duration-150 cursor-pointer hover:text-orange-400"> {item.name} </p> </li> ))} </ul> <div className="flex gap-4"> <Button size="md" onClick={() => openLocalPdf()}> <div className="flex items-center gap-2"> <BsNewspaper /> Whitepaper </div> </Button> <Button size="md"> <div className="flex items-center gap-2"> <BsGithub /> Audit </div> </Button> </div> </div> </div> </div> )} </> ); }; export default Header;