import Footer from 'Components/layout/Footer/Footer' import Header from 'Components/layout/Header' import Route404 from 'Components/Route404' import { useIsEmbedded } from 'Components/utils/embeddedContext' import { engineFactory, EngineProvider, Rules, SituationProvider, } from 'Components/utils/EngineContext' import { SitePathsContext } from 'Components/utils/SitePathsContext' import { Container, Spacing } from 'DesignSystem/layout' import 'iframe-resizer' import { StrictMode, useContext, useMemo } from 'react' import { Helmet } from 'react-helmet-async' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' import { Redirect, Route, Switch } from 'react-router-dom' import { configSituationSelector, situationSelector, } from 'Selectors/simulationSelectors' import Accessibilité from './pages/Accessibilité' import Budget from './pages/Budget/Budget' import Créer from './pages/Creer' import IntegrationTest from './pages/Dev/IntegrationTest' import Personas from './pages/Dev/Personas' import Sitemap from './pages/Dev/Sitemap' import Documentation from './pages/Documentation' import Gérer from './pages/Gerer' import Iframes from './pages/Iframes' import Integration from './pages/integration/index' import Landing from './pages/Landing/Landing' import Nouveautés from './pages/Nouveautes/Nouveautes' import Simulateurs from './pages/Simulateurs' import Stats from './pages/Stats/LazyStats' import Provider, { ProviderProps } from './Provider' import redirects from './redirects' import { constructLocalizedSitePath } from './sitePaths' import { retrievePersistedInFranceApp, setupInFranceAppPersistence, } from './storage/persistInFranceApp' import { setupSimulationPersistence } from './storage/persistSimulation' type RootProps = { basename: ProviderProps['basename'] rules: Rules } export default function Root({ basename, rules }: RootProps) { const { language } = useTranslation().i18n const paths = constructLocalizedSitePath(language as 'fr' | 'en') const engine = useMemo(() => engineFactory(rules), [rules]) return ( { setupInFranceAppPersistence(store) setupSimulationPersistence(store) }} initialStore={{ inFranceApp: retrievePersistedInFranceApp(), }} > ) } const Router = () => { const userSituation = useSelector(situationSelector) const configSituation = useSelector(configSituationSelector) const situation = useMemo( () => ({ ...configSituation, ...userSituation, }), [configSituation, userSituation] ) return ( {/* Removes trailing slashes */} ( )} /> ) } const App = () => { const { t } = useTranslation() const sitePaths = useContext(SitePathsContext) const isEmbedded = useIsEmbedded() return ( <> {!isEmbedded &&
} {/* Passing location down to prevent update blocking */} {redirects} {!isEmbedded &&