impress-2020/src/app/App.js

53 lines
1.8 KiB
JavaScript
Raw Normal View History

2020-04-21 20:32:53 -07:00
import React from "react";
import { ApolloProvider } from "@apollo/react-hooks";
2020-04-21 20:32:53 -07:00
import { CSSReset, ThemeProvider, theme } from "@chakra-ui/core";
import WardrobePage from "./WardrobePage";
2020-04-21 17:49:52 -07:00
import ApolloClient from "apollo-boost";
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 (
<ApolloProvider client={client}>
<ThemeProvider theme={theme}>
<CSSReset />
<WardrobePage />
</ThemeProvider>
</ApolloProvider>
2020-04-21 17:49:52 -07:00
);
}
export default App;