import { ColorScheme as MantineColorScheme, MantineProvider, MantineTheme } from '@mantine/core'; import { ModalsProvider } from '@mantine/modals'; import { Notifications } from '@mantine/notifications'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import Consola from 'consola'; import { getCookie, setCookie } from 'cookies-next'; import dayjs from 'dayjs'; import locale from 'dayjs/plugin/localeData'; import utc from 'dayjs/plugin/utc'; import 'flag-icons/css/flag-icons.min.css'; import { GetServerSidePropsContext } from 'next'; import { Session } from 'next-auth'; import { getSession } from 'next-auth/react'; import { appWithTranslation } from 'next-i18next'; import { AppProps } from 'next/app'; import Script from 'next/script'; import { useEffect, useState } from 'react'; import 'video.js/dist/video-js.css'; import { CommonHead } from '~/components/layout/Meta/CommonHead'; import { ConfigProvider } from '~/config/provider'; import { env } from '~/env.js'; import { CustomSessionProvider } from '~/hooks/custom-session-provider'; import { ColorSchemeProvider } from '~/hooks/use-colorscheme'; import { modals } from '~/modals'; import { usePackageAttributesStore } from '~/tools/client/zustands/usePackageAttributesStore'; import { ColorTheme } from '~/tools/color'; import { getLanguageByCode } from '~/tools/language'; import { ServerSidePackageAttributesType, getServiceSidePackageAttributes, } from '~/tools/server/getPackageVersion'; import { theme } from '~/tools/server/theme/theme'; import { ConfigType } from '~/types/config'; import { api } from '~/utils/api'; import { colorSchemeParser } from '~/validations/user'; import { COOKIE_COLOR_SCHEME_KEY, COOKIE_LOCALE_KEY } from '../../data/constants'; import nextI18nextConfig from '../../next-i18next.config.js'; import '../styles/global.scss'; dayjs.extend(locale); dayjs.extend(utc); function App( this: any, props: AppProps<{ activeColorScheme: MantineColorScheme; environmentColorScheme: MantineColorScheme; packageAttributes: ServerSidePackageAttributesType; editModeEnabled: boolean; logoutUrl?: string; analyticsEnabled: boolean; config?: ConfigType; primaryColor?: MantineTheme['primaryColor']; secondaryColor?: MantineTheme['primaryColor']; primaryShade?: MantineTheme['primaryShade']; session: Session; configName?: string; locale: string; }> ) { const { Component, pageProps } = props; const analyticsEnabled = pageProps.analyticsEnabled ?? true; // TODO: make mapping from our locales to moment locales const language = getLanguageByCode(pageProps.session?.user?.language ?? 'en'); if (language.dayJsLocale) require(`dayjs/locale/${language.dayJsLocale}.js`); dayjs.locale(language.dayJsLocale); const [primaryColor, setPrimaryColor] = useState( props.pageProps.primaryColor ?? 'red' ); const [secondaryColor, setSecondaryColor] = useState( props.pageProps.secondaryColor ?? 'orange' ); const [primaryShade, setPrimaryShade] = useState( props.pageProps.primaryShade ?? 6 ); const colorTheme = { primaryColor, secondaryColor, setPrimaryColor, setSecondaryColor, primaryShade, setPrimaryShade, }; useEffect(() => { setPrimaryColor(props.pageProps.primaryColor ?? 'red'); setSecondaryColor(props.pageProps.secondaryColor ?? 'orange'); setPrimaryShade(props.pageProps.primaryShade ?? 6); return () => { setPrimaryColor('red'); setSecondaryColor('orange'); setPrimaryShade(6); }; }, [props.pageProps]); const { setInitialPackageAttributes } = usePackageAttributesStore(); useEffect(() => { setInitialPackageAttributes(props.pageProps.packageAttributes); }, []); return ( <> {pageProps.session && pageProps.session.user.language === 'cr' && ( <> )} {analyticsEnabled === true && (