34 lines
1 KiB
JavaScript
34 lines
1 KiB
JavaScript
import { groupBy, map } from 'lodash-es'
|
|
import { mapState } from 'pinia'
|
|
|
|
import BasicUserCard from 'src/components/basic_user_card/basic_user_card.vue'
|
|
|
|
import { useInstanceStore } from 'src/stores/instance.js'
|
|
import { useUsersStore } from 'src/stores/users.js'
|
|
|
|
const StaffPanel = {
|
|
created() {
|
|
const nicknames = useInstanceStore().staffAccounts
|
|
nicknames.forEach((name) => useUsersStore().fetchUserIfMissing({ name }))
|
|
},
|
|
components: {
|
|
BasicUserCard,
|
|
},
|
|
computed: {
|
|
groupedStaffAccounts() {
|
|
const staffAccounts = map(this.staffAccounts, this.findUserByName).filter(
|
|
(_) => _,
|
|
)
|
|
const groupedStaffAccounts = groupBy(staffAccounts, 'role')
|
|
|
|
return [
|
|
{ role: 'admin', users: groupedStaffAccounts.admin },
|
|
{ role: 'moderator', users: groupedStaffAccounts.moderator },
|
|
].filter((group) => group.users)
|
|
},
|
|
...mapState(useUsersStore, ['findUserByName']),
|
|
...mapState(useInstanceStore, ['staffAccounts']),
|
|
},
|
|
}
|
|
|
|
export default StaffPanel
|