-
Notifications
You must be signed in to change notification settings - Fork 1
/
gatsby-node.js
85 lines (76 loc) · 2.09 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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
const createPagesForListing = ({ actions, graphql }, pageType) => {
const { createPage } = actions
const pageTemplate = require.resolve(`./src/pages/${pageType}.js`)
return graphql(`
{
allMdx(
filter: {fileAbsolutePath: {regex: "/(${pageType})/.*\.(mdx|md)$/"}}
) {
totalCount
}
}
`).then((result) => {
if (result.errors) {
return Promise.reject(result.errors)
}
const totalCount = result?.data?.allMdx?.totalCount
const numberOfItemsPerPage = 10
const numberOfPagesToCreate = totalCount
? Math.ceil(totalCount / numberOfItemsPerPage)
: 0
for (
let pageNumber = 1;
pageNumber <= numberOfPagesToCreate;
pageNumber++
) {
const pagePath = `${pageType}/page/${pageNumber}`
createPage({
path: pagePath,
component: pageTemplate,
context: {
limit: numberOfItemsPerPage,
skip: (pageNumber - 1) * numberOfItemsPerPage,
pageNumber,
hasNextPage: pageNumber < numberOfPagesToCreate,
},
})
console.log(`Page created: ${pagePath}`)
}
})
}
const createPagesForContent = ({ actions, graphql }, pageType) => {
const { createPage } = actions
const pageTemplate = require.resolve(`./src/templates/${pageType}Page.js`)
return graphql(`
{
allMdx(
filter: {fileAbsolutePath: {regex: "/(${pageType})/.*\.(mdx|md)$/"}}
) {
edges {
node {
slug
}
}
}
}
`).then((result) => {
if (result.errors) {
return Promise.reject(result.errors)
}
return result.data.allMdx.edges.forEach(({ node }) => {
createPage({
path: node.slug,
component: pageTemplate,
context: {
slug: node.slug,
},
})
console.log(`Page created: ${node.slug}`)
})
})
}
exports.createPages = async ({ actions, graphql }) => {
await createPagesForListing({ actions, graphql }, 'blog')
await createPagesForContent({ actions, graphql }, 'blog')
await createPagesForContent({ actions, graphql }, 'projects')
}