See #890: make report category updatable
This commit is contained in:
parent
728160c71d
commit
94b9db062d
|
@ -29,8 +29,10 @@
|
||||||
<translate translate-context="*/*/*">Category</translate>
|
<translate translate-context="*/*/*">Category</translate>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<i class="tag icon"></i>
|
<report-category-dropdown
|
||||||
{{ obj.type }}
|
class="field"
|
||||||
|
:value="obj.type"
|
||||||
|
@input="update({type: $event})"></report-category-dropdown>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -210,9 +212,11 @@ import axios from 'axios'
|
||||||
import { diffWordsWithSpace } from 'diff'
|
import { diffWordsWithSpace } from 'diff'
|
||||||
import NoteForm from '@/components/manage/moderation/NoteForm'
|
import NoteForm from '@/components/manage/moderation/NoteForm'
|
||||||
import NotesThread from '@/components/manage/moderation/NotesThread'
|
import NotesThread from '@/components/manage/moderation/NotesThread'
|
||||||
|
import ReportCategoryDropdown from '@/components/moderation/ReportCategoryDropdown'
|
||||||
import entities from '@/entities'
|
import entities from '@/entities'
|
||||||
import showdown from 'showdown'
|
import showdown from 'showdown'
|
||||||
|
|
||||||
|
|
||||||
function castValue (value) {
|
function castValue (value) {
|
||||||
if (value === null || value === undefined) {
|
if (value === null || value === undefined) {
|
||||||
return ''
|
return ''
|
||||||
|
@ -228,6 +232,7 @@ export default {
|
||||||
components: {
|
components: {
|
||||||
NoteForm,
|
NoteForm,
|
||||||
NotesThread,
|
NotesThread,
|
||||||
|
ReportCategoryDropdown,
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
@ -290,7 +295,7 @@ export default {
|
||||||
} else {
|
} else {
|
||||||
return this.obj.target_state._target
|
return this.obj.target_state._target
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
remove () {
|
remove () {
|
||||||
|
@ -306,6 +311,17 @@ export default {
|
||||||
self.isLoading = false
|
self.isLoading = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
update (payload) {
|
||||||
|
let url = `manage/moderation/reports/${this.obj.uuid}/`
|
||||||
|
let self = this
|
||||||
|
this.isLoading = true
|
||||||
|
axios.patch(url, payload).then((response) => {
|
||||||
|
self.$emit('updated', payload)
|
||||||
|
self.isLoading = false
|
||||||
|
}, error => {
|
||||||
|
self.isLoading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
resolve (v) {
|
resolve (v) {
|
||||||
let url = `manage/moderation/reports/${this.obj.uuid}/`
|
let url = `manage/moderation/reports/${this.obj.uuid}/`
|
||||||
let self = this
|
let self = this
|
||||||
|
|
|
@ -39,6 +39,16 @@ export default {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
report_type: {
|
||||||
|
label: this.$pgettext('*/*/*', 'Category'),
|
||||||
|
choices: {
|
||||||
|
takedown_request: this.$pgettext("Content/Moderation/Dropdown", "Takedown request"),
|
||||||
|
invalid_metadata: this.$pgettext("Content/Moderation/Dropdown", "Invalid metadata"),
|
||||||
|
illegal_content: this.$pgettext("Content/Moderation/Dropdown", "Illegal content"),
|
||||||
|
offensive_content: this.$pgettext("Content/Moderation/Dropdown", "Offensive content"),
|
||||||
|
other: this.$pgettext("Content/Moderation/Dropdown", "Other"),
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
filters: {
|
filters: {
|
||||||
creation_date: this.$pgettext('Content/*/*/Noun', 'Creation date'),
|
creation_date: this.$pgettext('Content/*/*/Noun', 'Creation date'),
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<label v-if="label"><translate translate-context="*/*/*">Category</translate></label>
|
||||||
|
<select class="ui dropdown" :value="value" @change="$emit('input', $event.target.value)">
|
||||||
|
<option :value="option.value" v-for="option in allCategories">{{ option.label }}</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import TranslationsMixin from '@/components/mixins/Translations'
|
||||||
|
import lodash from '@/lodash'
|
||||||
|
export default {
|
||||||
|
mixins: [TranslationsMixin],
|
||||||
|
props: ['value', 'all', 'label'],
|
||||||
|
computed: {
|
||||||
|
allCategories () {
|
||||||
|
let c = []
|
||||||
|
if (this.all) {
|
||||||
|
c.push(
|
||||||
|
{
|
||||||
|
value: '',
|
||||||
|
label: this.$pgettext('Content/*/Dropdown', 'All')
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return c.concat(
|
||||||
|
lodash.keys(this.sharedLabels.fields.report_type.choices).sort().map((v) => {
|
||||||
|
return {
|
||||||
|
value: v,
|
||||||
|
label: this.sharedLabels.fields.report_type.choices[v]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
clone: require('lodash/clone'),
|
clone: require('lodash/clone'),
|
||||||
|
keys: require('lodash/keys'),
|
||||||
debounce: require('lodash/debounce'),
|
debounce: require('lodash/debounce'),
|
||||||
get: require('lodash/get'),
|
get: require('lodash/get'),
|
||||||
merge: require('lodash/merge'),
|
merge: require('lodash/merge'),
|
||||||
|
|
|
@ -25,6 +25,12 @@
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<report-category-dropdown
|
||||||
|
class="field"
|
||||||
|
@input="addSearchToken('category', $event)"
|
||||||
|
:all="true"
|
||||||
|
:label="true"
|
||||||
|
:value="getTokenValue('category', '')"></report-category-dropdown>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering</translate></label>
|
<label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering</translate></label>
|
||||||
<select class="ui dropdown" v-model="ordering">
|
<select class="ui dropdown" v-model="ordering">
|
||||||
|
@ -130,6 +136,7 @@ import Pagination from '@/components/Pagination'
|
||||||
import OrderingMixin from '@/components/mixins/Ordering'
|
import OrderingMixin from '@/components/mixins/Ordering'
|
||||||
import TranslationsMixin from '@/components/mixins/Translations'
|
import TranslationsMixin from '@/components/mixins/Translations'
|
||||||
import ReportCard from '@/components/manage/moderation/ReportCard'
|
import ReportCard from '@/components/manage/moderation/ReportCard'
|
||||||
|
import ReportCategoryDropdown from '@/components/moderation/ReportCategoryDropdown'
|
||||||
import {normalizeQuery, parseTokens} from '@/search'
|
import {normalizeQuery, parseTokens} from '@/search'
|
||||||
import SmartSearchMixin from '@/components/mixins/SmartSearch'
|
import SmartSearchMixin from '@/components/mixins/SmartSearch'
|
||||||
import ActionTable from '@/components/common/ActionTable'
|
import ActionTable from '@/components/common/ActionTable'
|
||||||
|
@ -141,6 +148,7 @@ export default {
|
||||||
Pagination,
|
Pagination,
|
||||||
ActionTable,
|
ActionTable,
|
||||||
ReportCard,
|
ReportCard,
|
||||||
|
ReportCategoryDropdown,
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
mode: {default: 'card'},
|
mode: {default: 'card'},
|
||||||
|
|
Loading…
Reference in New Issue