import View from '@/views/Views' import React, { useEffect, useState } from 'react' import { useLocation, Link, useNavigate } from 'react-router-dom' import { FaFacebook, FaTwitter, FaLinkedin, FaInstagram } from 'react-icons/fa' import { LuMenu, LuX, LuHouse, LuInfo, LuBriefcase, LuPackage, LuBookOpen, LuPhone, LuMapPin, LuMail, LuMoon, LuSun, } 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' import { DemoProvider } from '@/contexts/DemoContext' import useDarkMode from '@/utils/hooks/useDarkmode' import { THEME_ENUM } from '@/constants/theme.constant' import { Button } from '../ui' interface NavLink { resourceKey?: string name: string path?: string action?: () => void icon?: React.ComponentType } const PublicLayout = () => { const location = useLocation() const navigate = useNavigate() const { translate } = useLocalization() const [isDarkMode, setThemeMode] = useDarkMode() 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.Platform.Orders'), path: ROUTES_ENUM.public.products, icon: LuPackage, }, { resourceKey: 'Public.nav.blog', name: translate('::App.Platform.BlogManagement'), path: ROUTES_ENUM.public.blog, icon: LuBookOpen, }, { resourceKey: 'Public.nav.contact', name: translate('::App.Contact'), path: ROUTES_ENUM.public.contact, icon: LuPhone, }, { resourceKey: 'App.PublicNav.Giris', name: translate('::App.PublicNav.Giris'), path: ROUTES_ENUM.authenticated.login, }, ] const isLoginLink = (resourceKey?: string) => resourceKey === 'App.PublicNav.Giris' const demoButton = (className = '', onClick?: () => void) => ( ) const themeToggle = (
) const isActiveLink = (path?: string) => { if (!path) return false if (path === ROUTES_ENUM.public.home) return location.pathname === path return location.pathname.startsWith(path) } return ( setIsDemoOpen(true) }}>
{/* HEADER */}
{/* Desktop / tablet navigation */}
{demoButton('rounded-lg')}
{themeToggle}
{navLinks .filter((l) => isLoginLink(l.resourceKey)) .map((link) => link.path ? ( ) : null, )}
{/* Mobile Menu Button */}
{/* Mobile Navigation */}

{translate('::App.PublicFooter.CompanyInfo')}

{/* Quick Links */}

{translate('::App.PublicFooter.QuickLinksTitle')}

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

{translate('::App.PublicServices.ServicesTitle')}

  • {translate('::App.ServicesSoftware.SoftwareTitle')}
  • {translate('::App.BlogCategories.Webdev')}
  • {translate('::App.ServicesMobile.MobileTitle')}
  • {translate('::App.ServicesDatabase.DatabaseTitle')}
  • {translate('::App.ServicesIntegration.IntegrationTitle')}
  • {translate('::App.ServicesConsulting.ConsultingTitle')}
{/* Contact Info */}

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

© {currentYear} Sözsoft Platform. {translate('::App.PublicFooter.Copyright')}

  • {translate('::App.PublicFooter.PrivacyPolicy')}
  • {translate('::App.PublicFooter.TermsOfUse')}
{/* Demo Modal */} setIsDemoOpen(false)} />
) } export default PublicLayout