feat: sidebar rendering
This commit is contained in:
@@ -75,7 +75,8 @@ router.get('/*', async (req, res, next) => {
|
||||
isPrivate: false
|
||||
})
|
||||
if (page) {
|
||||
res.render('page', { page })
|
||||
const sidebar = await WIKI.models.navigation.getTree({ cache: true })
|
||||
res.render('page', { page, sidebar })
|
||||
} else if (pageArgs.path === 'home') {
|
||||
res.render('welcome')
|
||||
} else {
|
||||
|
@@ -21,6 +21,7 @@ module.exports = {
|
||||
await WIKI.models.navigation.query().patch({
|
||||
config: args.tree
|
||||
}).where('key', 'site')
|
||||
await WIKI.redis.set('nav:sidebar', JSON.stringify(args.tree), 'EX', 300)
|
||||
|
||||
return {
|
||||
responseResult: graphHelper.generateSuccess('Navigation updated successfully')
|
||||
|
@@ -21,9 +21,18 @@ module.exports = class Navigation extends Model {
|
||||
}
|
||||
}
|
||||
|
||||
static async getTree() {
|
||||
static async getTree({ cache = false } = {}) {
|
||||
if (cache) {
|
||||
const navTreeCached = await WIKI.redis.get('nav:sidebar')
|
||||
if (navTreeCached) {
|
||||
return JSON.parse(navTreeCached)
|
||||
}
|
||||
}
|
||||
const navTree = await WIKI.models.navigation.query().findOne('key', 'site')
|
||||
if (navTree) {
|
||||
if (cache) {
|
||||
await WIKI.redis.set('nav:sidebar', JSON.stringify(navTree.config), 'EX', 300)
|
||||
}
|
||||
return navTree.config
|
||||
} else {
|
||||
WIKI.logger.warn('Site Navigation is missing or corrupted.')
|
||||
|
@@ -1,4 +1,5 @@
|
||||
const path = require('path')
|
||||
const uuid = require('uuid/v4')
|
||||
|
||||
/* global WIKI */
|
||||
|
||||
@@ -209,6 +210,7 @@ module.exports = () => {
|
||||
key: 'site',
|
||||
config: [
|
||||
{
|
||||
id: uuid(),
|
||||
icon: 'home',
|
||||
kind: 'link',
|
||||
label: 'Home',
|
||||
|
@@ -16,4 +16,17 @@ block body
|
||||
:author-id=page.authorId
|
||||
:is-published=page.isPublished
|
||||
)
|
||||
template(slot='sidebar')
|
||||
each navItem in sidebar
|
||||
if navItem.kind === 'link'
|
||||
v-list-tile(
|
||||
href=navItem.target
|
||||
)
|
||||
v-list-tile-avatar
|
||||
v-icon= navItem.icon
|
||||
v-list-tile-title= navItem.label
|
||||
else if navItem.kind === 'divider'
|
||||
v-divider.my-2
|
||||
else if navItem.kind === 'header'
|
||||
v-subheader.pl-4= navItem.label
|
||||
template(slot='contents')!= page.render
|
||||
|
Reference in New Issue
Block a user