56d1232588
There's a seperator between certain blocks of items. I show/hide the seperator together with the block under it. When a block with a seperator is at the top, the seperator doesn't show, keeping a consistent look with seperators only between blocks. I also hide granting roles for deactivated accounts because that doesn't make much sense to me. For the rest the items are hidden when you're not privileged. When there's no privileges that show items, the menu isn't shown either.
119 lines
3.7 KiB
JavaScript
119 lines
3.7 KiB
JavaScript
import { library } from '@fortawesome/fontawesome-svg-core'
|
|
import { faChevronDown } from '@fortawesome/free-solid-svg-icons'
|
|
|
|
import DialogModal from '../dialog_modal/dialog_modal.vue'
|
|
import Popover from '../popover/popover.vue'
|
|
|
|
library.add(faChevronDown)
|
|
|
|
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 {
|
|
tags: {
|
|
FORCE_NSFW,
|
|
STRIP_MEDIA,
|
|
FORCE_UNLISTED,
|
|
DISABLE_REMOTE_SUBSCRIPTION,
|
|
DISABLE_ANY_SUBSCRIPTION,
|
|
SANDBOX,
|
|
QUARANTINE
|
|
},
|
|
showDeleteUserDialog: false,
|
|
toggled: false
|
|
}
|
|
},
|
|
components: {
|
|
DialogModal,
|
|
Popover
|
|
},
|
|
computed: {
|
|
tagsSet () {
|
|
return new Set(this.user.tags)
|
|
},
|
|
canGrantRole () {
|
|
return this.user.is_local && !this.user.deactivated && this.$store.state.users.currentUser.role === 'admin'
|
|
},
|
|
canChangeActivationState () {
|
|
return this.privileged('users_manage_activation_state')
|
|
},
|
|
canDeleteAccount () {
|
|
return this.privileged('users_delete')
|
|
},
|
|
canUseTagPolicy () {
|
|
return this.$store.state.instance.tagPolicyAvailable && this.privileged('users_manage_tags')
|
|
}
|
|
},
|
|
methods: {
|
|
hasTag (tagName) {
|
|
return this.tagsSet.has(tagName)
|
|
},
|
|
privileged (privilege) {
|
|
return this.$store.state.users.currentUser.privileges.includes(privilege)
|
|
},
|
|
toggleTag (tag) {
|
|
const store = this.$store
|
|
if (this.tagsSet.has(tag)) {
|
|
store.state.api.backendInteractor.untagUser({ user: this.user, tag }).then(response => {
|
|
if (!response.ok) { return }
|
|
store.commit('untagUser', { user: this.user, tag })
|
|
})
|
|
} else {
|
|
store.state.api.backendInteractor.tagUser({ user: 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({ user: this.user, right }).then(response => {
|
|
if (!response.ok) { return }
|
|
store.commit('updateRight', { user: this.user, right, value: false })
|
|
})
|
|
} else {
|
|
store.state.api.backendInteractor.addRight({ user: this.user, right }).then(response => {
|
|
if (!response.ok) { return }
|
|
store.commit('updateRight', { user: this.user, right, value: true })
|
|
})
|
|
}
|
|
},
|
|
toggleActivationStatus () {
|
|
this.$store.dispatch('toggleActivationStatus', { user: this.user })
|
|
},
|
|
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()
|
|
}
|
|
})
|
|
},
|
|
setToggled (value) {
|
|
this.toggled = value
|
|
}
|
|
}
|
|
}
|
|
|
|
export default ModerationTools
|