Untitled

Anonymous
plain_text
04/16/2026 5:31 PM
20.0 KB
11
Indexable
import React, { useEffect } from 'react';
import { BrowserRouter as Router, Routes, Route, useLocation } from 'react-router-dom';
import { Toaster } from 'sonner';
import { LanguageProvider, useLanguage } from '@/contexts/LanguageContext.jsx';
import Header from '@/components/Header.jsx';
import NewFooterDesign from '@/components/NewFooterDesign.jsx';
import NewFooterDesignEN from '@/components/NewFooterDesignEN.jsx';
import NewBookingButton from '@/components/NewBookingButton.jsx';
import ScrollToTop from '@/components/ScrollToTop.jsx';
import PageTransition from '@/components/PageTransition.jsx';

// Pages (FR)
import HomePage from '@/pages/HomePage.jsx';
import AboutPage from '@/pages/AboutPage.jsx';
import ServicesPage from '@/pages/ServicesPage.jsx';
import ContactPage from '@/pages/ContactPage.jsx';
import DentalTourismPage from '@/pages/DentalTourismPage.jsx';
import RabatTourismPage from '@/pages/RabatTourismPage.jsx';
import OffersPage from '@/pages/OffersPage.jsx';
import NewsPage from '@/pages/NewsPage.jsx';
import NewsDetailPage from '@/pages/NewsDetailPage.jsx';
import NewsDebugPage from '@/pages/NewsDebugPage.jsx';

// Service Detail Pages (FR)
import ImplantologiePage from '@/pages/ImplantologiePage.jsx';
import EsthetiqueDentairePage from '@/pages/EsthetiqueDentairePage.jsx';
import OrthodontiePage from '@/pages/OrthodontiePage.jsx';
import ParodontologiePage from '@/pages/ParodontologiePage.jsx';
import ProthesesDentairesPage from '@/pages/ProthesesDentairesPage.jsx';
import BlanchimentDentairePage from '@/pages/BlanchimentDentairePage.jsx';
import UrgencesDentairesPage from '@/pages/UrgencesDentairesPage.jsx';
import RadiographieDentairePage from '@/pages/RadiographieDentairePage.jsx';
import RadiographiePage from '@/pages/RadiographiePage.jsx';
import ChirurgieBuccalePage from '@/pages/ChirurgieBuccalePage.jsx';
import PedodontiePage from '@/pages/PedodontiePage.jsx';
import EndodontiePage from '@/pages/EndodontiePage.jsx';
import ProtheseEsthetiquePage from '@/pages/ProtheseEsthetiquePage.jsx';
import SoinDentairePage from '@/pages/SoinDentairePage.jsx';
import SoinDentaireEtEndodontie from '@/pages/SoinDentaireEtEndodontie.jsx';
import SoinsInclusifs from '@/pages/SoinsInclusifs.jsx';

// Pages (EN)
import HomePageEN from '@/pages/HomePageEN.jsx';
import AboutPageEN from '@/pages/AboutPageEN.jsx';
import ServicesPageEN from '@/pages/ServicesPageEN.jsx';
import ContactPageEN from '@/pages/ContactPageEN.jsx';
import DentalTourismPageEN from '@/pages/DentalTourismPageEN.jsx';
import RabatTourismPageEN from '@/pages/RabatTourismPageEN.jsx';
import OffersPageEN from '@/pages/OffersPageEN.jsx';
import NewsPageEN from '@/pages/NewsPageEN.jsx';
import NewsDetailPageEN from '@/pages/NewsDetailPageEN.jsx';

