rickvanlieshout.com/gatsby/create-pages.js
2018-11-09 20:08:48 +03:00

76 lines
1.9 KiB
JavaScript

'use strict';
const path = require('path');
const _ = require('lodash');
const createCategoriesPages = require('./pagination/create-categories-pages.js');
const createTagsPages = require('./pagination/create-tags-pages.js');
const createPostsPages = require('./pagination/create-posts-pages.js');
const createPages = async ({ graphql, actions }) => {
const { createPage } = actions;
// 404
createPage({
path: '/404',
component: path.resolve('./src/templates/not-found-template.js')
});
// Tags list
createPage({
path: '/tags',
component: path.resolve('./src/templates/tags-list-template.js')
});
// Categories list
createPage({
path: '/categories',
component: path.resolve('./src/templates/categories-list-template.js')
});
// Posts and pages from markdown
const result = await graphql(`
{
allMarkdownRemark(
filter: { frontmatter: { draft: { ne: true } } }
) {
edges {
node {
frontmatter {
layout
}
fields {
slug
}
}
}
}
}
`);
const { edges } = result.data.allMarkdownRemark;
_.each(edges, (edge) => {
if (_.get(edge, 'node.frontmatter.layout') === 'page') {
createPage({
path: edge.node.fields.slug,
component: path.resolve('./src/templates/page-template.js'),
context: { slug: edge.node.fields.slug }
});
} else if (_.get(edge, 'node.frontmatter.layout') === 'post') {
createPage({
path: edge.node.fields.slug,
component: path.resolve('./src/templates/post-template.js'),
context: { slug: edge.node.fields.slug }
});
}
});
// Feeds
await createTagsPages(graphql, actions);
await createCategoriesPages(graphql, actions);
await createPostsPages(graphql, actions);
};
module.exports = createPages;