{"componentChunkName":"component---src-templates-post-js","path":"/setup-apollo-cache","result":{"data":{"markdownRemark":{"html":"<p>In this post we setup the Apollo cache and our local resolvers to be able to store the form data.</p>\n<p>First in your <code class=\"language-text\">index.js</code> file add the following:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> InMemoryCache <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"apollo-cache-inmemory\"</span>\n\n<span class=\"token keyword\">const</span> cache <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">InMemoryCache</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\ncache<span class=\"token punctuation\">.</span><span class=\"token function\">writeData</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  data<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    formData<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      date<span class=\"token operator\">:</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n      email<span class=\"token operator\">:</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n      customer<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n      __typename<span class=\"token operator\">:</span> <span class=\"token string\">\"formData\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>🍗 Here we are simply importing the <code class=\"language-text\">InMemoryCache</code> function and then making an instance of a cache object.</p>\n<p>🍗 Next we use the <code class=\"language-text\">writeData</code> function to create our initial <code class=\"language-text\">formData</code> object that has a date, email and customer fields to store that data.</p>\n<p>🍗 Very important is the <code class=\"language-text\">__typename</code> field the lets GraphQL know that the <code class=\"language-text\">formData</code> object is the type we will be querying and mutating</p>\n<p>Next up in <code class=\"language-text\">src</code> make a file called <code class=\"language-text\">resolvers.js</code> and add the following:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> <span class=\"token constant\">GET_FORM_DATA</span> <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"./graphql/Queries\"</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> resolvers <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  Mutation<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function-variable function\">updateFormData</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">parent<span class=\"token punctuation\">,</span> args<span class=\"token punctuation\">,</span> context<span class=\"token punctuation\">,</span> info</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">const</span> queryResult <span class=\"token operator\">=</span> context<span class=\"token punctuation\">.</span>cache<span class=\"token punctuation\">.</span><span class=\"token function\">readQuery</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> query<span class=\"token operator\">:</span> <span class=\"token constant\">GET_FORM_DATA</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n      <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> formData <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> queryResult\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>queryResult<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> data <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n          formData<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n            date<span class=\"token operator\">:</span> args<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">,</span>\n            email<span class=\"token operator\">:</span> args<span class=\"token punctuation\">.</span>email<span class=\"token punctuation\">,</span>\n            customer<span class=\"token operator\">:</span> args<span class=\"token punctuation\">.</span>customers<span class=\"token punctuation\">,</span>\n            __typename<span class=\"token operator\">:</span> formData<span class=\"token punctuation\">[</span><span class=\"token string\">\"__typename\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n          <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span>\n\n        context<span class=\"token punctuation\">.</span>cache<span class=\"token punctuation\">.</span><span class=\"token function\">writeQuery</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> query<span class=\"token operator\">:</span> <span class=\"token constant\">GET_FORM_DATA</span><span class=\"token punctuation\">,</span> data <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">return</span> data<span class=\"token punctuation\">.</span>formData\n      <span class=\"token punctuation\">}</span>\n      <span class=\"token keyword\">return</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>🍗 We have a resolvers object that has a mutation which has a function called <code class=\"language-text\">updateFormData</code>.</p>\n<p>🍗 <code class=\"language-text\">updateFormData</code> reads the cache to get the most update version of the <code class=\"language-text\">formData</code></p>\n<p>🍗 Then it creates a new object that takes in new arguments to overwrite the form data with update data.</p>\n<p>🍗 <code class=\"language-text\">formData</code> is then returned.</p>\n<p>Next up go to the <code class=\"language-text\">Queries.js</code> file and add the following:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> <span class=\"token constant\">GET_FORM_DATA</span> <span class=\"token operator\">=</span> gql<span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">\n  query GET_FORM_DATA {\n    formData @client {\n      date\n      email\n    }\n  }\n</span><span class=\"token template-punctuation string\">`</span></span></code></pre></div>\n<p>We have to create a schema doc to read the <code class=\"language-text\">formData</code> the <code class=\"language-text\">@client</code> directive lets GraphQL know it is directly for the client only.</p>\n<p>In the <code class=\"language-text\">mutations.js</code> add the following:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> gql <span class=\"token keyword\">from</span> <span class=\"token string\">\"graphql-tag\"</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> <span class=\"token constant\">UPDATE_FORM_DATA</span> <span class=\"token operator\">=</span> gql<span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">\n  mutation UPDATE_FORM_DATA(\n    $date: String\n    $email: String\n    $customer: CustomerInput\n  ) {\n    updateFormData(date: $date, email: $email, customer: $customer) @client\n  }\n</span><span class=\"token template-punctuation string\">`</span></span></code></pre></div>\n<p>Here we are just creating a mutation to update the form data</p>\n<p>This is it for now, next up we will start with building out the forms.</p>","frontmatter":{"date":"July 21, 2020","path":"/setup-apollo-cache","title":"Setup Apollo Cache","postnumber":46}}},"pageContext":{"previous":{"node":{"frontmatter":{"path":"/create-booking-forms-part-one","postnumber":47}}},"next":{"node":{"frontmatter":{"path":"/setting-up-advanced-forms","postnumber":45}}}}},"staticQueryHashes":["3207677222","3649515864","63159454"]}