Files
sag24-website/src/App.jsx
striker 851dd6173b Комплексные улучшения: FAQ, форма, карта, WhatsApp/Telegram, SEO
- FloatingContacts: кнопки WhatsApp + Telegram (правый нижний угол)
- ScrollToTop: кнопка "наверх" (появляется после 400px скролла)
- FAQ секция: 6 вопросов с аккордеоном, id=faq в навбаре
- Hero: телефон под CTA кнопками
- Форма: поле телефона, реальная отправка (fetch FormSpree или mailto fallback)
- Яндекс.Карты embed в блоке контактов
- Navigation: убран дубль "Контакты" из links, добавлен FAQ
- img width/height на логотипах (антиCLS)
- JSON-LD: og-image.svg → .png, добавлен postalCode, уточнен streetAddress
- prerender.mjs: динамически обновляет хеш preload шрифта
- src/config.js: централизованный конфиг (WhatsApp, Telegram, form endpoint)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 05:54:19 +03:00

44 lines
1.2 KiB
JavaScript

import React, { useEffect, useState } from 'react'
import { LanguageProvider, useLanguage } from './contexts/LanguageContext.jsx'
import Navigation from './components/Navigation.jsx'
import Footer from './components/Footer.jsx'
import Home from './pages/Home.jsx'
import NotFound from './pages/NotFound.jsx'
import FloatingContacts from './components/FloatingContacts.jsx'
import ScrollToTop from './components/ScrollToTop.jsx'
function LangSync() {
const { lang } = useLanguage()
useEffect(() => {
document.documentElement.lang = lang
}, [lang])
return null
}
function Router() {
const [path, setPath] = useState(typeof window !== 'undefined' ? window.location.pathname : '/')
useEffect(() => {
const handler = () => setPath(window.location.pathname)
window.addEventListener('popstate', handler)
return () => window.removeEventListener('popstate', handler)
}, [])
const isHome = path === '/' || path === '/index.html'
return isHome ? <Home /> : <NotFound />
}
export default function App() {
return (
<LanguageProvider>
<LangSync />
<Navigation />
<main>
<Router />
</main>
<Footer />
<FloatingContacts />
<ScrollToTop />
</LanguageProvider>
)
}