Sfoglia il codice sorgente

feat: navigation save / load

Nicolas Giard 6 anni fa
parent
commit
b26f30ae20

+ 24 - 4
client/components/admin/admin-navigation.vue

@@ -8,6 +8,8 @@
             .headline.primary--text {{$t('navigation.title')}}
             .subheading.grey--text {{$t('navigation.subtitle')}}
           v-spacer
+          v-btn(outline, color='grey', @click='refresh', large)
+            v-icon refresh
           v-btn(color='success', depressed, @click='save', large)
             v-icon(left) check
             span {{$t('common:actions.apply')}}
@@ -185,20 +187,38 @@ export default {
     async save() {
       this.$store.commit(`loadingStart`, 'admin-navigation-save')
       try {
-        await this.$apollo.mutate({
+        const resp = await this.$apollo.mutate({
           mutation: treeSaveMutation,
           variables: {
             tree: this.navTree
           }
         })
+        if (_.get(resp, 'data.navigation.updateTree.responseResult.succeeded', false)) {
+          this.$store.commit('showNotification', {
+            message: this.$t('navigation.saveSuccess'),
+            style: 'success',
+            icon: 'check'
+          })
+        } else {
+          throw new Error(_.get(resp, 'data.navigation.updateTree.responseResult.message', 'An unexpected error occured.'))
+        }
       } catch (err) {
         this.$store.commit('showNotification', {
-          message: this.$t('navigation.saveSuccess'),
-          style: 'success',
-          icon: 'check'
+          message: err.message,
+          style: 'red',
+          icon: 'warning'
         })
       }
       this.$store.commit(`loadingStop`, 'admin-navigation-save')
+    },
+    async refresh() {
+      await this.$apollo.queries.navTree.refetch()
+      this.current = {}
+      this.$store.commit('showNotification', {
+        message: 'Navigation has been refreshed.',
+        style: 'success',
+        icon: 'cached'
+      })
     }
   },
   apollo: {

+ 5 - 11
server/graph/resolvers/navigation.js

@@ -12,22 +12,16 @@ module.exports = {
   },
   NavigationQuery: {
     async tree(obj, args, context, info) {
-      // let renderers = await WIKI.models.renderers.getRenderers()
-      return []
+      return WIKI.models.navigation.getTree()
     }
   },
   NavigationMutation: {
     async updateTree(obj, args, context) {
       try {
-        // for (let rdr of args.renderers) {
-        //   await WIKI.models.storage.query().patch({
-        //     isEnabled: rdr.isEnabled,
-        //     config: _.reduce(rdr.config, (result, value, key) => {
-        //       _.set(result, `${value.key}`, value.value)
-        //       return result
-        //     }, {})
-        //   }).where('key', rdr.key)
-        // }
+        await WIKI.models.navigation.query().patch({
+          config: args.tree
+        }).where('key', 'site')
+
         return {
           responseResult: graphHelper.generateSuccess('Navigation updated successfully')
         }

+ 8 - 2
server/models/navigation.js

@@ -16,12 +16,18 @@ module.exports = class Navigation extends Model {
 
       properties: {
         key: {type: 'string'},
-        config: {type: 'object'}
+        config: {type: 'array', items: {type: 'object'}}
       }
     }
   }
 
   static async getTree() {
-    return WIKI.models.navigation.query()
+    const navTree = await WIKI.models.navigation.query().findOne('key', 'site')
+    if (navTree) {
+      return navTree.config
+    } else {
+      WIKI.logger.warn('Site Navigation is missing or corrupted.')
+      return []
+    }
   }
 }

+ 17 - 0
server/setup.js

@@ -201,6 +201,23 @@ module.exports = () => {
       })
       await guestUser.$relatedQuery('groups').relate(guestGroup.id)
 
+      // Create site nav
+
+      WIKI.logger.info('Creating default site navigation')
+      await WIKI.models.navigation.query().delete().where({ key: 'site' })
+      await WIKI.models.navigation.query().insert({
+        key: 'site',
+        config: JSON.stringify([
+          {
+            icon: 'home',
+            kind: 'link',
+            label: 'Home',
+            target: '/',
+            targetType: 'home'
+          }
+        ])
+      })
+
       WIKI.logger.info('Setup is complete!')
       res.json({
         ok: true,