Last active
January 10, 2019 05:08
-
-
Save muhrusdi/1f3fd08b758bd98747734525a18c3d27 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const path = require('path'); | |
exports.createPages = ({ graphql, actions }) => { | |
const { createPage } = actions; | |
return new Promise((resolve, reject) => { | |
const postTemplate = path.resolve('src/templates/post.jsx'); | |
const tagPage = path.resolve('src/pages/tags.jsx'); | |
const tagPosts = path.resolve('src/templates/tag.jsx'); | |
resolve( | |
graphql( | |
` | |
query { | |
allMarkdownRemark( | |
sort: { order: ASC, fields: [frontmatter___date] } | |
) { | |
edges { | |
node { | |
frontmatter { | |
path | |
title | |
tags | |
} | |
} | |
} | |
} | |
} | |
` | |
).then(result => { | |
if (result.errors) { | |
return reject(result.errors); | |
} | |
const posts = result.data.allMarkdownRemark.edges; | |
const postsByTag = {}; | |
// create tags page | |
posts.forEach(({ node }) => { | |
if (node.frontmatter.tags) { | |
node.frontmatter.tags.forEach(tag => { | |
if (!postsByTag[tag]) { | |
postsByTag[tag] = []; | |
} | |
postsByTag[tag].push(node); | |
}); | |
} | |
}); | |
const tags = Object.keys(postsByTag); | |
createPage({ | |
path: '/tags', | |
component: tagPage, | |
context: { | |
tags: tags.sort(), | |
}, | |
}); | |
//create tags | |
tags.forEach(tagName => { | |
const posts = postsByTag[tagName]; | |
createPage({ | |
path: `/tags/${tagName}`, | |
component: tagPosts, | |
context: { | |
posts, | |
tagName, | |
}, | |
}); | |
}); | |
//create posts | |
posts.forEach(({ node }, index) => { | |
const path = node.frontmatter.path; | |
const prev = index === 0 ? null : posts[index - 1].node; | |
const next = | |
index === posts.length - 1 ? null : posts[index + 1].node; | |
createPage({ | |
path, | |
component: postTemplate, | |
context: { | |
pathSlug: path, | |
prev, | |
next, | |
}, | |
}); | |
}); | |
}) | |
); | |
}); | |
}; | |
/* Allows named imports */ | |
exports.onCreateWebpackConfig = ({ actions }) => { | |
actions.setWebpackConfig({ | |
resolve: { | |
modules: [path.resolve(__dirname, 'src'), 'node_modules'], | |
}, | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment