2021-12-29 18:21:02 +01:00
|
|
|
import { SSRProvider } from '@react-aria/ssr'
|
2022-07-06 14:48:35 +02:00
|
|
|
import ReactDOMServer from 'react-dom/server'
|
2021-12-29 18:21:02 +01:00
|
|
|
import { FilledContext, HelmetProvider } from 'react-helmet-async'
|
2022-07-25 11:02:08 +02:00
|
|
|
import { StaticRouter } from 'react-router-dom/server'
|
2022-07-06 14:48:35 +02:00
|
|
|
import { ServerStyleSheet, StyleSheetManager } from 'styled-components'
|
2022-11-03 17:32:04 +01:00
|
|
|
|
2022-07-06 14:48:35 +02:00
|
|
|
import { AppEn } from './entry-en'
|
|
|
|
import { AppFr } from './entry-fr'
|
|
|
|
import i18next from './locales/i18n'
|
2021-12-29 18:21:02 +01:00
|
|
|
|
|
|
|
export function render(url: string, lang: 'fr' | 'en') {
|
|
|
|
const sheet = new ServerStyleSheet()
|
|
|
|
const helmetContext = {} as FilledContext
|
|
|
|
const App = lang === 'fr' ? AppFr : AppEn
|
2022-03-28 15:34:12 +02:00
|
|
|
i18next.changeLanguage(lang).catch((err) =>
|
|
|
|
// eslint-disable-next-line no-console
|
|
|
|
console.error(err)
|
|
|
|
)
|
2021-12-29 18:21:02 +01:00
|
|
|
|
2022-06-21 13:34:44 +02:00
|
|
|
const element = (
|
2022-01-31 08:28:31 +01:00
|
|
|
<HelmetProvider context={helmetContext}>
|
|
|
|
<SSRProvider>
|
2021-12-29 18:21:02 +01:00
|
|
|
<StyleSheetManager sheet={sheet.instance}>
|
|
|
|
<StaticRouter location={url}>
|
2022-07-25 11:02:08 +02:00
|
|
|
<App />
|
2021-12-29 18:21:02 +01:00
|
|
|
</StaticRouter>
|
|
|
|
</StyleSheetManager>
|
2022-01-31 08:28:31 +01:00
|
|
|
</SSRProvider>
|
|
|
|
</HelmetProvider>
|
2021-12-29 18:21:02 +01:00
|
|
|
)
|
|
|
|
|
2022-07-20 20:54:55 +02:00
|
|
|
// Render to initialize redux store (via useSimulationConfig)
|
2022-06-21 13:34:44 +02:00
|
|
|
ReactDOMServer.renderToString(element)
|
2022-07-20 20:54:55 +02:00
|
|
|
|
|
|
|
// Render with redux store configured
|
2022-06-21 13:34:44 +02:00
|
|
|
const html = ReactDOMServer.renderToString(element)
|
|
|
|
|
2021-12-29 18:21:02 +01:00
|
|
|
const styleTags = sheet.getStyleTags()
|
|
|
|
|
|
|
|
return { html, styleTags, helmet: helmetContext.helmet }
|
|
|
|
}
|