import DialogModal from '../dialog_modal/dialog_modal.vue' import Popover from '../popover/popover.vue' import { useInstanceStore } from 'src/stores/instance.js' import { library } from '@fortawesome/fontawesome-svg-core' import { faChevronDown } from '@fortawesome/free-solid-svg-icons' 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 ( useInstanceStore().featureSet.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(() => { 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