moderation_tools.js (3740B)
- 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