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 && }
>
)
}