From 24d65547b1104d7de43ef6e4be36ef51423927e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96zt=C3=BCrk?= Date: Mon, 28 Jul 2025 23:16:12 +0300 Subject: [PATCH] =?UTF-8?q?company=20sadele=C5=9Ftirme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- company/src/App.tsx | 2 +- company/src/components/home/CallToAction.tsx | 27 -- company/src/components/home/Features.tsx | 84 ---- company/src/components/home/Hero.tsx | 69 --- company/src/components/home/Solutions.tsx | 70 --- company/src/components/layout/Footer.tsx | 156 ------- company/src/components/layout/Header.tsx | 159 ------- company/src/components/layout/Layout.tsx | 29 -- company/src/pages/Home.tsx | 148 ++++++- company/src/pages/Layout.tsx | 415 ++++++++++++++++++ .../src/{components/layout => pages}/Logo.tsx | 0 ui/src/components/layouts/Layouts.tsx | 10 +- 12 files changed, 560 insertions(+), 609 deletions(-) delete mode 100644 company/src/components/home/CallToAction.tsx delete mode 100644 company/src/components/home/Features.tsx delete mode 100644 company/src/components/home/Hero.tsx delete mode 100644 company/src/components/home/Solutions.tsx delete mode 100644 company/src/components/layout/Footer.tsx delete mode 100644 company/src/components/layout/Header.tsx delete mode 100644 company/src/components/layout/Layout.tsx create mode 100644 company/src/pages/Layout.tsx rename company/src/{components/layout => pages}/Logo.tsx (100%) diff --git a/company/src/App.tsx b/company/src/App.tsx index 3b32f5b5..5c5a475a 100644 --- a/company/src/App.tsx +++ b/company/src/App.tsx @@ -1,7 +1,6 @@ import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { Toaster } from 'react-hot-toast'; -import Layout from './components/layout/Layout'; import Home from './pages/Home'; import Products from './pages/Products'; import Services from './pages/Services'; @@ -13,6 +12,7 @@ import NotFound from './pages/NotFound'; import { LanguageProvider } from './context/LanguageContext'; import { useState } from 'react'; import Demo from './pages/Demo'; +import Layout from './pages/Layout'; // Create a client const queryClient = new QueryClient({ diff --git a/company/src/components/home/CallToAction.tsx b/company/src/components/home/CallToAction.tsx deleted file mode 100644 index 64926d18..00000000 --- a/company/src/components/home/CallToAction.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { Link } from 'react-router-dom'; -import { useLanguage } from '../../context/LanguageContext'; - -const CallToAction: React.FC = () => { - const { t } = useLanguage(); - - return ( -
-
-
-

- {t('common.getStarted')} -

-

- {t('common.contact')} -

