| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| const React = require('react'); |
| const fs = require('fs-extra'); |
| const path = require('path'); |
| const join = path.join; |
| const CWD = process.cwd(); |
|
|
| const CompLibrary = require(join( |
| CWD, |
| '/node_modules/docusaurus/lib/core/CompLibrary.js', |
| )); |
| const SideNav = require(join( |
| CWD, |
| '/node_modules/docusaurus/lib/core/nav/SideNav.js', |
| )); |
|
|
| const Container = CompLibrary.Container; |
|
|
| const OVERVIEW_ID = 'tutorial_overview'; |
|
|
| class TutorialSidebar extends React.Component { |
| render() { |
| const {currentTutorialID} = this.props; |
| const current = { |
| id: currentTutorialID || OVERVIEW_ID, |
| }; |
|
|
| const toc = [ |
| { |
| type: 'CATEGORY', |
| title: 'Tutorials', |
| children: [ |
| { |
| type: 'LINK', |
| item: { |
| permalink: 'tutorials/', |
| id: OVERVIEW_ID, |
| title: 'Overview', |
| }, |
| }, |
| ], |
| }, |
| ]; |
|
|
| const jsonFile = join(CWD, 'tutorials.json'); |
| const normJsonFile = path.normalize(jsonFile); |
| const json = JSON.parse(fs.readFileSync(normJsonFile, {encoding: 'utf8'})); |
|
|
| Object.keys(json).forEach(category => { |
| const categoryItems = json[category]; |
| const items = []; |
| categoryItems.map(item => { |
| items.push({ |
| type: 'LINK', |
| item: { |
| permalink: `tutorials/${item.id}`, |
| id: item.id, |
| title: item.title, |
| }, |
| }); |
| }); |
|
|
| toc.push({ |
| type: 'CATEGORY', |
| title: category, |
| children: items, |
| }); |
| }); |
|
|
| return ( |
| <Container className="docsNavContainer" id="docsNav" wrapper={false}> |
| <SideNav |
| language={'tutorials'} |
| root={'tutorials'} |
| title="Tutorials" |
| contents={toc} |
| current={current} |
| /> |
| </Container> |
| ); |
| } |
| } |
|
|
| module.exports = TutorialSidebar; |
|
|