From 94f7806358d547025fc78abb6cd9b209f268d167 Mon Sep 17 00:00:00 2001 From: "thomas.blanc.2@etu.univ-amu.fr" <gltron3000@gmail.com> Date: Sat, 23 May 2020 16:18:45 +0200 Subject: [PATCH] Added verified support --- src/api.js | 14 ++++++++++++++ src/components/Filters.vue | 19 +++++++------------ src/components/ModelCard.vue | 2 +- src/components/ModelTable.vue | 2 +- src/views/Admin.vue | 34 +++++++++++++++++++++++++++------- src/views/Model.vue | 2 +- src/views/Search.vue | 5 +++-- 7 files changed, 54 insertions(+), 24 deletions(-) diff --git a/src/api.js b/src/api.js index 7d02836..2b32494 100644 --- a/src/api.js +++ b/src/api.js @@ -288,5 +288,19 @@ export const api = { } catch (error) { return null } + }, + async setVerified (id) { + const url = serverurl + 'models/setVerified' + '?id=' + id + const token = await localStorage.getItem('token') + const response = await fetch(url, { + headers: { + Authorization: 'Bearer ' + token + } + }) + try { + return await response.json() + } catch (error) { + return null + } } } diff --git a/src/components/Filters.vue b/src/components/Filters.vue index 4e77197..dd404d4 100644 --- a/src/components/Filters.vue +++ b/src/components/Filters.vue @@ -1,13 +1,16 @@ <template> <b-menu> <div> + <b-menu-list label="Verified"> + <b-checkbox v-model="verifiedOnly" @input="changeTag">Verified models only</b-checkbox> + </b-menu-list> <b-menu-list v-for="category in tags" v-bind:key="category.name" :label="category.name"> - <div v-for="tag in category.tags" v-bind:key="tag.name" class="field"> + <b-field v-for="tag in category.tags" v-bind:key="tag.name"> <b-checkbox :native-value="tag.name" v-model="checkboxGroup" @input="changeTag">{{tag.name}}</b-checkbox> - </div> + </b-field> </b-menu-list> </div> </b-menu> @@ -20,20 +23,12 @@ export default { data () { return { checkboxGroup: [], - perfValue: 0 + verifiedOnly: false } }, methods: { changeTag () { - this.$emit('setTags', this.checkboxGroup, this.convertPerf()) - }, - convertPerf () { - switch (this.perfValue) { - case 0 : return 10 - case 1 : return 100 - case 2 : return 1000 - case 3 : return 10000 - } + this.$emit('setTags', this.checkboxGroup, this.verifiedOnly) } } } diff --git a/src/components/ModelCard.vue b/src/components/ModelCard.vue index 6cd31f9..b060b67 100644 --- a/src/components/ModelCard.vue +++ b/src/components/ModelCard.vue @@ -5,7 +5,7 @@ <div class="media-content"> <div class="content"> <p> - <strong>{{model.name}}</strong> + <strong>{{model.name}}</strong> <b-icon v-if="model.isVerified" type="is-success" icon="check"/> <br> <small>{{model.author.username}}</small> - <small>{{new Date(model.lastModified).toLocaleDateString()}}</small> <br> diff --git a/src/components/ModelTable.vue b/src/components/ModelTable.vue index 40f4ae0..325a331 100644 --- a/src/components/ModelTable.vue +++ b/src/components/ModelTable.vue @@ -2,7 +2,7 @@ <b-table :data="models" :loading="isLoading" striped hoverable> <template slot-scope="props"> <b-table-column field="name" label="Model name" searchable sortable> - {{ props.row.name }} + {{ props.row.name }} <b-icon v-if="props.row.isVerified" icon="check"/> </b-table-column> <b-table-column field="vote" label="Votes" sortable> diff --git a/src/views/Admin.vue b/src/views/Admin.vue index faffdef..505e8ce 100644 --- a/src/views/Admin.vue +++ b/src/views/Admin.vue @@ -10,20 +10,26 @@ {{ props.row.name }} </b-table-column> + <b-table-column field="verified" label="Verified status" sortable> + <b-icon v-if="props.row.isVerified" icon="check"/> + <b-icon v-else icon="close"/> + </b-table-column> + <b-table-column field="vote" label="Votes" sortable> {{ props.row.votes }} </b-table-column> <b-table-column field="date" label="Last modification" centered sortable> - {{ new Date(props.row.modificationDate).toLocaleDateString() }} + {{ new Date(props.row.lastModified).toLocaleDateString() }} </b-table-column> <b-table-column field="date" label="Added" centered sortable> - {{ new Date(props.row.addedDate).toLocaleDateString() }} + {{ new Date(props.row.added).toLocaleDateString() }} </b-table-column> <b-table-column label="" centered> <b-button class="actionButton" icon-left="eye" type="is-info" tag="router-link" :to="{ name: 'Model', query: { id: props.row.id } }" outlined/> + <b-button class="actionButton" icon-left="check" type="is-success" @click="setVerifiedPrompt(props.row.id, props.row.name)" outlined/> <b-button class="actionButton" icon-left="delete" type="is-danger" @click="removePrompt(props.row.id, props.row.name, 'model')" outlined/> </b-table-column> </template> @@ -136,11 +142,11 @@ export default { hasIcon: true, onConfirm: async () => { switch (mode) { - case 'user' : api.removeUser(id); break - case 'model' : api.removeModel(id); break - case 'tag' : api.removeTag(id); break - case 'category' : api.removeCategory(id); break - case 'comment' : api.removeComment(id); break + case 'user' : await api.removeUser(id); break + case 'model' : await api.removeModel(id); break + case 'tag' : await api.removeTag(id); break + case 'category' : await api.removeCategory(id); break + case 'comment' : await api.removeComment(id); break } this.$buefy.toast.open(name + ' deleted') this.modelList = await api.getModelList() @@ -175,6 +181,20 @@ export default { this.tagList = await api.getTags() } }) + }, + setVerifiedPrompt (id, name) { + this.$buefy.dialog.confirm({ + message: 'Set verified status for ' + name + ' ?', + cancelText: 'Abort', + confirmText: 'Set', + type: 'is-success', + hasIcon: true, + onConfirm: async () => { + await api.setVerified(id) + this.$buefy.toast.open(name + ' verified status has been changed') + this.modelList = await api.getModelList() + } + }) } } } diff --git a/src/views/Model.vue b/src/views/Model.vue index 1969ae6..bee3185 100644 --- a/src/views/Model.vue +++ b/src/views/Model.vue @@ -7,7 +7,7 @@ <div v-else> <div class="columns box"> <div class="column is-two-thirds"> - <h1 class="title is-1">{{model.name}}</h1> + <h1 class="title is-1">{{model.name}} <b-tag v-if="model.isVerified" type="is-success" size="is-large">Verified</b-tag></h1> <h2 class="subtitle">{{model.shortDescription}}</h2> <b-taglist> <b-tag v-for="tag in model.tags" v-bind:key="tag.name" type="is-info">{{tag.name}}</b-tag> diff --git a/src/views/Search.vue b/src/views/Search.vue index 217c53f..61995af 100644 --- a/src/views/Search.vue +++ b/src/views/Search.vue @@ -54,6 +54,7 @@ export default { paramTags: '', paramSearch: '', paramOrder: '', + paramVerified: false, resultSize: 10, page: 1, isLoading: true @@ -78,9 +79,9 @@ export default { this.paramOrder = order this.result = await api.search(this.paramSearch, this.paramTags, null, this.paramOrder, this.resultSize, this.page) }, - async setTags (tags, perfValue) { + async setTags (tags, verifiedOnly) { this.paramTags = tags - this.paramPerf = perfValue + this.paramVerified = verifiedOnly this.result = await api.search(this.paramSearch, this.paramTags, null, this.paramOrder, this.resultSize, this.page) } } -- GitLab