diff --git a/core/gatsby-theme-docz/src/node/createPages.js b/core/gatsby-theme-docz/src/node/createPages.js index d7d3e6f6f..be28bce5d 100644 --- a/core/gatsby-theme-docz/src/node/createPages.js +++ b/core/gatsby-theme-docz/src/node/createPages.js @@ -1,35 +1,42 @@ const path = require('path') const { getDoczConfig } = require('../utils/parseConfig') -const parseDatabase = data => { - try { - return JSON.parse(data.doczDb.db) - } catch (err) { - return null - } -} - const mountRoute = (base = '/', route) => { return `${base === '/' ? '' : base}${route}` } +const ENTRIES_QUERY = ` + { + allDoczEntries{ + edges{ + node{ + id + filepath + route + slug + name + menu + order + headings { + slug + depth + value + } + } + } + } + } +` + module.exports = ({ graphql, actions }, opts) => { const { paths, ...config } = getDoczConfig(opts) - return graphql(` - { - doczDb { - id - db - } - } - `).then(({ data, errors }) => { - const db = parseDatabase(data) + return graphql(ENTRIES_QUERY).then(({ data, errors }) => { const hasErrors = errors && errors.length > 0 - const hasEntries = db && db.entries && db.entries.length > 0 - if (!hasEntries || hasErrors) return + const entries = data.allDoczEntries.edges + if (!entries || entries.length === 0 || hasErrors) return - db.entries.forEach(({ value: entry }) => { + entries.forEach(({ node: entry }) => { if (!entry) return const component = path.join(paths.root, entry.filepath) actions.createPage({ diff --git a/core/gatsby-theme-docz/src/node/sourceNodes.js b/core/gatsby-theme-docz/src/node/sourceNodes.js index f0bda1a29..0024cf997 100644 --- a/core/gatsby-theme-docz/src/node/sourceNodes.js +++ b/core/gatsby-theme-docz/src/node/sourceNodes.js @@ -2,6 +2,7 @@ const crypto = require('crypto') const fs = require('fs-extra') const { Entries, DataServer, states } = require('docz-core') const { parseConfig } = require('../utils/parseConfig') +const { omit } = require('lodash/fp') const digest = str => crypto @@ -27,7 +28,7 @@ module.exports = async ({ actions, createNodeId }, opts) => { process.exit(1) } - dataServer.onStateChange(async ({ type, payload }) => { + const createDbNode = async () => { const db = await fs.readJSON(config.paths.db) const contentDigest = digest(JSON.stringify(db)) @@ -40,5 +41,30 @@ module.exports = async ({ actions, createNodeId }, opts) => { type: 'DoczDb', }, }) + } + + const createEntriesNode = async () => { + const map = await entries.get() + const contentDigest = digest(JSON.stringify(map)) + const values = Object.entries(map) + + values.forEach(([key, entry]) => { + createNode({ + ...entry, + children: [], + internal: { + contentDigest, + type: 'DoczEntries', + }, + }) + }) + } + + await createDbNode() + await createEntriesNode() + + dataServer.onStateChange(async () => { + await createDbNode() + await createEntriesNode() }) } diff --git a/examples/gatsby/doczrc.js b/examples/gatsby/doczrc.js new file mode 100644 index 000000000..404ff5523 --- /dev/null +++ b/examples/gatsby/doczrc.js @@ -0,0 +1,3 @@ +export default { + menu: ['Home', 'Components'], +}