- - {t('common.learnMore')} - -
-
-
- ); -}; - -export default CallToAction; \ No newline at end of file diff --git a/company/src/components/home/Features.tsx b/company/src/components/home/Features.tsx deleted file mode 100644 index 317c30d7..00000000 --- a/company/src/components/home/Features.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import React from 'react'; -import { Zap, Users, BarChart, Calendar, BookOpen, CreditCard, MessageSquare, Phone, Shield } from 'lucide-react'; -import { useLanguage } from '../../context/LanguageContext'; - -const Features: React.FC = () => { - const { t } = useLanguage(); - - const features = [ - { - icon: , - title: t('features.reliable'), - description: t('features.reliable.desc') - }, - { - icon: , - title: t('features.rapid'), - description: t('features.rapid.desc') - }, - { - icon: , - title: t('features.expert'), - description: t('features.expert.desc') - }, - { - icon: , - title: t('features.muhasebe'), - description: t('features.muhasebe.desc') - }, - { - icon: , - title: t('features.iletisim'), - description: t('features.iletisim.desc'), - }, - { - icon: , - title: t('features.mobil'), - description: t('features.mobil.desc'), - }, - { - icon: , - title: t('features.scalable'), - description: t('features.scalable.desc') - }, - { - icon: , - title: t('features.guvenlik'), - description: t('features.guvenlik.desc'), - } - ]; - - return ( -
-
-
-

- {t('features.title')} -

-

- {t('features.subtitle')} -

-
- -
- {features.map((feature, index) => ( -
-
{feature.icon}
-

- {feature.title} -

-

- {feature.description} -

-
- ))} -
-
-
- ); -}; - -export default Features; \ No newline at end of file diff --git a/company/src/components/home/Hero.tsx b/company/src/components/home/Hero.tsx deleted file mode 100644 index b74c4ab6..00000000 --- a/company/src/components/home/Hero.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import React from 'react'; -import { ArrowRight, Code, Globe2, Cpu, Calendar, Users, Shield } from 'lucide-react'; -import { Link } from 'react-router-dom'; -import { useLanguage } from '../../context/LanguageContext'; - -const Hero: React.FC = () => { - const { t } = useLanguage(); - - return ( -
-
-
- -
-
-

- {t('hero.title')} -

- -

- {t('hero.subtitle')} -

- -
- - {t('hero.cta.consultation')} - - - - {t('hero.cta.discover')} - -
- -
-
- -

{t('hero.service1.title')}

-

{t('hero.service1.desc')}

-
- -
- -

{t('hero.service2.title')}

-

{t('hero.service2.desc')}

-
- -
- -

{t('hero.service3.title')}

-

{t('hero.service3.desc')}

-
-
-
-
-
- ); -}; - -export default Hero; \ No newline at end of file diff --git a/company/src/components/home/Solutions.tsx b/company/src/components/home/Solutions.tsx deleted file mode 100644 index b3b184e7..00000000 --- a/company/src/components/home/Solutions.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import React from 'react'; -import { Monitor, Smartphone, Server, Database } from 'lucide-react'; -import { useLanguage } from '../../context/LanguageContext'; - -const Solutions: React.FC = () => { - const { t } = useLanguage(); - - const solutions = [ - { - icon: , - title: t('solutions.web.title'), - description: t('solutions.web.desc'), - color: 'bg-blue-600' - }, - { - icon: , - title: t('solutions.mobile.title'), - description: t('solutions.mobile.desc'), - color: 'bg-purple-600' - }, - { - icon: , - title: t('solutions.custom.title'), - description: t('solutions.custom.desc'), - color: 'bg-green-600' - }, - { - icon: , - title: t('solutions.database.title'), - description: t('solutions.database.desc'), - color: 'bg-red-600' - } - ]; - - return ( -
-
-
-

- {t('solutions.title')} -

-

- {t('solutions.subtitle')} -

-
- -
- {solutions.map((solution, index) => ( -
-
-
{solution.icon}
-

- {solution.title} -

-

- {solution.description} -

-
-
- ))} -
-
-
- ); -}; - -export default Solutions; \ No newline at end of file diff --git a/company/src/components/layout/Footer.tsx b/company/src/components/layout/Footer.tsx deleted file mode 100644 index db40cd03..00000000 --- a/company/src/components/layout/Footer.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import React from 'react'; -import { Mail, Phone, MapPin, Facebook, Twitter, Linkedin, Instagram } from 'lucide-react'; -import Logo from './Logo'; -import { Link } from 'react-router-dom'; -import { useLanguage } from '../../context/LanguageContext'; - -const Footer: React.FC = () => { - const { t } = useLanguage(); - const currentYear = new Date().getFullYear(); - - return ( -
-
-
- {/* Company Info */} -
- -

- {t('footer.companyInfo')} -

- -
- - {/* Quick Links */} -
-

{t('footer.quickLinksTitle')}

-
    -
  • - {t('nav.home')} -
  • -
  • - {t('nav.products')} -
  • -
  • - {t('nav.services')} -
  • -
  • - {t('nav.about')} -
  • -
  • - {t('nav.blog')} -
  • -
  • - {t('nav.contact')} -
  • -
-
- - {/* Services */} -
-

{t('footer.servicesTitle')}

-
    -
  • - - {t('services.software.title')} - -
  • -
  • - - {t('services.web.title')} - -
  • -
  • - - {t('services.mobile.title')} - -
  • -
  • - - {t('services.database.title')} - -
  • -
  • - - {t('services.integration.title')} - -
  • -
  • - - {t('services.consulting.title')} - -
  • -
-
- - {/* Contact Info */} -
-

{t('nav.contact')}

- -
-
- -
-
-

- © {currentYear} Sözsoft. {t('footer.copyright')} -

-
-
    -
  • - - {t('footer.privacyPolicy')} - -
  • -
  • - - {t('footer.termsOfUse')} - -
  • -
  • - - {t('footer.sitemap')} - -
  • -
-
-
-
-
-
- ); -}; - -export default Footer; diff --git a/company/src/components/layout/Header.tsx b/company/src/components/layout/Header.tsx deleted file mode 100644 index bba305d7..00000000 --- a/company/src/components/layout/Header.tsx +++ /dev/null @@ -1,159 +0,0 @@ -import React, { useState, useEffect } from "react"; -import { - Menu, - X, - Globe, - Home, - Info, - Package, - Briefcase, - BookOpen, - Phone, -} from "lucide-react"; -import Logo from "./Logo"; -import { Link, useNavigate } from "react-router-dom"; -import { useLanguage } from "../../context/LanguageContext"; - -interface HeaderProps { - openDemoModal: () => void; -} - -const Header: React.FC = ({ openDemoModal }) => { - const [isOpen, setIsOpen] = useState(false); - const [scrolled, setScrolled] = useState(false); - const { language, setLanguage, t } = useLanguage(); - const navigate = useNavigate(); - - 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 toggleLanguage = () => setLanguage(language === "en" ? "tr" : "en"); - - const navLinks = [ - { name: t("nav.home"), path: "/", icon: Home }, - { name: t("nav.about"), path: "/about", icon: Info }, - { name: t("nav.products"), path: "/products", icon: Package }, - { name: t("nav.services"), path: "/services", icon: Briefcase }, - { name: t("nav.blog"), path: "/blog", icon: BookOpen }, - { name: t("nav.demo"), action: openDemoModal, icon: Globe }, - { name: t("nav.contact"), path: "/contact", icon: Phone }, - { name: t("nav.giris"), path: import.meta.env.VITE_KURS_URL }, - ]; - - return ( -
-
- - - - - {/* Desktop Navigation */} - - - {/* Mobile Menu Button */} - -
- - {/* Mobile Navigation */} - {isOpen && ( -
-
- -
-
- )} -
- ); -}; - -export default Header; diff --git a/company/src/components/layout/Layout.tsx b/company/src/components/layout/Layout.tsx deleted file mode 100644 index 783b6fa0..00000000 --- a/company/src/components/layout/Layout.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import React, { useEffect } from 'react'; -import { useLocation } from 'react-router-dom'; -import Header from './Header'; -import Footer from './Footer'; - -interface LayoutProps { - children: React.ReactNode; - openDemoModal: () => void; -} - -const Layout: React.FC = ({ children, openDemoModal }) => { - const location = useLocation(); - - useEffect(() => { - window.scrollTo(0, 0); - }, [location.pathname]); - - return ( -
-
-
- {children} -
-
-
- ); -}; - -export default Layout; diff --git a/company/src/pages/Home.tsx b/company/src/pages/Home.tsx index 4a32223b..01cc2cac 100644 --- a/company/src/pages/Home.tsx +++ b/company/src/pages/Home.tsx @@ -1,18 +1,140 @@ -import React from "react"; -import Hero from "../components/home/Hero"; -import Features from "../components/home/Features"; -import Solutions from "../components/home/Solutions"; -import CallToAction from "../components/home/CallToAction"; +import React from 'react' +import { Link } from 'react-router-dom' +import { + ArrowRight, + Calendar, + Users, + Shield, + Monitor, + Smartphone, + Server, + Database, + BarChart, + BookOpen, + CreditCard, + MessageSquare, + Phone, +} from 'lucide-react' +import { useLanguage } from '../context/LanguageContext' const Home: React.FC = () => { + const { t } = useLanguage() + + const features = [ + { icon: , title: t('features.reliable'), description: t('features.reliable.desc') }, + { icon: , title: t('features.rapid'), description: t('features.rapid.desc') }, + { icon: , title: t('features.expert'), description: t('features.expert.desc') }, + { icon: , title: t('features.muhasebe'), description: t('features.muhasebe.desc') }, + { icon: , title: t('features.iletisim'), description: t('features.iletisim.desc') }, + { icon: , title: t('features.mobil'), description: t('features.mobil.desc') }, + { icon: , title: t('features.scalable'), description: t('features.scalable.desc') }, + { icon: , title: t('features.guvenlik'), description: t('features.guvenlik.desc') }, + ] + + const solutions = [ + { icon: , title: t('solutions.web.title'), description: t('solutions.web.desc'), color: 'bg-blue-600' }, + { icon: , title: t('solutions.mobile.title'), description: t('solutions.mobile.desc'), color: 'bg-purple-600' }, + { icon: , title: t('solutions.custom.title'), description: t('solutions.custom.desc'), color: 'bg-green-600' }, + { icon: , title: t('solutions.database.title'), description: t('solutions.database.desc'), color: 'bg-red-600' }, + ] + return (
- - - - -
- ); -}; -export default Home; + {/* Hero */} +
+
+
+ +
+
+

