From c539cfe5d649b373954ea2fbaf518d75b952bf98 Mon Sep 17 00:00:00 2001
From: Henrik Askjer <henrik.askjer@uib.no>
Date: Tue, 30 Nov 2021 15:44:34 +0100
Subject: [PATCH] refactor & fix routing bugs

---
 src/components/Autocomplete.vue   |  6 ++++--
 src/components/DictionaryView.vue | 32 +++++++++++++++++--------------
 src/components/SearchToolbar.vue  | 14 ++++++--------
 3 files changed, 28 insertions(+), 24 deletions(-)

diff --git a/src/components/Autocomplete.vue b/src/components/Autocomplete.vue
index b2f06ce5..5de6d4ff 100644
--- a/src/components/Autocomplete.vue
+++ b/src/components/Autocomplete.vue
@@ -80,7 +80,7 @@ import Menu from './Menu.vue'
         loading: false,
         items: [],
         search: null,
-        select: null,
+        select: this.$route.query? this.$route.query.q : null,
         suggesting: null,
         menuDialog: false
       }
@@ -129,7 +129,9 @@ import Menu from './Menu.vue'
           this.items.push({q: q, label: q, time: time, search: search})
         }
         let self = this
-        self.api.get('suggest?', {params: {q: q, dict: self.get_lang(), n: 80, scope: self.$parent.scope, dform: 'int', meta: 'n', wc: self.$parent.pos_selected}})
+        let params = {q: q, dict: self.get_lang(), n: 80, scope: self.$parent.scope, dform: 'int', meta: 'n'}
+        if ( self.$parent.pos_selected != "ALL") params.wc = self.$parent.pos_selected
+        self.api.get('suggest?', {params})
             .then(async (response) => {
                         if (self.$refs.autocomplete.searchInput == q & self.suggesting) {
                           let suggestions = response.data.a.w.map(item => ({q: q, match: item[0], label: item[0], time: time, lang: [item[1]]}))
diff --git a/src/components/DictionaryView.vue b/src/components/DictionaryView.vue
index 8170a4dc..8bbcbb60 100644
--- a/src/components/DictionaryView.vue
+++ b/src/components/DictionaryView.vue
@@ -110,7 +110,9 @@ function navigate_to_query(self, word) {
   let  query = self.event ? self.event : {q: word} 
   
   // Get article IDs
-  api.get('articles?', {params: {w: query.match || query.q, dict: self.lang, scope: self.scope, meta: 'n', wc: self.pos_selected}}).then((response) => {
+  let params = {w: query.match || query.q, dict: self.lang, scope: self.scope, meta: 'n'}
+  if (self.pos_selected != "ALL") params.wc = self.pos_selected
+  api.get('articles?', {params}).then((response) => {
             let article_ids = response.data
             let unwrapped = []
             for (const d in article_ids) {
@@ -189,7 +191,8 @@ export default {
       monthly_nn: null,
       event: null,
       previous: this.$route.fullPath,
-      scope: "w"
+      scope: "w",
+      pos_selected: "ALL"
     }
   },
   computed: {
@@ -233,10 +236,12 @@ export default {
           props: track_props
         })
       },
+
       pos_param: function() {
         if (this.pos_selected) return this.pos_selected.toLowerCase()
         return ""
       },
+
       reload_params: function() {
         let q = (this.$route.query || this.$route.params).q
         if (q) {
@@ -246,6 +251,7 @@ export default {
           navigate_to_query(this, q)
         } 
       },
+
       update_lang_form: function (lang) {
         this.lang = lang
         this.reload_params()
@@ -258,6 +264,7 @@ export default {
         this.pos_selected = pos
         this.reload_params()
       },
+
     article_link_click: function(item) {
       if (this.article && this.article.article_id == item.article_id){
         this.article_key++
@@ -282,7 +289,13 @@ export default {
   },
   mounted: function(){
     let self = this
-    this.lang = 'bm,nn'
+    self.lang = self.$route.params.lang || "bm,nn"
+    if (self.$route.query.pos) {
+    self.pos_selected = self.$route.query.pos.toUpperCase()
+    }
+    if (self.$route.query.scope) {
+      self.scope = self.$route.query.scope
+    } 
     Promise.all([
       axios.get(ARTICLE_ENDPOINT + 'bm/concepts.json').then(function(response){
         let concepts = response.data.concepts
@@ -294,30 +307,19 @@ export default {
       })
     ]).then(function(_) {
       self.waiting_for_metadata = false
-
       if (self.$route.name == 'query') {
-        self.lang = self.$route.params.lang
-        if (self.$route.query.pos) {
-          self.pos_selected = self.$route.query.pos.toUpperCase()
-        }
-        if (self.$route.query.scope) {
-          self.scope = self.$route.query.scope
-        }
         navigate_to_query(self, self.$route.query.q)
       }
       else if(self.$route.name == 'search') {
-        self.lang = self.$route.params.lang
         navigate_to_query(self, self.$route.params.query)
       } 
       else if(self.$route.name == 'word') {
-        self.lang = self.$route.params.lang
         navigate_to_query(self, self.$route.params.query)
       }
       else if(self.$route.name == 'lookup'){
         navigate_to_article(self, self.$route.path)
       }
       else {
-        self.lang = self.$route.params.lang || self.lang
         self.waiting_for_articles = false
         history.replaceState({article: self.article, 
                               search_results: self.search_results, 
@@ -353,6 +355,8 @@ export default {
         self.article = event.state.article
         self.search_results = event.state.search_results
         self.lang = event.state.lang
+        self.pos_selected = event.pos_selected
+        self.scope = event.scope
         self.error = event.state.error
       }
     }
diff --git a/src/components/SearchToolbar.vue b/src/components/SearchToolbar.vue
index 94048bff..8bf886a4 100644
--- a/src/components/SearchToolbar.vue
+++ b/src/components/SearchToolbar.vue
@@ -4,7 +4,7 @@
           <v-row >
           <v-col :cols="$vuetify.breakpoint.mdAndUp ? 3 : 12">
             <v-select rounded 
-                v-model="pos_selected"
+                v-model="$parent.pos_selected"
                 hide-details
                 outlined
                 flat
@@ -15,7 +15,7 @@
           </v-col>
           <v-col :cols="$vuetify.breakpoint.mdAndUp ? 3 : 12">
             <v-select rounded 
-                v-model="scope_selected"
+                v-model="$parent.scope"
                 hide-details=""
                 outlined
                 dense
@@ -34,11 +34,9 @@ export default {
     name: "SearchToolbar",
     data() {
       return { 
-        pos_selected: {text: this.$t("pos.ALL") , value: "ALL"},
-        pos_items:    ["ALL", "NOUN", "PRON","DET","ADJ","CCONJ","SCONJ", "ADV", "VERB", "INTJ"].map(text =>{
+        pos_items: ["ALL", "NOUN", "PRON","DET","ADJ","CCONJ","SCONJ", "ADV", "VERB", "INTJ"].map(text =>{
           return {text: this.$t("pos." + text ), value: text}
         }),
-        scope_selected: {text: this.$t("scope.w"), value: "w"},
         scope_items: ["w", "x", "wx"].map(text => {
           return {text: this.$t("scope." + text), value: text}
         })
@@ -46,12 +44,12 @@ export default {
     },
     methods: {
       updatePos (pos) {
-        this.$emit('updatePos', pos == 'ALL' ? null : pos)
+        this.$emit('updatePos', pos)
       },
       updateScope (scope) {
         this.$emit('updateScope', scope)
-      }
-    }
+      },
+  }
 }
 </script>
 
-- 
GitLab