Spaces:
Sleeping
Sleeping
/** | |
* Copyright (c) Facebook, Inc. and its affiliates. | |
* All rights reserved. | |
* | |
* This source code is licensed under the BSD-style license found in the | |
* LICENSE file in the root directory of this source tree. | |
* | |
* @format | |
*/ | |
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; | |