text: // You can use any data fetching library
  import fetch from 'node-fetch';
  import Head from 'next/head';
  import Link from 'next/link';
  import Header from '../components/Header';
  import Footer from '../components/Footer'
  
  // Only fetchg the title and blurb.
  const FirestoreBlogPostsURL = `https://firestore.googleapis.com/v1/projects/${process.env.FIREBASE_PROJECT_ID}/databases/(default)/documents/posts?mask.fieldPaths=blurb&mask.fieldPaths=title`;
  
  //
  // Scroll to end to see getStaticPaths & getStaticProps
  //
  // posts will be populated at build time by getStaticProps()
  function Blog({ posts }) {
    return (
      <div className="container">
        <Head>
          <title>Next.js SSG on Firebase Hosting</title>
          <link rel="icon" href="/favicon.ico" />
        </Head>
  
        <main>
          <Header />
          <h1 className="title">
            Welcome to{' '}
            <a href="https://github.com/jthegedus/firebase-gcp-examples">
              Next.js SSG on Firebase
            </a>
          </h1>
  
          <p className="description">Blog Posts</p>
  
          <div className="grid">
            {posts.map((post) => (
              <Link href="posts/[slug]" as={`/posts/${post.slug}`}  key={`${post.slug}`}>
                <a className="card">
                  <h3>{post.title} &rarr;</h3>
                  <p>{post.blurb}</p>
                </a>
              </Link>
            ))}
          </div>
        </main>
  
        <Footer />
  
        <style jsx>{`
          .container {
            min-height: 100vh;
            padding: 0 0.5rem;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
          }
  
          main {
            padding: 5rem 0;
            flex: 1;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
          }
  
          a {
            color: inherit;
            text-decoration: none;
          }
  
          .title a {
            color: #0070f3;
            text-decoration: none;
          }
  
          .title a:hover,
          .title a:focus,
          .title a:active {
            text-decoration: underline;
          }
  
          .title {
            margin: 0;
            line-height: 1.15;
            font-size: 4rem;
          }
  
          .title,
          .description {
            text-align: center;
          }
  
          .description {
            line-height: 1.5;
            font-size: 1.5rem;
          }
  
          code {
            background: #fafafa;
            border-radius: 5px;
            padding: 0.75rem;
            font-size: 1.1rem;
            font-family: Menlo, Monaco, Lucida Console, Liberation Mono,
              DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace;
          }
  
          .grid {
            display: flex;
            align-items: center;
            justify-content: center;
            flex-wrap: wrap;
  
            max-width: 800px;
            margin-top: 3rem;
          }
  
          .card {
            margin: 1rem;
            flex-basis: 45%;
            padding: 1.5rem;
            text-align: left;
            color: inherit;
            text-decoration: none;
            border: 1px solid #eaeaea;
            border-radius: 10px;
            transition: color 0.15s ease, border-color 0.15s ease;
          }
  
          .card:hover,
          .card:focus,
          .card:active {
            color: #0070f3;
            border-color: #0070f3;
          }
  
          .card h3 {
            margin: 0 0 1rem 0;
            font-size: 1.5rem;
          }
  
          .card p {
            margin: 0;
            font-size: 1.25rem;
            line-height: 1.5;
          }
  
          @media (max-width: 600px) {
            .grid {
              width: 100%;
              flex-direction: column;
            }
          }
        `}</style>
  
        <style jsx global>{`
          main {
            max-width: 800px;
            margin: 20px auto 0px auto;
          }
          html,
          body {
            padding: 0;
            margin: 0;
            font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto,
              Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue,
              sans-serif;
          }
  
          * {
            box-sizing: border-box;
          }
        `}</style>
      </div>
    );
  }
  
  // This function gets called at build time on server-side.
  // It won't be called on client-side, so you can even do
  // direct database queries. See the "Technical details" section.
  export async function getStaticProps() {
    // Call an external API endpoint to get posts.
    const res = await fetch(FirestoreBlogPostsURL);
    const posts = await res.json();
  
    const finalPosts = posts.documents.map((post) => {
      return {
        slug: post.name.split('/').pop(), // naively use documentId as slug
        title: post.fields.title.stringValue,
        blurb: post.fields.blurb.stringValue,
      };
    });
  
    // By returning { props: posts }, the Blog component
    // will receive `posts` as a prop at build time
    return {
      props: {
        posts: finalPosts,
      },
    };
  }
  
  export default Blog;
  