// Service Detail Pages (EN)
import DentalImplantPageEN from '@/pages/DentalImplantPageEN.jsx';
import CosmeticDentistryPageEN from '@/pages/CosmeticDentistryPageEN.jsx';
import OrthodonticsPageEN from '@/pages/OrthodonticsPageEN.jsx';
import PediatricDentistryPageEN from '@/pages/PediatricDentistryPageEN.jsx';
import PeriodontalPageEN from '@/pages/PeriodontalPageEN.jsx';
import RootCanalPageEN from '@/pages/RootCanalPageEN.jsx';
import DentalCleaningPageEN from '@/pages/DentalCleaningPageEN.jsx';
import EmergencyDentistryPageEN from '@/pages/EmergencyDentistryPageEN.jsx';
import OralSurgeryPageEN from '@/pages/OralSurgeryPageEN.jsx';
import DentalRadiographyPageEN from '@/pages/DentalRadiographyPageEN.jsx';
import DentalProthesesPageEN from '@/pages/DentalProthesesPageEN.jsx';
import ToothWhiteningPageEN from '@/pages/ToothWhiteningPageEN.jsx';
import AestheticProsthesesPageEN from '@/pages/AestheticProsthesesPageEN.jsx';
import DentalCareAndEndodonticsPageEN from '@/pages/DentalCareAndEndodonticsPageEN.jsx';
import ComprehensiveCarePageEN from '@/pages/ComprehensiveCarePageEN.jsx';

// Legal Pages
import PrivacyPage from '@/pages/PrivacyPage.jsx';
import TermsPage from '@/pages/TermsPage.jsx';
import SitemapPage from '@/pages/SitemapPage.jsx';

