{"componentChunkName":"component---src-templates-post-js","path":"/create-all-listings-page","result":{"data":{"markdownRemark":{"html":"<p>In this chapter we will create the landing page that will get all the listings.</p>\n<p>Open up the <code class=\"language-text\">index.js</code> file under the <code class=\"language-text\">pages</code> directory 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> React <span class=\"token keyword\">from</span> <span class=\"token string\">\"react\"</span>\n<span class=\"token keyword\">import</span> LandingHeader <span class=\"token keyword\">from</span> <span class=\"token string\">\"../components/navs/LandingHeader\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> useQuery <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"@apollo/react-hooks\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> <span class=\"token constant\">GET_ALL_LISTINGS</span> <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"../graphql/Queries\"</span>\n<span class=\"token keyword\">import</span> ListingCard <span class=\"token keyword\">from</span> <span class=\"token string\">\"../components/cards/ListingCard\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Link <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"@reach/router\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Skeleton <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"antd\"</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">Index</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> loading<span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">,</span> error <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token function\">useQuery</span><span class=\"token punctuation\">(</span><span class=\"token constant\">GET_ALL_LISTINGS</span><span class=\"token punctuation\">)</span>\n\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>loading<span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token operator\">&lt;</span>Skeleton <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token operator\">&lt;</span>p className<span class=\"token operator\">=</span><span class=\"token string\">\"text-red\"</span><span class=\"token operator\">></span><span class=\"token punctuation\">{</span>error<span class=\"token punctuation\">}</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>p<span class=\"token operator\">></span>\n\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>LandingHeader\n        imgURL<span class=\"token operator\">=</span><span class=\"token string\">\"https://moon.nasa.gov/system/resources/detail_files/187_detail_as11-44-6551_orig.jpg\"</span>\n        text<span class=\"token operator\">=</span><span class=\"token string\">\"Book Vacations to Different Lunar Destinations\"</span>\n      <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>div className<span class=\"token operator\">=</span><span class=\"token string\">\"grid grid-cols-3 col-gap-32 p-10\"</span><span class=\"token operator\">></span>\n        <span class=\"token punctuation\">{</span>data<span class=\"token punctuation\">.</span>getAllListings<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">listing</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n          <span class=\"token operator\">&lt;</span>div key<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>listing<span class=\"token punctuation\">.</span>listingId<span class=\"token punctuation\">}</span> className<span class=\"token operator\">=</span><span class=\"token string\">\"mt-32\"</span><span class=\"token operator\">></span>\n            <span class=\"token operator\">&lt;</span>Link to<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">listing/</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>listing<span class=\"token punctuation\">.</span>listingId<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n              <span class=\"token operator\">&lt;</span>ListingCard\n                listingTitle<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>listing<span class=\"token punctuation\">.</span>listingName<span class=\"token punctuation\">}</span>\n                listingLocation<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>listing<span class=\"token punctuation\">.</span>listingLocation<span class=\"token punctuation\">}</span>\n                price<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>listing<span class=\"token punctuation\">.</span>price<span class=\"token punctuation\">}</span>\n                rating<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>listing<span class=\"token punctuation\">.</span>rating<span class=\"token punctuation\">}</span>\n                coverPhoto<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>listing<span class=\"token punctuation\">.</span>coverPhoto<span class=\"token punctuation\">}</span>\n              <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n            <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>Link<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n        <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span>\n      <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span><span class=\"token operator\">></span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> Index</code></pre></div>\n<p>🥑 First off we are using the <code class=\"language-text\">useQuery</code> hook from the Apollo library to get all the listings.</p>\n<p>🥑 Then we have two if statements that will return some HTML for us if <code class=\"language-text\">loading</code> or <code class=\"language-text\">error</code> is true. This is nice because we do not have to do any fancy stuff to determine if the API is fetching data for us or if the QUERY failed.</p>\n<p>🥑 In our return block, we have the <code class=\"language-text\">&lt;LandingHeader/&gt;</code>component with an <code class=\"language-text\">imgURL</code> and text props. While we loop of over the listings and pass through the data of each listing as props to our <code class=\"language-text\">&lt;ListingCard/&gt;</code> component.</p>\n<p>Next up we need to create the schema document for the <code class=\"language-text\">GET_ALL_LISTINGS</code> query, so head over to the <code class=\"language-text\">Queries.js</code> file under the <code class=\"language-text\">graphql</code> directory 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_ALL_LISTINGS</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 GetAllListings {\n    getAllListings {\n      listingId\n      coverPhoto\n      listingName\n      listingLocation\n      rating\n      price\n    }\n  }\n</span><span class=\"token template-punctuation string\">`</span></span></code></pre></div>\n<p>🥑 We are calling the <code class=\"language-text\">getAllListings</code> query that will give is the above fields to pass into the listing card. Note we are only telling the API to gives exactly the fields we want.</p>\n<p>If all goes well, you should have this:</p>\n<p><img src=\"/uploads/landing.png\" alt=\"landing-page\"></p>","frontmatter":{"date":"July 20, 2020","path":"/create-all-listings-page","title":"Create All Listings Page","postnumber":43}}},"pageContext":{"previous":{"node":{"frontmatter":{"path":"/create-view-a-listing-page","postnumber":44}}},"next":{"node":{"frontmatter":{"path":"/create-listing-card-react","postnumber":42}}}}},"staticQueryHashes":["3207677222","3649515864","63159454"]}