diff --git a/src/components/Suggestions.vue b/src/components/Suggestions.vue
index 5f4f169a1a66cb1ba3af24b360778e671d3e2827..6ae68ce521fb982d5b4471a666a4c87d41d2fef3 100644
--- a/src/components/Suggestions.vue
+++ b/src/components/Suggestions.vue
@@ -9,7 +9,7 @@
<img v-if="account._source.getAvatar(account)" :src="account._source.getAvatar(account)" alt="" class="circle">
<span class="title">{{ account._source.getDisplayName(account) }}</span>
<p>{{ account._source.label }}</p>
- <div v-if="isLoading && results[account.id] && results[account.id].results.isLoading">
+ <div v-if="isLoadingSources && results[account.id] && results[account.id].results.isLoading">
<div class="progress">
<div v-if="results[account.id].results.progress === 'indeterminate'" :class="indeterminate"></div>
<div v-else class="determinate" :style="{width: `${results[account.id].results.progress}%`}"></div>
@@ -68,11 +68,15 @@ import axios from 'axios'
export default {
data () {
return {
- isLoading: false,
+ isLoadingSources: false,
+ isLoadingRetribute: false,
results: {},
aggregatedSuggestions: this.$store.state.cache.aggregatedSuggestions || {},
retributeProfiles: this.$store.state.cache.retributeProfiles || {},
loadingRetributeProfiles: [],
+ filters: {
+ retributeOnly: true
+ }
}
},
computed: {
@@ -82,18 +86,33 @@ export default {
return a
})
},
+ allSuggestions () {
+ return Object.values(this.aggregatedSuggestions)
+ },
filteredSuggestions () {
- return orderBy(Object.values(this.aggregatedSuggestions), ['weight', 'id'], ['desc', 'asc'])
+ let self = this
+ let suggestions = this.allSuggestions.filter((s) => {
+ let f = true
+ if (self.filters.retributeOnly) {
+ f = !!this.retributeProfiles[s.fullId]
+ }
+ return f
+ })
+ return orderBy(suggestions, ['weight', 'id'], ['desc', 'asc'])
},
missingRetributeProfiles () {
- return this.filteredSuggestions.filter((s) => {
+ return this.allSuggestions.filter((s) => {
return this.retributeProfiles[s.fullId] === undefined
})
+ },
+ isLoading () {
+ return this.isLoadingSources || this.isLoadingRetribute
}
},
methods: {
clearCache () {
- this.isLoading = false
+ this.isLoadingSources = false
+ this.isLoadingRetribute = false
this.results = {}
this.aggregatedSuggestions = {}
this.retributeProfiles = {}
@@ -129,7 +148,7 @@ export default {
this.retributeProfiles = {}
this.loadingRetributeProfiles = []
}
- this.isLoading = true
+ this.isLoadingSources = true
accounts.forEach((a) => {
let r = {isLoading: true, progress: 'indeterminate', status: ''}
let promise = a._source.fetch({account: a, store: this.$store, results: r, vue: this})
@@ -139,15 +158,18 @@ export default {
for(let i = 0; i < keys.length; i++){
await this.results[keys[i]].promise
}
- this.isLoading = false
+ this.isLoadingSources = false
},
async lookupAll () {
- this.isLoading = true
- const chunkSize = 10
let self = this
const toLoad = this.missingRetributeProfiles.filter((p) => {
return self.loadingRetributeProfiles.indexOf(p.fullId) === -1
})
+ if (toLoad.length === 0) {
+ return
+ }
+ this.isLoadingRetribute = true
+ const chunkSize = 10
// lock
toLoad.forEach((p) => {
self.loadingRetributeProfiles.push(p.fullId)
@@ -160,7 +182,7 @@ export default {
})
await this.lookups(ids)
}
- this.isLoading = false
+ this.isLoadingRetribute = false
},
async lookups(ids) {