const AppLayout = () => {
  const location = useLocation();
  const { language, setLang } = useLanguage();
  const isDentalTourismPage = location.pathname === '/tourisme-dentaire-maroc' || location.pathname === '/dental-tourism' || location.pathname === '/en/tourisme-dentaire-maroc' || location.pathname === '/en/dental-tourism';
  const isContactPage = location.pathname === '/contact' || location.pathname === '/en/contact';
  const isEnglishRoute = location.pathname.startsWith('/en');

  useEffect(() => {
    const routeLanguage = isEnglishRoute ? 'en' : 'fr';
    if (language !== routeLanguage) {
      setLang(routeLanguage);
    }
  }, [isEnglishRoute, language, setLang]);

  return (
    <div className="flex flex-col min-h-screen bg-background text-foreground font-sans antialiased selection:bg-primary/20 selection:text-primary">
      <Header />
      <main className="flex-grow flex flex-col relative z-0 mt-[74px] md:mt-[82px] lg:mt-[92px]">
        <Routes>
          {/* French Routes */}
          <Route path="/" element={<PageTransition><HomePage /></PageTransition>} />
          <Route path="/about" element={<PageTransition><AboutPage /></PageTransition>} />
          <Route path="/nos-services" element={<PageTransition><ServicesPage /></PageTransition>} />
          <Route path="/services" element={<PageTransition><ServicesPage /></PageTransition>} />
          <Route path="/contact" element={<PageTransition><ContactPage /></PageTransition>} />
          <Route path="/dental-tourism" element={<PageTransition><DentalTourismPage /></PageTransition>} />
          <Route path="/tourisme-dentaire-maroc" element={<PageTransition><DentalTourismPage /></PageTransition>} />
          <Route path="/rabat-tourism" element={<PageTransition><RabatTourismPage /></PageTransition>} />
          <Route path="/offers" element={<PageTransition><OffersPage /></PageTransition>} />
          <Route path="/actualites" element={<PageTransition><NewsPage /></PageTransition>} />
          <Route path="/actualites/:id" element={<PageTransition><NewsDetailPage /></PageTransition>} />
          <Route path="/news" element={<PageTransition><NewsPage /></PageTransition>} />
          <Route path="/news/:id" element={<PageTransition><NewsDetailPage /></PageTransition>} />
          <Route path="/news-debug" element={<PageTransition><NewsDebugPage /></PageTransition>} />

          {/* English Routes */}
          <Route path="/en" element={<PageTransition><HomePageEN /></PageTransition>} />
          <Route path="/en/about" element={<PageTransition><AboutPageEN /></PageTransition>} />
          <Route path="/en/services" element={<PageTransition><ServicesPageEN /></PageTransition>} />
          <Route path="/en/nos-services" element={<PageTransition><ServicesPageEN /></PageTransition>} />
          <Route path="/en/contact" element={<PageTransition><ContactPageEN /></PageTransition>} />
          <Route path="/en/dental-tourism" element={<PageTransition><DentalTourismPageEN /></PageTransition>} />
          <Route path="/en/tourisme-dentaire-maroc" element={<PageTransition><DentalTourismPageEN /></PageTransition>} />
          <Route path="/en/rabat-tourism" element={<PageTransition><RabatTourismPageEN /></PageTransition>} />
          <Route path="/en/offers" element={<PageTransition><OffersPageEN /></PageTransition>} />
          <Route path="/en/news" element={<PageTransition><NewsPageEN /></PageTransition>} />
          <Route path="/en/actualites" element={<PageTransition><NewsPageEN /></PageTransition>} />
          <Route path="/en/news/:id" element={<PageTransition><NewsDetailPageEN /></PageTransition>} />
          <Route path="/en/actualites/:id" element={<PageTransition><NewsDetailPageEN /></PageTransition>} />

          {/* Service Detail Routes (FR) */}
          <Route path="/implantologie" element={<PageTransition><ImplantologiePage /></PageTransition>} />
          <Route path="/esthetique-dentaire" element={<PageTransition><EsthetiqueDentairePage /></PageTransition>} />
          <Route path="/orthodontie" element={<PageTransition><OrthodontiePage /></PageTransition>} />
          <Route path="/parodontologie" element={<PageTransition><ParodontologiePage /></PageTransition>} />
          <Route path="/protheses-dentaires" element={<PageTransition><ProthesesDentairesPage /></PageTransition>} />
          <Route path="/blanchiment-dentaire" element={<PageTransition><BlanchimentDentairePage /></PageTransition>} />
          <Route path="/urgences-dentaires" element={<PageTransition><UrgencesDentairesPage /></PageTransition>} />
          <Route path="/radiographie-dentaire" element={<PageTransition><RadiographieDentairePage /></PageTransition>} />
          <Route path="/radiographie" element={<PageTransition><RadiographiePage /></PageTransition>} />
          <Route path="/chirurgie-buccale" element={<PageTransition><ChirurgieBuccalePage /></PageTransition>} />
          <Route path="/pedodontie" element={<PageTransition><PedodontiePage /></PageTransition>} />
          <Route path="/endodontie" element={<PageTransition><EndodontiePage /></PageTransition>} />
          <Route path="/prothese-esthetique" element={<PageTransition><ProtheseEsthetiquePage /></PageTransition>} />
          <Route path="/soin-dentaire" element={<PageTransition><SoinDentairePage /></PageTransition>} />
          <Route path="/soin-dentaire-et-endodontie" element={<PageTransition><SoinDentaireEtEndodontie /></PageTransition>} />
          <Route path="/soins-inclusifs" element={<PageTransition><SoinsInclusifs /></PageTransition>} />

          {/* Service Detail Routes (EN) */}
          <Route path="/en/services/dental-implants" element={<PageTransition><DentalImplantPageEN /></PageTransition>} />
          <Route path="/en/implantologie" element={<PageTransition><DentalImplantPageEN /></PageTransition>} />
          <Route path="/en/services/cosmetic-dentistry" element={<PageTransition><CosmeticDentistryPageEN /></PageTransition>} />
          <Route path="/en/esthetique-dentaire" element={<PageTransition><CosmeticDentistryPageEN /></PageTransition>} />
          <Route path="/en/services/orthodontics" element={<PageTransition><OrthodonticsPageEN /></PageTransition>} />
          <Route path="/en/orthodontie" element={<PageTransition><OrthodonticsPageEN /></PageTransition>} />
          <Route path="/en/services/pediatric-dentistry" element={<PageTransition><PediatricDentistryPageEN /></PageTransition>} />
          <Route path="/en/pedodontie" element={<PageTransition><PediatricDentistryPageEN /></PageTransition>} />
          <Route path="/en/services/periodontal" element={<PageTransition><PeriodontalPageEN /></PageTransition>} />
          <Route path="/en/parodontologie" element={<PageTransition><PeriodontalPageEN /></PageTransition>} />
          <Route path="/en/services/root-canal" element={<PageTransition><RootCanalPageEN /></PageTransition>} />
          <Route path="/en/endodontie" element={<PageTransition><RootCanalPageEN /></PageTransition>} />
          <Route path="/en/services/dental-cleaning" element={<PageTransition><DentalCleaningPageEN /></PageTransition>} />
          <Route path="/en/soin-dentaire" element={<PageTransition><DentalCleaningPageEN /></PageTransition>} />
          <Route path="/en/services/emergency-dentistry" element={<PageTransition><EmergencyDentistryPageEN /></PageTransition>} />
          <Route path="/en/urgences-dentaires" element={<PageTransition><EmergencyDentistryPageEN /></PageTransition>} />
          <Route path="/en/services/oral-surgery" element={<PageTransition><OralSurgeryPageEN /></PageTransition>} />
          <Route path="/en/chirurgie-buccale" element={<PageTransition><OralSurgeryPageEN /></PageTransition>} />
          <Route path="/en/services/dental-radiography" element={<PageTransition><DentalRadiographyPageEN /></PageTransition>} />
          <Route path="/en/radiographie" element={<PageTransition><DentalRadiographyPageEN /></PageTransition>} />
          <Route path="/en/services/dental-prostheses" element={<PageTransition><DentalProthesesPageEN /></PageTransition>} />
          <Route path="/en/protheses-dentaires" element={<PageTransition><DentalProthesesPageEN /></PageTransition>} />
          <Route path="/en/services/tooth-whitening" element={<PageTransition><ToothWhiteningPageEN /></PageTransition>} />
          <Route path="/en/blanchiment-dentaire" element={<PageTransition><ToothWhiteningPageEN /></PageTransition>} />
          <Route path="/en/services/aesthetic-prostheses" element={<PageTransition><AestheticProsthesesPageEN /></PageTransition>} />
          <Route path="/en/prothese-esthetique" element={<PageTransition><AestheticProsthesesPageEN /></PageTransition>} />
          <Route path="/en/services/dental-care-and-endodontics" element={<PageTransition><DentalCareAndEndodonticsPageEN /></PageTransition>} />
          <Route path="/en/soin-dentaire-et-endodontie" element={<PageTransition><DentalCareAndEndodonticsPageEN /></PageTransition>} />
          <Route path="/en/services/comprehensive-care" element={<PageTransition><ComprehensiveCarePageEN /></PageTransition>} />
          <Route path="/en/soins-inclusifs" element={<PageTransition><ComprehensiveCarePageEN /></PageTransition>} />

          {/* Legal Routes */}
          <Route path="/privacy" element={<PageTransition><PrivacyPage /></PageTransition>} />
          <Route path="/terms" element={<PageTransition><TermsPage /></PageTransition>} />
          <Route path="/sitemap" element={<PageTransition><SitemapPage /></PageTransition>} />

          {/* 404 Catch-all */}
          <Route path="*" element={
            <PageTransition>
              <div className="flex-1 flex flex-col items-center justify-center py-32 px-4 text-center">
                <h1 className="text-6xl font-bold text-primary mb-4">404</h1>
                <h2 className="text-2xl font-semibold mb-6">{isEnglishRoute ? "Page Not Found" : "Page introuvable"}</h2>
                <p className="text-muted-foreground mb-8 max-w-md">
                  {isEnglishRoute ? "The page you are looking for does not exist or has been moved." : "La page que vous recherchez n'existe pas ou a été déplacée."}
                </p>
                <a href={isEnglishRoute ? "/en" : "/"} className="inline-flex items-center justify-center px-8 py-3 bg-primary text-primary-foreground rounded-full font-medium hover:bg-primary/90 transition-colors">
                  {isEnglishRoute ? "Back to Home" : "Retour à l'accueil"}
                </a>
              </div>
            </PageTransition>
          } />
        </Routes>
      </main>

      {!isContactPage && (isEnglishRoute ? <NewFooterDesignEN /> : <NewFooterDesign />)}

      {!isDentalTourismPage && <NewBookingButton />}
    </div>
  );
};

function App() {
  return (
    <LanguageProvider>
      <Router>
        <ScrollToTop />
        <AppLayout />
        <Toaster position="top-center" richColors />
      </Router>
    </LanguageProvider>
  );
}

export default App;
Editor is loading...
Leave a Comment