From 23b0a146ebe4b296df2ea23c55c8a658d3d800d7 Mon Sep 17 00:00:00 2001 From: neri Date: Wed, 4 Mar 2020 01:56:39 +0100 Subject: [PATCH] blog posts get urls --- ...test-entry.md => 2020-03-03-test-entry.md} | 2 +- gatsby-node.js | 55 ++++++++++++++++--- src/components/layout.js | 8 +-- src/templates/blogTemplate.js | 54 ++++++++++++++++++ 4 files changed, 107 insertions(+), 12 deletions(-) rename blog/{test-entry.md => 2020-03-03-test-entry.md} (85%) create mode 100644 src/templates/blogTemplate.js diff --git a/blog/test-entry.md b/blog/2020-03-03-test-entry.md similarity index 85% rename from blog/test-entry.md rename to blog/2020-03-03-test-entry.md index 5d93558..dbb9184 100644 --- a/blog/test-entry.md +++ b/blog/2020-03-03-test-entry.md @@ -4,4 +4,4 @@ date: '1970-01-01T22:45:00-01:00' description: 'testing the log posts' --- -# This is a test +Hello diff --git a/gatsby-node.js b/gatsby-node.js index d82229f..d42daf8 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -1,11 +1,13 @@ const path = require(`path`) +const { createFilePath } = require(`gatsby-source-filesystem`) exports.createPages = async ({ actions, graphql, reporter }) => { const { createPage } = actions const siteTemplate = path.resolve(`src/templates/siteTemplate.js`) + const blogTemplate = path.resolve(`src/templates/blogTemplate.js`) - const result = await graphql(` + const pages = await graphql(` { allMdx(limit: 1000, filter: { fields: { source: { eq: "pages" } } }) { edges { @@ -20,31 +22,70 @@ exports.createPages = async ({ actions, graphql, reporter }) => { } } `) - // Handle errors - if (result.errors) { - reporter.panicOnBuild(`Error while running GraphQL query.`) + if (pages.errors) { + reporter.panicOnBuild(`Error while running pages GraphQL query.`) return } - result.data.allMdx.edges.forEach(({ node }) => { + const blogEntries = await graphql(` + { + allMdx(limit: 1000, filter: { fields: { source: { eq: "blog" } } }) { + edges { + node { + fields { + slug + } + frontmatter { + title + date + description + } + } + } + } + } + `) + // Handle errors + if (pages.errors) { + reporter.panicOnBuild(`Error while running blog-entry GraphQL query.`) + return + } + + pages.data.allMdx.edges.forEach(({ node }) => { createPage({ path: node.frontmatter.path, component: siteTemplate, context: {}, // additional data can be passed via context }) }) + blogEntries.data.allMdx.edges.forEach(({ node }) => { + console.log(node.fields.slug) + createPage({ + path: node.fields.slug, + component: blogTemplate, + context: { + slug: node.fields.slug, + }, + }) + }) } exports.onCreateNode = ({ node, getNode, actions }) => { const { createNodeField } = actions if (node.internal.type === `Mdx`) { - const value = getNode(node.parent).sourceInstanceName + const source = getNode(node.parent).sourceInstanceName createNodeField({ node, name: `source`, - value, + value: source, + }) + const path = createFilePath({ node, getNode }) + createNodeField({ + node, + name: `slug`, + value: path, }) } } diff --git a/src/components/layout.js b/src/components/layout.js index 1a2010d..add70fe 100644 --- a/src/components/layout.js +++ b/src/components/layout.js @@ -1,7 +1,7 @@ -import React from "react" -import Nav from "../components/nav" -import Footer from "../components/footer" -import layoutStyles from "./layout.module.css" +import React from 'react' +import Nav from '../components/nav' +import Footer from '../components/footer' +import layoutStyles from './layout.module.css' export default ({ path, editLink, children }) => ( <> diff --git a/src/templates/blogTemplate.js b/src/templates/blogTemplate.js new file mode 100644 index 0000000..f7fd9f1 --- /dev/null +++ b/src/templates/blogTemplate.js @@ -0,0 +1,54 @@ +import React, { useEffect } from 'react' +import { graphql } from 'gatsby' +import Layout from '../components/layout' +import { MDXRenderer } from 'gatsby-plugin-mdx' +import { MDXProvider } from '@mdx-js/react' + +const MdLeakH1 = props =>

# {props.children}

+const MdLeakH2 = props =>

## {props.children}

+const MdLeakH3 = props =>

### {props.children}

+const MdLeakH4 = props =>
#### {props.children}
+ +const components = { + h1: MdLeakH1, + h2: MdLeakH2, + h3: MdLeakH3, + h4: MdLeakH4, +} + +export default function Template({ + data, // this prop will be injected by the GraphQL query below. +}) { + const { + frontmatter: { title, path }, + body, + } = data.mdx + + useEffect(() => { + document.title = `ctdo - ${title.toLowerCase()}` + }, [title]) + + return ( + + {title} + + {body} + + + ) +} + +export const pageQuery = graphql` + query($slug: String!) { + mdx(fields: { slug: { eq: $slug } }) { + id + excerpt(pruneLength: 160) + body + frontmatter { + title + date(formatString: "MMMM DD, YYYY") + description + } + } + } +`