Newer
Older
<div class="autocomplete-container" :class="$vuetify.breakpoint.name">
<v-combobox accesskey="s" aria-label="søkefelt"
v-model="select"
:loading="loading"
:items="items"
:search-input.sync="search"
item-text="label"
:menu-props="{maxHeight: $vuetify.breakpoint.name === 'xs' ? 190 : 500, transition: 'fade-transition', allowOverflow: true}"
:append-icon="null"
full-width
({{data.item.lang? data.item.lang[1] ? "bm, nn" : {"bob": "bm", "nob": "nn"}[data.item.lang[0]] : data.item.mode}})
<template slot="no-data">
<div></div>
</template>
},
data: function() {
return {
loading: false,
items: [],
search: null,
}
},
watch: {
search (val) {
const time = Date.now()
if (! val) {
this.items = []
} else {
this.run_query(val, time)
this.items = []
this.submit(item)
run_query(q, time) {
// Keep full text search in the list while requesting suggestions
if (this.items[0].time < time) {
this.items.splice(0,1, {q: q, label: q, time: time, mode: 'fritekst'})
else {
this.items.push({q: q, label: q, time: time})
}
self.api.get('suggest?', {params: {q: q, dict: self.$parent.lang, n: 80, scope: 'nf'}})
if (self.$refs.autocomplete.searchInput == q & self.suggesting) {
let word_hits = response.data.a.n.map(item => ({q: q, match: item[0], label: item[0], time: time, lang: item[1]}))
let text_hits = response.data.a.f.map(item => ({q: q, match: item[0], label: item[0], time: time, mode: 0}))
if( q.charAt(q.length-1) === '!') hits = text_hits.concat(word_hits)
else hits = word_hits.concat(text_hits)
if (/_|\*|\|/.test(q)) {
hits.push({q: q, label: q + ' ', time: time, mode: "mønster"})
}
response.data.a.n.forEach((item) => {
let hit = {q: q, match: match, label: match, time: time, lang: item[1]}
response.data.a.f.forEach((item) => {
let match = item[0]
let hit = {q: q, match: match, label: match, time: time, mode: "fulltekst"}
hits.push(hit)
});
// whitespace necessary because duplicates aren't allowed in the dropdown
hits.push({q: q, label: q + ' ', time: time, mode: "fritekst"})
self.items = hits
}
self.loading = false
})
submit(item) {
this.$emit('submit', item)
let self = this
setTimeout(() => {
self.$refs.autocomplete.$refs.input.select()
this.items = []
this.suggesting = false
}, 1)
}
<style scoped>
.search-hit {
font-weight: bold;
margin-right: 5px;
color: var(--v-primary-base);
padding-left: 10px;
padding-right: 10px;