-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgatsby-node.js
102 lines (93 loc) · 2.17 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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
require('dotenv').config({
path: `.env.${process.env.NODE_ENV || 'development'}`,
});
exports.createPages = async ({ graphql, actions }) => {
/** Promise */
const { createPage } = actions;
const authorTemplate = require.resolve('./src/templates/Author.jsx');
const postTemplate = require.resolve('./src/templates/Post.jsx');
const categoryTemplate = require.resolve('./src/templates/Category.jsx');
const result = await graphql(`
{
allSanityPost(filter: { slug: { current: { ne: null } } }) {
nodes {
slug {
current
}
categories {
slug {
current
}
}
}
}
allSanityProduct {
nodes {
asin
slug {
current
}
}
}
allSanityKeyboard {
nodes {
asin
}
}
allSanityAuthor {
nodes {
slug {
current
}
}
}
}
`);
if (result.errors) {
throw result.errors;
}
// Authors
const authors = result.data.allSanityAuthor.nodes || [];
// Category
const categorySet = new Set();
const posts = result.data.allSanityPost.nodes || [];
// Build pages for every posts
posts.forEach((post) => {
// Get categories
if (post.categories[0].slug.current) {
post.categories.forEach((cat) => {
categorySet.add(cat.slug.current);
});
}
// Create pages and pass products and keyboards as context
const path = `/${post.slug.current}`;
createPage({
path,
component: postTemplate,
context: {
slug: post.slug.current,
},
});
});
// Build pages for every category
const categoryList = Array.from(categorySet);
categoryList.forEach((category) => {
createPage({
path: `/${category}`,
component: categoryTemplate,
context: {
categorySlug: category,
},
});
});
// Build pages for every author
authors.forEach((author) => {
createPage({
path: `/auteur/${author.slug.current}`,
component: authorTemplate,
context: {
authorSlug: author.slug.current,
},
});
});
};