107 lines
3.2 KiB
JavaScript
107 lines
3.2 KiB
JavaScript
|
import DialogModal from '../dialog_modal/dialog_modal.vue'
|
||
|
import Popper from 'vue-popperjs/src/component/popper.js.vue'
|
||
|
|
||
|
const FORCE_NSFW = 'mrf_tag:media-force-nsfw'
|
||
|
const STRIP_MEDIA = 'mrf_tag:media-strip'
|
||
|
const FORCE_UNLISTED = 'mrf_tag:force-unlisted'
|
||
|
const DISABLE_REMOTE_SUBSCRIPTION = 'mrf_tag:disable-remote-subscription'
|
||
|
const DISABLE_ANY_SUBSCRIPTION = 'mrf_tag:disable-any-subscription'
|
||
|
const SANDBOX = 'mrf_tag:sandbox'
|
||
|
const QUARANTINE = 'mrf_tag:quarantine'
|
||
|
|
||
|
const ModerationTools = {
|
||
|
props: [
|
||
|
'user'
|
||
|
],
|
||
|
data () {
|
||
|
return {
|
||
|
showDropDown: false,
|
||
|
tags: {
|
||
|
FORCE_NSFW,
|
||
|
STRIP_MEDIA,
|
||
|
FORCE_UNLISTED,
|
||
|
DISABLE_REMOTE_SUBSCRIPTION,
|
||
|
DISABLE_ANY_SUBSCRIPTION,
|
||
|
SANDBOX,
|
||
|
QUARANTINE
|
||
|
},
|
||
|
showDeleteUserDialog: false
|
||
|
}
|
||
|
},
|
||
|
components: {
|
||
|
DialogModal,
|
||
|
Popper
|
||
|
},
|
||
|
computed: {
|
||
|
tagsSet () {
|
||
|
return new Set(this.user.tags)
|
||
|
},
|
||
|
hasTagPolicy () {
|
||
|
return this.$store.state.instance.tagPolicyAvailable
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
toggleMenu () {
|
||
|
this.showDropDown = !this.showDropDown
|
||
|
},
|
||
|
hasTag (tagName) {
|
||
|
return this.tagsSet.has(tagName)
|
||
|
},
|
||
|
toggleTag (tag) {
|
||
|
const store = this.$store
|
||
|
if (this.tagsSet.has(tag)) {
|
||
|
store.state.api.backendInteractor.untagUser(this.user, tag).then(response => {
|
||
|
if (!response.ok) { return }
|
||
|
store.commit('untagUser', {user: this.user, tag})
|
||
|
})
|
||
|
} else {
|
||
|
store.state.api.backendInteractor.tagUser(this.user, tag).then(response => {
|
||
|
if (!response.ok) { return }
|
||
|
store.commit('tagUser', {user: this.user, tag})
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
toggleRight (right) {
|
||
|
const store = this.$store
|
||
|
if (this.user.rights[right]) {
|
||
|
store.state.api.backendInteractor.deleteRight(this.user, right).then(response => {
|
||
|
if (!response.ok) { return }
|
||
|
store.commit('updateRight', {user: this.user, right: right, value: false})
|
||
|
})
|
||
|
} else {
|
||
|
store.state.api.backendInteractor.addRight(this.user, right).then(response => {
|
||
|
if (!response.ok) { return }
|
||
|
store.commit('updateRight', {user: this.user, right: right, value: true})
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
toggleActivationStatus () {
|
||
|
const store = this.$store
|
||
|
const status = !!this.user.deactivated
|
||
|
store.state.api.backendInteractor.setActivationStatus(this.user, status).then(response => {
|
||
|
if (!response.ok) { return }
|
||
|
store.commit('updateActivationStatus', {user: this.user, status: status})
|
||
|
})
|
||
|
},
|
||
|
deleteUserDialog (show) {
|
||
|
this.showDeleteUserDialog = show
|
||
|
},
|
||
|
deleteUser () {
|
||
|
const store = this.$store
|
||
|
const user = this.user
|
||
|
const {id, name} = user
|
||
|
store.state.api.backendInteractor.deleteUser(user)
|
||
|
.then(e => {
|
||
|
this.$store.dispatch('markStatusesAsDeleted', status => user.id === status.user.id)
|
||
|
const isProfile = this.$route.name === 'external-user-profile' || this.$route.name === 'user-profile'
|
||
|
const isTargetUser = this.$route.params.name === name || this.$route.params.id === id
|
||
|
if (isProfile && isTargetUser) {
|
||
|
window.history.back()
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export default ModerationTools
|