gatsby-theme-docz
Version:
Gatsby theme created to use Docz
60 lines (57 loc) • 1.51 kB
JavaScript
const { get } = require('lodash/fp')
const { parseConfig } = require('docz-core')
const ENTRIES_QUERY = `
{
allDoczEntries{
edges{
node{
id
filepath
fullpath
route
slug
name
menu
headings {
slug
depth
value
}
}
}
}
}
`
module.exports = async ({ graphql, actions }, opts = {}) => {
return graphql(ENTRIES_QUERY).then(async ({ data, errors }) => {
const hasErrors = errors && errors.length > 0
const entries = get('allDoczEntries.edges', data)
if (!entries || entries.length === 0 || hasErrors) return
const defaultEntry = entries.find(({ node: entry }) => entry.route === '/')
if (defaultEntry === undefined) {
const config = await parseConfig(opts)
// Create a default entry unless specifically denied by config
const shouldNotCreateRootRoute = Boolean(config.noRootRoute)
if (shouldNotCreateRootRoute === false) {
// Set the first found entry as the default entry
const createdDefaultEntry = {
node: {
...entries[0].node,
route: '/',
},
}
entries.unshift(createdDefaultEntry)
}
}
entries.forEach(({ node: entry }) => {
if (!entry) return
actions.createPage({
component: entry.fullpath,
path: entry.route,
context: {
entry,
},
})
})
})
}