import { MobileOutlined, TwitterOutlined } from '@ant-design/icons' import { Button, Layout, notification, Result, Typography } from 'antd' import 'antd-country-phone-input/dist/index.css' import pwaInstallHandler from 'pwa-install-handler' import React, { lazy, Suspense, useEffect, useState } from 'react' import { useThemeSwitcher } from 'react-css-theme-switcher' import { Helmet } from 'react-helmet' import LoadingScreen from 'react-loading-screen' import { Redirect, Route, Switch, useLocation } from 'react-router-dom' import useSWR from 'swr' import useSWRImmutable from 'swr/immutable' import Footer from './pages/components/Footer' import Navbar from './pages/components/Navbar' import { fetcher } from './utils/Fetcher' const Startup = lazy( () => import(/* webpackChunkName: 'StartupPage' */ './pages/Startup') ) const Dashboard = lazy( () => import(/* webpackChunkName: 'DashboardPage' */ './pages/dashboard') ) const Settings = lazy( () => import(/* webpackChunkName: 'SettingsPage' */ './pages/Settings') ) const View = lazy( () => import(/* webpackChunkName: 'ViewPage' */ './pages/view/index') ) const Login = lazy( () => import(/* webpackChunkName: 'LoginPage' */ './pages/Login') ) const Admin = lazy( () => import(/* webpackChunkName: 'AdminPage' */ './pages/admin/index') ) const NotFound = lazy( () => import(/* webpackChunkName: 'NotFoundPage' */ './pages/errors/NotFound') ) function App(): React.ReactElement { const { pathname } = useLocation() const { switcher } = useThemeSwitcher() const { data } = useSWR('/utils/maintenance', fetcher) const { data: me, error: errorMe, mutate: mutateMe } = useSWRImmutable('/users/me', fetcher) const [loading, setLoading] = useState(true) useEffect(() => document.querySelector('.App')?.scrollIntoView(), [pathname]) useEffect(() => { if (me?.user.settings?.theme === 'light') { switcher({ theme: 'light' }) } else { switcher({ theme: 'dark' }) } }, [me, errorMe]) useEffect(() => { pwaInstallHandler.addListener(canInstall => { if (canInstall && (!localStorage.getItem('install') || new Date().getTime() - Number(localStorage.getItem('install')) > 5 * 8.64e+7)) { notification.info({ key: 'appInstallInfo', message: 'Install App', description: <> You can install the app on your device for a better experience. , onClose: () => localStorage.setItem('install', new Date().getTime().toString()) }) } }) pwaInstallHandler.removeListener(_canInstall => { notification.close('appInstallInfo') }) }, []) useEffect(() => { window.addEventListener('message', event => { if (event.data.type === 'files') { localStorage.setItem('files', JSON.stringify(event.data.files)) } }) }, []) useEffect(() => { const url = localStorage.getItem('BASE_URL') if (url && !/^http/.test(url) || /\/startup\?reset\=1/.test(window.location.href)) { localStorage.removeItem('BASE_URL') } else if (url && url !== window.location.origin) { window.location.replace(url as string) } }, []) useEffect(() => { window.addEventListener('load', () => setTimeout(() => { setLoading(false) }, 1500)) }, []) return ( {data?.maintenance ?
} href="https://twitter.com/teledriveapp"> Follow us for updates } />
: <> {!/^\/view\/.*/gi.test(pathname) && }
}> } /> {me?.user && !localStorage.getItem('experimental') ? : } } />
{/^\/view\/.*/gi.test(pathname) || /\/startup/.test(pathname) ? <> :