Path: blob/1.0-develop/resources/scripts/components/App.tsx
7461 views
import React, { lazy } from 'react';1import { hot } from 'react-hot-loader/root';2import { Route, Router, Switch } from 'react-router-dom';3import { StoreProvider } from 'easy-peasy';4import { store } from '@/state';5import { SiteSettings } from '@/state/settings';6import ProgressBar from '@/components/elements/ProgressBar';7import { NotFound } from '@/components/elements/ScreenBlock';8import tw from 'twin.macro';9import GlobalStylesheet from '@/assets/css/GlobalStylesheet';10import { history } from '@/components/history';11import { setupInterceptors } from '@/api/interceptors';12import AuthenticatedRoute from '@/components/elements/AuthenticatedRoute';13import { ServerContext } from '@/state/server';14import '@/assets/tailwind.css';15import Spinner from '@/components/elements/Spinner';1617const DashboardRouter = lazy(() => import(/* webpackChunkName: "dashboard" */ '@/routers/DashboardRouter'));18const ServerRouter = lazy(() => import(/* webpackChunkName: "server" */ '@/routers/ServerRouter'));19const AuthenticationRouter = lazy(() => import(/* webpackChunkName: "auth" */ '@/routers/AuthenticationRouter'));2021interface ExtendedWindow extends Window {22SiteConfiguration?: SiteSettings;23PterodactylUser?: {24uuid: string;25username: string;26email: string;27/* eslint-disable camelcase */28root_admin: boolean;29use_totp: boolean;30language: string;31updated_at: string;32created_at: string;33/* eslint-enable camelcase */34};35}3637setupInterceptors(history);3839const App = () => {40const { PterodactylUser, SiteConfiguration } = window as ExtendedWindow;41if (PterodactylUser && !store.getState().user.data) {42store.getActions().user.setUserData({43uuid: PterodactylUser.uuid,44username: PterodactylUser.username,45email: PterodactylUser.email,46language: PterodactylUser.language,47rootAdmin: PterodactylUser.root_admin,48useTotp: PterodactylUser.use_totp,49createdAt: new Date(PterodactylUser.created_at),50updatedAt: new Date(PterodactylUser.updated_at),51});52}5354if (!store.getState().settings.data) {55store.getActions().settings.setSettings(SiteConfiguration!);56}5758return (59<>60<GlobalStylesheet />61<StoreProvider store={store}>62<ProgressBar />63<div css={tw`mx-auto w-auto`}>64<Router history={history}>65<Switch>66<Route path={'/auth'}>67<Spinner.Suspense>68<AuthenticationRouter />69</Spinner.Suspense>70</Route>71<AuthenticatedRoute path={'/server/:id'}>72<Spinner.Suspense>73<ServerContext.Provider>74<ServerRouter />75</ServerContext.Provider>76</Spinner.Suspense>77</AuthenticatedRoute>78<AuthenticatedRoute path={'/'}>79<Spinner.Suspense>80<DashboardRouter />81</Spinner.Suspense>82</AuthenticatedRoute>83<Route path={'*'}>84<NotFound />85</Route>86</Switch>87</Router>88</div>89</StoreProvider>90</>91);92};9394export default hot(App);959697