impress-2020/src/app/App.js

92 lines
2.7 KiB
JavaScript
Raw Normal View History

2020-04-21 20:32:53 -07:00
import React from "react";
import { ApolloProvider } from "@apollo/client";
import { Auth0Provider } from "@auth0/auth0-react";
import { CSSReset, ChakraProvider } from "@chakra-ui/core";
import defaultTheme from "@chakra-ui/theme";
2020-05-10 00:21:04 -07:00
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
2020-05-18 00:20:48 -07:00
import loadable from "@loadable/component";
import { useAuth0 } from "@auth0/auth0-react";
2020-04-21 17:49:52 -07:00
import buildApolloClient from "./apolloClient";
2020-09-06 18:12:34 -07:00
import PageLayout from "./PageLayout";
2020-05-18 00:20:48 -07:00
const ItemsPage = loadable(() => import("./ItemsPage"));
2020-05-18 00:20:48 -07:00
const HomePage = loadable(() => import("./HomePage"));
const ModelingPage = loadable(() => import("./ModelingPage"));
const WardrobePage = loadable(() => import("./WardrobePage"));
const theme = {
...defaultTheme,
styles: {
...defaultTheme.styles,
global: ({ colorMode, ...rest }) => ({
...defaultTheme.styles.global({ colorMode, ...rest }),
color: colorMode === "light" ? "green.800" : "green.50",
transition: "all 0.25s",
}),
},
};
2020-04-25 23:55:39 -07:00
/**
* App is the entry point of our application. There's not a ton of exciting
* stuff happening here, mostly just setting up some globals and theming!
*
* To really dive into the code, try going down into a page component!
*/
2020-04-21 17:49:52 -07:00
function App() {
return (
2020-05-10 00:21:04 -07:00
<Router>
<Auth0Provider
domain="openneo.us.auth0.com"
clientId="8LjFauVox7shDxVufQqnviUIywMuuC4r"
redirectUri={window.location.origin}
2020-09-02 23:00:16 -07:00
audience="https://impress-2020.openneo.net/api"
scope=""
>
<ApolloProviderWithAuth0>
<ChakraProvider theme={theme}>
<CSSReset />
<Switch>
<Route path="/outfits/new">
<WardrobePage />
</Route>
<Route path="/user/:userId/items">
2020-09-06 18:12:34 -07:00
<PageLayout>
<ItemsPage />
</PageLayout>
</Route>
<Route path="/modeling">
<PageLayout>
<ModelingPage />
</PageLayout>
</Route>
<Route path="/">
2020-09-06 18:42:39 -07:00
<PageLayout hideHomeLink>
2020-09-06 18:12:34 -07:00
<HomePage />
</PageLayout>
</Route>
</Switch>
</ChakraProvider>
</ApolloProviderWithAuth0>
</Auth0Provider>
2020-05-10 00:21:04 -07:00
</Router>
2020-04-21 17:49:52 -07:00
);
}
function ApolloProviderWithAuth0({ children }) {
const auth0 = useAuth0();
const auth0Ref = React.useRef(auth0);
React.useEffect(() => {
auth0Ref.current = auth0;
}, [auth0]);
const client = React.useMemo(
() => buildApolloClient(() => auth0Ref.current),
[]
);
return <ApolloProvider client={client}>{children}</ApolloProvider>;
}
2020-04-21 17:49:52 -07:00
export default App;