import View from '@/views/Views' import React, { useEffect, useState } from 'react' import { useLocation, Link } from 'react-router-dom' import { FaFacebook, FaTwitter, FaLinkedin, FaInstagram } from 'react-icons/fa'; import { LuMenu, LuX, LuHouse, LuInfo, LuBriefcase, LuPackage, LuBookOpen, LuMonitorPlay, LuPhone, LuMapPin, LuMail, } from 'react-icons/lu'; import Logo from '@/views/public/Logo' import { ROUTES_ENUM } from '@/routes/route.constant' import { useLocalization } from '@/utils/hooks/useLocalization' import LanguageSelector from '../template/LanguageSelector' import Demo from '@/views/public/Demo' import { ScrollContext } from '@/contexts/ScrollContext' interface NavLink { resourceKey?: string name: string path?: string action?: () => void icon?: React.ComponentType } const PublicLayout = () => { const location = useLocation() const { translate } = useLocalization() const [isOpen, setIsOpen] = useState(false) const [scrolled, setScrolled] = useState(false) const [isDemoOpen, setIsDemoOpen] = useState(false) const currentYear = new Date().getFullYear() useEffect(() => { window.scrollTo(0, 0) }, [location.pathname]) useEffect(() => { const handleScroll = () => { const isScrolled = window.scrollY > 10 if (isScrolled !== scrolled) { setScrolled(isScrolled) } } window.addEventListener('scroll', handleScroll) return () => window.removeEventListener('scroll', handleScroll) }, [scrolled]) const toggleMenu = () => setIsOpen(!isOpen) const navLinks: NavLink[] = [ { resourceKey: 'App.Home', name: translate('::App.Home'), path: ROUTES_ENUM.public.home, icon: LuHouse, }, { resourceKey: 'App.About', name: translate('::App.About'), path: ROUTES_ENUM.public.about, icon: LuInfo, }, { resourceKey: 'App.Services', name: translate('::App.Services'), path: ROUTES_ENUM.public.services, icon: LuBriefcase, }, { resourceKey: 'Public.nav.products', name: translate('::App.Orders'), path: ROUTES_ENUM.public.products, icon: LuPackage, }, { resourceKey: 'Public.nav.blog', name: translate('::App.BlogManagement'), path: ROUTES_ENUM.public.blog, icon: LuBookOpen, }, { resourceKey: 'App.Demos', name: translate('::App.Demos'), action: () => setIsDemoOpen(true), icon: LuMonitorPlay, }, { resourceKey: 'Public.nav.contact', name: translate('::App.Contact'), path: ROUTES_ENUM.public.contact, icon: LuPhone, }, { resourceKey: 'Public.nav.giris', name: translate('::Public.nav.giris'), path: ROUTES_ENUM.authenticated.login, }, ] const isLoginLink = (resourceKey?: string) => resourceKey === 'Public.nav.giris' const isActiveLink = (path?: string) => { if (!path) return false if (path === ROUTES_ENUM.public.home) return location.pathname === path return location.pathname.startsWith(path) } return (
{/* HEADER */}
{/* Desktop Navigation */} {/* Right side: Language + Login */}
{navLinks .filter((l) => isLoginLink(l.resourceKey)) .map((link) => link.path ? ( {link.name} ) : null, )}
{/* Mobile Menu Button */}
{/* Mobile Navigation */}

{translate('::Public.footer.companyInfo')}

{/* Quick Links */}

{translate('::Public.footer.quickLinksTitle')}

  • {translate('::App.Home')}
  • {translate('::App.Orders')}
  • {translate('::App.Services')}
  • {translate('::App.About')}
  • {translate('::App.BlogManagement')}
  • {translate('::App.Contact')}
{/* Services */}

{translate('::Public.services.title')}

  • {translate('::Public.services.software.title')}
  • {translate('::Public.services.web.title')}
  • {translate('::Public.services.mobile.title')}
  • {translate('::Public.services.database.title')}
  • {translate('::Public.services.integration.title')}
  • {translate('::Public.services.consulting.title')}
{/* Contact Info */}

{translate('::App.Contact')}

© {currentYear} Sözsoft Platform. {translate('::Public.footer.copyright')}

  • {translate('::Public.footer.privacyPolicy')}
  • {translate('::Public.footer.termsOfUse')}
{/* Demo Modal */} setIsDemoOpen(false)} />
) } export default PublicLayout