-
Notifications
You must be signed in to change notification settings - Fork 0
/
gatsby-node.js
131 lines (122 loc) · 3.47 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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
const path = require("path");
const slug = require("slug");
const { createFilePath } = require(`gatsby-source-filesystem`);
exports.onCreateNode = ({ node, actions, getNode }) => {
const { createNodeField } = actions;
// Add slug for Stripe page generation.
if (node.internal.type === "StripeSku") {
// console.log(node.internal.type);
const value = slug(node.product.name, slug.defaults.modes["rfc3986"]);
createNodeField({
node,
name: "slug",
value,
});
}
// Add slug for Markdown page generation.
else if (node.internal.type === `MarkdownRemark`) {
// console.log(node.internal.type);
const value = createFilePath({ node, getNode, basePath: `pages` });
createNodeField({
node,
name: `slug`,
value: value,
});
}
};
exports.createPages = async ({ graphql, actions, reporter }) => {
const { createPage } = actions;
// Everything wrapped in a try/catch block for error checking
try {
// GraphQL queries
const result = await graphql(`
{
stripe: allStripeSku {
edges {
node {
fields {
slug
}
product {
id
name
}
}
}
}
blog: allMarkdownRemark {
edges {
node {
fields {
slug
}
}
}
}
}
`);
// console.log(result);
// *** Stripe create pages ***
// Stripe product template location
const productTemplate = path.resolve("src/templates/ProductTemplate.js");
// Create product pages
const products = {};
result.data.stripe.edges.forEach(({ node }) => {
products[node.product.id] = node.fields.slug;
});
Object.entries(products).forEach(([id, slug]) => {
createPage({
path: `buy/${slug}`,
component: productTemplate,
context: { id },
});
});
// ***Blog post create pages***
// Markdown blog post template location
const blogTemplate = path.resolve(`./src/templates/blog-post.js`);
// Create new blog post pages
result.data.blog.edges.forEach(({ node }) => {
createPage({
path: node.fields.slug,
component: blogTemplate,
context: {
// Data passed to context is available
// in page queries as GraphQL variables.
slug: node.fields.slug,
},
});
});
} catch (error) {
// reporter.panicOnBuild('message', error) built-in Gatsby Noe API helper
// As seen here: https://www.gatsbyjs.org/docs/node-api-helpers/#reporter
reporter.panicOnBuild(`Error while running GraphQL query.`, error);
}
};
// Create an order summary page for each order
exports.onCreatePage = async ({ page, actions }) => {
const { createPage } = actions;
// Only update the `/order` page.
if (page.path.match(/^\/order/)) {
// page.matchPath is a special key that's used for matching pages
// with corresponding routes only on the client.
page.matchPath = "/order/*";
// Update the page.
createPage(page);
}
};
// Dashboard create page
exports.onCreatePage = ({ page, actions }) => {
if (page.path.match(/^\/dashboard/)) {
page.matchPath = "/dashboard/*";
actions.createPage(page);
}
};
exports.onCreateWebpackConfig = ({ stage, actions, plugins }) => {
actions.setWebpackConfig({
plugins: [
plugins.define({
"global.GENTLY": false,
}),
],
});
};