33 lines
960 B
JavaScript
33 lines
960 B
JavaScript
import map from 'lodash/map'
|
|
import groupBy from 'lodash/groupBy'
|
|
import { mapGetters, mapState } from 'vuex'
|
|
import BasicUserCard from '../basic_user_card/basic_user_card.vue'
|
|
|
|
const StaffPanel = {
|
|
created () {
|
|
const nicknames = this.$store.state.instance.staffAccounts
|
|
nicknames.forEach(nickname => this.$store.dispatch('fetchUserIfMissing', nickname))
|
|
},
|
|
components: {
|
|
BasicUserCard
|
|
},
|
|
computed: {
|
|
groupedStaffAccounts () {
|
|
const staffAccounts = map(this.staffAccounts, this.findUser).filter(_ => _)
|
|
const groupedStaffAccounts = groupBy(staffAccounts, 'role')
|
|
|
|
return [
|
|
{ role: 'admin', users: groupedStaffAccounts['admin'] },
|
|
{ role: 'moderator', users: groupedStaffAccounts['moderator'] }
|
|
].filter(group => group.users)
|
|
},
|
|
...mapGetters([
|
|
'findUser'
|
|
]),
|
|
...mapState({
|
|
staffAccounts: state => state.instance.staffAccounts
|
|
})
|
|
}
|
|
}
|
|
|
|
export default StaffPanel
|