Commit 763bf4b9 authored by Nicolas Giard's avatar Nicolas Giard

feat: sidebar rendering

parent 0b5a4e0c
<template lang="pug"> <template lang="pug">
v-list(dense, :class='color', :dark='dark') v-list.py-2(dense, :class='color', :dark='dark')
v-list-tile.pt-2(href='/') slot
v-list-tile-avatar: v-icon home
v-list-tile-title Home
v-divider.my-2
v-subheader.pl-4 Navigation
v-list-tile
v-list-tile-avatar: v-icon stars
v-list-tile-title The Universe
v-list-tile
v-list-tile-avatar: v-icon directions_boat
v-list-tile-title Ships
v-list-tile
v-list-tile-avatar: v-icon local_airport
v-list-tile-title Airports
</template> </template>
<script> <script>
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
v-model='navShown' v-model='navShown'
) )
nav-sidebar nav-sidebar
slot(name='sidebar')
v-content v-content
v-toolbar(color='grey lighten-3', flat, dense) v-toolbar(color='grey lighten-3', flat, dense)
......
...@@ -75,7 +75,8 @@ router.get('/*', async (req, res, next) => { ...@@ -75,7 +75,8 @@ router.get('/*', async (req, res, next) => {
isPrivate: false isPrivate: false
}) })
if (page) { 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') { } else if (pageArgs.path === 'home') {
res.render('welcome') res.render('welcome')
} else { } else {
......
...@@ -21,6 +21,7 @@ module.exports = { ...@@ -21,6 +21,7 @@ module.exports = {
await WIKI.models.navigation.query().patch({ await WIKI.models.navigation.query().patch({
config: args.tree config: args.tree
}).where('key', 'site') }).where('key', 'site')
await WIKI.redis.set('nav:sidebar', JSON.stringify(args.tree), 'EX', 300)
return { return {
responseResult: graphHelper.generateSuccess('Navigation updated successfully') responseResult: graphHelper.generateSuccess('Navigation updated successfully')
......
...@@ -21,9 +21,18 @@ module.exports = class Navigation extends Model { ...@@ -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') const navTree = await WIKI.models.navigation.query().findOne('key', 'site')
if (navTree) { if (navTree) {
if (cache) {
await WIKI.redis.set('nav:sidebar', JSON.stringify(navTree.config), 'EX', 300)
}
return navTree.config return navTree.config
} else { } else {
WIKI.logger.warn('Site Navigation is missing or corrupted.') WIKI.logger.warn('Site Navigation is missing or corrupted.')
......
const path = require('path') const path = require('path')
const uuid = require('uuid/v4')
/* global WIKI */ /* global WIKI */
...@@ -209,6 +210,7 @@ module.exports = () => { ...@@ -209,6 +210,7 @@ module.exports = () => {
key: 'site', key: 'site',
config: [ config: [
{ {
id: uuid(),
icon: 'home', icon: 'home',
kind: 'link', kind: 'link',
label: 'Home', label: 'Home',
......
...@@ -16,4 +16,17 @@ block body ...@@ -16,4 +16,17 @@ block body
:author-id=page.authorId :author-id=page.authorId
:is-published=page.isPublished :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 template(slot='contents')!= page.render
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment