user_list_menu.js (2874B)
- import { library } from '@fortawesome/fontawesome-svg-core'
- import { faChevronRight } from '@fortawesome/free-solid-svg-icons'
- import { mapState } from 'vuex'
- import DialogModal from '../dialog_modal/dialog_modal.vue'
- import Popover from '../popover/popover.vue'
- library.add(faChevronRight)
- const UserListMenu = {
- props: [
- 'user'
- ],
- data () {
- return {}
- },
- components: {
- DialogModal,
- Popover
- },
- created () {
- this.$store.dispatch('fetchUserInLists', this.user.id)
- },
- computed: {
- ...mapState({
- allLists: state => state.lists.allLists
- }),
- inListsSet () {
- return new Set(this.user.inLists.map(x => x.id))
- },
- lists () {
- if (!this.user.inLists) return []
- return this.allLists.map(list => ({
- ...list,
- inList: this.inListsSet.has(list.id)
- }))
- }
- },
- methods: {
- toggleList (listId) {
- if (this.inListsSet.has(listId)) {
- this.$store.dispatch('removeListAccount', { accountId: this.user.id, listId }).then((response) => {
- if (!response.ok) { return }
- this.$store.dispatch('fetchUserInLists', this.user.id)
- })
- } else {
- this.$store.dispatch('addListAccount', { accountId: this.user.id, listId }).then((response) => {
- if (!response.ok) { return }
- this.$store.dispatch('fetchUserInLists', this.user.id)
- })
- }
- },
- 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 UserListMenu