2
0

navigation.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. const Model = require('objection').Model
  2. const _ = require('lodash')
  3. /* global WIKI */
  4. /**
  5. * Navigation model
  6. */
  7. module.exports = class Navigation extends Model {
  8. static get tableName() { return 'navigation' }
  9. static get idColumn() { return 'key' }
  10. static get jsonSchema () {
  11. return {
  12. type: 'object',
  13. required: ['key'],
  14. properties: {
  15. key: {type: 'string'},
  16. config: {type: 'array', items: {type: 'object'}}
  17. }
  18. }
  19. }
  20. static async getTree({ cache = false, locale = 'en' } = {}) {
  21. if (cache) {
  22. const navTreeCached = await WIKI.cache.get(`nav:sidebar:${locale}`)
  23. if (navTreeCached) {
  24. return navTreeCached
  25. }
  26. }
  27. const navTree = await WIKI.models.navigation.query().findOne('key', 'site')
  28. if (navTree) {
  29. // Check for pre-2.1 format
  30. if (_.has(navTree.config[0], 'kind')) {
  31. navTree.config = [{
  32. locale: 'en',
  33. items: navTree.config
  34. }]
  35. }
  36. for (const tree of navTree.config) {
  37. if (cache) {
  38. await WIKI.cache.set(`nav:sidebar:${tree.locale}`, tree.items, 300)
  39. }
  40. }
  41. return locale === 'all' ? navTree.config : WIKI.cache.get(`nav:sidebar:${locale}`)
  42. } else {
  43. WIKI.logger.warn('Site Navigation is missing or corrupted.')
  44. return []
  45. }
  46. }
  47. }