You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.2 KiB
67 lines
2.2 KiB
import React from 'react';
|
|
import { createTheme, CssBaseline, ThemeProvider } from "@mui/material";
|
|
import { BrowserRouter, Route, Routes } from "react-router-dom";
|
|
import SignInPage from "./pages/SignInPage";
|
|
import { ApolloClient, ApolloProvider, createHttpLink, InMemoryCache } from "@apollo/client";
|
|
import SignUpPage from "./pages/SignUpPage";
|
|
import { setContext } from "@apollo/client/link/context";
|
|
import TasksPage from "./pages/TasksPage";
|
|
import TokenCheck from "./components/TokenCheck";
|
|
import { RootStore } from "./stores/RootStore";
|
|
import { Provider } from "inversify-react";
|
|
import Layout from "./components/Layout";
|
|
|
|
type AppProps = {}
|
|
|
|
const darkTheme = createTheme({
|
|
palette: {
|
|
mode: 'dark',
|
|
},
|
|
})
|
|
|
|
const store = new RootStore()
|
|
|
|
const httpLink = createHttpLink({
|
|
uri: process.env.NODE_ENV == 'development' ? 'http://localhost:31234/graphql' : '/graphql',
|
|
})
|
|
|
|
const authLink = setContext((_, { headers }) => {
|
|
const token = store.authStore.token
|
|
return {
|
|
headers: {
|
|
...headers,
|
|
authorization: token ? `${token}` : ''
|
|
}
|
|
}
|
|
})
|
|
|
|
const client = new ApolloClient({
|
|
link: authLink.concat(httpLink),
|
|
cache: new InMemoryCache()
|
|
})
|
|
|
|
const App = ({}: AppProps) => {
|
|
return (
|
|
<React.StrictMode>
|
|
<ApolloProvider client={client}>
|
|
<Provider container={store.container}>
|
|
<BrowserRouter>
|
|
<ThemeProvider theme={darkTheme}>
|
|
<CssBaseline/>
|
|
<Routes>
|
|
<Route path='/' element={<Layout />}>
|
|
<Route path='signin' element={<TokenCheck required={false}><SignInPage/></TokenCheck>}/>
|
|
<Route path='signup' element={<TokenCheck required={false}><SignUpPage/></TokenCheck>}/>
|
|
<Route index element={<TokenCheck><TasksPage/></TokenCheck>}/>
|
|
</Route>
|
|
</Routes>
|
|
</ThemeProvider>
|
|
</BrowserRouter>
|
|
</Provider>
|
|
</ApolloProvider>
|
|
</React.StrictMode>
|
|
)
|
|
};
|
|
|
|
export default App;
|