impress-2020/src/app/App.js

64 lines
2.1 KiB
JavaScript
Raw Normal View History

2020-04-21 20:32:53 -07:00
import React from "react";
2020-05-10 00:21:04 -07:00
import ApolloClient from "apollo-boost";
import { ApolloProvider } from "@apollo/react-hooks";
2020-04-21 20:32:53 -07:00
import { CSSReset, ThemeProvider, theme } from "@chakra-ui/core";
2020-05-10 00:21:04 -07:00
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
2020-04-21 17:49:52 -07:00
2020-05-10 00:21:04 -07:00
import HomePage from "./HomePage";
import WardrobePage from "./WardrobePage";
2020-04-25 23:55:39 -07:00
/**
* client is the global Apollo Client instance we use for GraphQL queries. This
* is how we communicate with the server!
*/
const client = new ApolloClient({
uri: "/api/graphql",
cacheRedirects: {
Query: {
2020-04-25 23:55:39 -07:00
// Teach Apollo how to serve `items` queries from the cache. That way,
// when you remove an item from your outfit, or add an item from search,
// Apollo knows it already has the data it needs and doesn't need to ask
// the server again!
items: (_, args, { getCacheKey }) =>
args.ids.map((id) => getCacheKey({ __typename: "Item", id })),
// Teach Apollo how to serve `petAppearance` queries from the cache. That
// way, when you switch pet poses, Apollo knows it already has the
// appearance data and doesn't need to ask the server again!
petAppearance: (_, args, { getCacheKey }) => {
const { speciesId, colorId, emotion, genderPresentation } = args;
const id = `${speciesId}-${colorId}-${emotion}-${genderPresentation}`;
return getCacheKey({ __typename: "PetAppearance", id });
},
},
},
});
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>
<ApolloProvider client={client}>
<ThemeProvider theme={theme}>
<CSSReset />
<Switch>
<Route path="/outfits/new">
<WardrobePage />
</Route>
<Route path="/">
<HomePage />
</Route>
</Switch>
</ThemeProvider>
</ApolloProvider>
</Router>
2020-04-21 17:49:52 -07:00
);
}
export default App;