-
Notifications
You must be signed in to change notification settings - Fork 2
/
gatsby-node.js
86 lines (75 loc) · 1.99 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
const path = require('path')
const { slugify } = require('./src/utils/url')
exports.onCreatePage = ({ page, actions }) => {
const { createPage, deletePage } = actions
if (page.path.includes('404')) {
return Promise.resolve()
}
return new Promise(resolve => {
const newPath = page.path === '/' ? '/' : page.path.slice(0, -1)
const newPage = {
...page,
path: `/en${newPath}`,
context: { locale: 'en-US' },
}
const newPage2 = {
...page,
path: newPath,
context: { locale: 'sv-SE' },
}
deletePage(page)
createPage(newPage)
createPage(newPage2)
resolve()
})
}
exports.createPages = async ({ graphql, actions }) => {
const { createPage } = actions
const pages = await graphql(`
{
allContentfulCase(sort: { fields: [weight], order: ASC }) {
nodes {
name
id
node_locale
}
}
}
`)
const template = path.resolve('src/templates/case.tsx')
const { nodes } = pages.data.allContentfulCase
nodes.forEach(node => {
const availableNodes = nodes.filter(
relatedNode => relatedNode.node_locale === node.node_locale
)
const index = availableNodes.findIndex(n => n.id === node.id)
const nextCase = availableNodes[index + 1] || availableNodes[0]
const prevCase =
availableNodes[index - 1] || availableNodes[availableNodes.length - 1]
const relatedCases = [prevCase.id, nextCase.id]
// Only care about the default pages
if (node.node_locale === 'sv-SE') {
createPage({
path: `/${slugify(node.name)}`,
component: template,
context: {
id: node.id,
locale: 'sv-SE',
isCasePage: true,
relatedCases,
},
})
} else {
createPage({
path: `/en/${slugify(node.name)}`,
component: template,
context: {
id: node.id,
locale: 'en-US',
isCasePage: true,
relatedCases,
},
})
}
})
}