94 lines
2.8 KiB
JavaScript
94 lines
2.8 KiB
JavaScript
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
|