{t('hero.title')}

+

{t('hero.subtitle')}

+ +
+ + {t('hero.cta.consultation')} + + + {t('hero.cta.discover')} + +
+ +
+
+ +

{t('hero.service1.title')}

+

{t('hero.service1.desc')}

+
+
+ +

{t('hero.service2.title')}

+

{t('hero.service2.desc')}

+
+
+ +

{t('hero.service3.title')}

+

{t('hero.service3.desc')}

+
+
+
+
+
+ + {/* Features */} +
+
+
+

{t('features.title')}

+

{t('features.subtitle')}

+
+ +
+ {features.map((feature, i) => ( +
+
{feature.icon}
+

{feature.title}

+

{feature.description}

+
+ ))} +
+
+
+ + {/* Solutions */} +
+
+
+

{t('solutions.title')}

+

{t('solutions.subtitle')}

+
+ +
+ {solutions.map((s, i) => ( +
+
+
{s.icon}
+

{s.title}

+

{s.description}

+
+
+ ))} +
+
+
+ + {/* Call to Action */} +
+
+

{t('common.getStarted')}

+

{t('common.contact')}

+ + {t('common.learnMore')} + +
+
+ + ) +} + +export default Home diff --git a/company/src/pages/Layout.tsx b/company/src/pages/Layout.tsx new file mode 100644 index 00000000..2d6003d7 --- /dev/null +++ b/company/src/pages/Layout.tsx @@ -0,0 +1,415 @@ +import React, { useEffect, useState } from "react"; +import { useLocation, Link, useNavigate } from "react-router-dom"; +import { + Menu, + X, + Globe, + Home, + Info, + Package, + Briefcase, + BookOpen, + Phone, + Facebook, + Twitter, + Linkedin, + Instagram, + MapPin, + Mail, +} from "lucide-react"; +import { useLanguage } from "../context/LanguageContext"; +import Logo from "./Logo"; + +interface LayoutProps { + children: React.ReactNode; + openDemoModal: () => void; +} + +const Layout: React.FC = ({ children, openDemoModal }) => { + const location = useLocation(); + const { t, language, setLanguage } = useLanguage(); + const navigate = useNavigate(); + const [isOpen, setIsOpen] = useState(false); + const [scrolled, setScrolled] = 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 toggleLanguage = () => setLanguage(language === "en" ? "tr" : "en"); + + const navLinks = [ + { name: t("nav.home"), path: "/", icon: Home }, + { name: t("nav.about"), path: "/about", icon: Info }, + { name: t("nav.products"), path: "/products", icon: Package }, + { name: t("nav.services"), path: "/services", icon: Briefcase }, + { name: t("nav.blog"), path: "/blog", icon: BookOpen }, + { name: t("nav.demo"), action: openDemoModal, icon: Globe }, + { name: t("nav.contact"), path: "/contact", icon: Phone }, + { name: t("nav.giris"), path: import.meta.env.VITE_KURS_URL }, + ]; + + return ( +
+ {/* HEADER */} +
+
+ + + + + {/* Desktop Navigation */} + + + {/* Mobile Menu Button */} + +
+ + {/* Mobile Navigation */} + {isOpen && ( +
+
+ +
+
+ )} +
+ +
{children}
+ + +
+ ); +}; + +export default Layout; diff --git a/company/src/components/layout/Logo.tsx b/company/src/pages/Logo.tsx similarity index 100% rename from company/src/components/layout/Logo.tsx rename to company/src/pages/Logo.tsx diff --git a/ui/src/components/layouts/Layouts.tsx b/ui/src/components/layouts/Layouts.tsx index 1fd2e63b..977efa0d 100644 --- a/ui/src/components/layouts/Layouts.tsx +++ b/ui/src/components/layouts/Layouts.tsx @@ -13,6 +13,14 @@ import useAuth from '@/utils/hooks/useAuth' import useDirection from '@/utils/hooks/useDirection' import useLocale from '@/utils/hooks/useLocale' +export type LayoutType = + | typeof LAYOUT_TYPE_CLASSIC + | typeof LAYOUT_TYPE_MODERN + | typeof LAYOUT_TYPE_SIMPLE + | typeof LAYOUT_TYPE_STACKED_SIDE + | typeof LAYOUT_TYPE_DECKED + | typeof LAYOUT_TYPE_BLANK + const layouts = { [LAYOUT_TYPE_CLASSIC]: lazy(() => import('./ClassicLayout')), [LAYOUT_TYPE_MODERN]: lazy(() => import('./ModernLayout')), @@ -23,7 +31,7 @@ const layouts = { } const Layout = () => { - const layoutType = useStoreState((state) => state.theme.layout.type) + const layoutType = useStoreState((state) => state.theme.layout.type) as LayoutType const { authenticated } = useAuth()