webapp/src/renderer/_default.page.client.tsx
Ilya Y 784bb435c3
Feature/lint (#317)
* prettier

---------

Co-authored-by: Igor Lobanov <igor.lobanov@onetwotrip.com>
2023-11-14 18:10:00 +03:00

64 lines
1.6 KiB
TypeScript

import type { PageContext } from './types'
import type { PageContextBuiltInClientWithClientRouting } from 'vike/types'
import * as Sentry from '@sentry/browser'
import i18next from 'i18next'
import HttpApi from 'i18next-http-backend'
import ICU from 'i18next-icu'
import { hydrate } from 'solid-js/web'
import { App } from '../components/App'
import { initRouter } from '../stores/router'
import { SENTRY_DSN } from '../utils/config'
import { resolveHydrationPromise } from '../utils/hydrationPromise'
let layoutReady = false
export const render = async (pageContext: PageContextBuiltInClientWithClientRouting & PageContext) => {
const { lng, pageProps, is404 } = pageContext
if (is404) {
initRouter('/404')
} else {
const { pathname, search } = window.location
const searchParams = Object.fromEntries(new URLSearchParams(search))
initRouter(pathname, searchParams)
}
if (SENTRY_DSN) {
Sentry.init({
dsn: SENTRY_DSN,
})
}
// eslint-disable-next-line import/no-named-as-default-member
await i18next
.use(HttpApi)
.use(ICU)
.init({
// debug: true,
supportedLngs: ['ru', 'en'],
fallbackLng: lng,
lng,
load: 'languageOnly',
})
const isIOSorMacOSorAndroid = /iphone|ipad|ipod|macintosh|android/i.test(navigator.userAgent)
if (!isIOSorMacOSorAndroid) {
const htmlEl = document.querySelector('html')
htmlEl.dataset.customScroll = 'on'
}
const content = document.querySelector('#root')
if (!layoutReady) {
hydrate(() => <App {...pageProps} />, content)
layoutReady = true
}
}
export const onHydrationEnd = () => {
resolveHydrationPromise()
}