This repository has been archived by the owner on Feb 3, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
gatsby-node.js
56 lines (49 loc) · 1.36 KB
/
gatsby-node.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
const { createFilePath } = require( 'gatsby-source-filesystem' )
const path = require( 'path' )
const slugify = require( 'slugify' )
// Add slug for each mdx file in 'content'
exports.onCreateNode = ( { node, actions, getNode } ) => {
const { createNodeField } = actions
if ( node.internal.type === 'Mdx' ) {
const slug = slugify(
createFilePath( { node, getNode } ), {
lower: true,
remove: /[*+~.()'"!:@]/g,
},
)
createNodeField( { node, value: slug, name: 'slug' } )
}
}
exports.createPages = async ( { graphql, actions, reporter } ) => {
const { createPage } = actions
const result = await graphql( `
query AllPages {
allMdx {
edges {
node {
id
fields {
slug
}
frontmatter{
templateKey
}
}
}
}
}
` )
if ( result.errors ) reporter.panicOnBuild( '🚨 ERROR: Loading "createPages" query' )
// Create page
const page = result.data.allMdx.edges
// Call `createPage` for each page
page
.filter( ( { node: { frontmatter: { templateKey } } } ) => templateKey )
.forEach( ( { node: { id, frontmatter: { templateKey }, fields: { slug } } } ) => {
createPage( {
path: slug,
component: path.resolve( `src/templates/${templateKey}.js` ),
context: { id },
} )
} )
}