mirror of
https://github.com/codex-team/codex.docs.git
synced 2025-07-19 05:09:41 +02:00
Show created pages in menu (#11)
* Show created pages in menu * reverse children sorting
This commit is contained in:
parent
730eff7995
commit
f845a0d09f
4 changed files with 65 additions and 18 deletions
|
@ -5,8 +5,10 @@ const home = require('./home');
|
|||
const pages = require('./pages');
|
||||
const api = require('./api');
|
||||
|
||||
router.use('/', home);
|
||||
router.use('/', pages);
|
||||
const pagesMiddleware = require('./middlewares/pages');
|
||||
|
||||
router.use('/', pagesMiddleware, home);
|
||||
router.use('/', pagesMiddleware, pages);
|
||||
router.use('/api', api);
|
||||
|
||||
module.exports = router;
|
||||
|
|
33
src/routes/middlewares/pages.js
Normal file
33
src/routes/middlewares/pages.js
Normal file
|
@ -0,0 +1,33 @@
|
|||
const Pages = require('../../controllers/pages');
|
||||
const asyncMiddleware = require('../../utils/asyncMiddleware');
|
||||
|
||||
/**
|
||||
* Process one-level pages list to parent-childrens list
|
||||
* @param {Page[]} pages - list of all available pages
|
||||
* @return {Page[]}
|
||||
*/
|
||||
function createMenuTree(pages) {
|
||||
return pages.filter(page => page._parent === '0').map(page => {
|
||||
return Object.assign({
|
||||
children: pages.filter(child => child._parent === page._id).reverse()
|
||||
}, page.data);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Middleware for all /page/... routes
|
||||
* @param req
|
||||
* @param res
|
||||
* @param next
|
||||
*/
|
||||
module.exports = asyncMiddleware(async function (req, res, next) {
|
||||
try {
|
||||
const menu = await Pages.getAll();
|
||||
|
||||
res.locals.menu = createMenuTree(menu);
|
||||
} catch (error) {
|
||||
console.log('Can not load menu:', error);
|
||||
}
|
||||
|
||||
next();
|
||||
});
|
11
src/utils/asyncMiddleware.js
Normal file
11
src/utils/asyncMiddleware.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
/**
|
||||
* Helper for making async middlewares for express router
|
||||
* @param fn
|
||||
* @return {function(*=, *=, *=)}
|
||||
*/
|
||||
module.exports = function asyncMiddlware(fn) {
|
||||
return (req, res, next) => {
|
||||
Promise.resolve(fn(req, res, next))
|
||||
.catch(next);
|
||||
};
|
||||
};
|
|
@ -1,19 +1,20 @@
|
|||
<div class="docs-aside">
|
||||
{% for firstLevelPage in menu %}
|
||||
<section class="docs-aside__section">
|
||||
<a class="docs-aside__section-title" href="">
|
||||
Base concepts
|
||||
<a class="docs-aside__section-title" href="/page/{{ firstLevelPage._id }}">
|
||||
{{ firstLevelPage.title }}
|
||||
</a>
|
||||
{% if firstLevelPage.children is not empty %}
|
||||
<ul class="docs-aside__section-list">
|
||||
{% for child in firstLevelPage.children %}
|
||||
<li>
|
||||
<a href="">
|
||||
Insallation
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="">
|
||||
Usage
|
||||
<a href="/page/{{ child._id }}">
|
||||
{{ child.title }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</section>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue