diff --git a/packages/frontend/src/views/admin/AdminUsers.vue b/packages/frontend/src/views/admin/AdminUsers.vue index b2db81bbe..24daa9300 100644 --- a/packages/frontend/src/views/admin/AdminUsers.vue +++ b/packages/frontend/src/views/admin/AdminUsers.vue @@ -1,9 +1,9 @@ @@ -79,13 +102,6 @@ import debounce from 'lodash.debounce' export default { name: 'UserAdmin', components: { UserAvatarIcon }, - // beforeRouteUpdate(to, from, next) { - // console.debug(to) - // console.debug(from) - // console.debug(next) - // this.currentPage = this.page - // next() - // }, props: { limit: { type: [Number, String], required: false, default: 10 }, page: { type: [Number, String], required: false, default: 1 }, @@ -93,29 +109,42 @@ export default { }, data() { return { + roleLookupTable: { + 'server:user': 'User', + 'server:admin': 'Admin' + // 'server:archived_user': 'Archived' + }, users: { items: [], totalCount: 0 }, - roles: ['server:user', 'server:admin', 'server:archived_user'], currentPage: 1, searchQuery: null, - showConfirmDialog: false + showConfirmDialog: false, + manipulatedUser: null, + newRole: null } }, computed: { - queryLimit: function () { + queryLimit() { return parseInt(this.limit) }, - queryOffset: function () { + queryOffset() { return (this.page - 1) * this.queryLimit }, - numberOfPages: function () { + numberOfPages() { return Math.ceil(this.users.totalCount / this.limit) + }, + availableRoles() { + let roleItems = [] + for (let role in this.roleLookupTable) { + roleItems.push({ text: this.roleLookupTable[role], value: role }) + } + return roleItems } }, watch: { - currentPage: function (newPage, _) { + currentPage: function (newPage) { this.paginateNext(newPage) }, searchQuery: debounce(function (newQuery) { @@ -123,23 +152,38 @@ export default { }, 1000) }, methods: { - changeUserRole( user ) { + changeUserRole(user, args) { + this.manipulatedUser = user + this.newRole = args + console.log(user.role) + console.log(this.newRole) - console.log(user) + this.showConfirmDialog = true }, - - getUserCurrentRole(user) { - return user.role + resetManipulatedUser() { + this.manipulatedUser = null + this.newRole = null }, - removeAdminRole(userId) { - this.$apollo.mutate({ + cancelRoleChange() { + this.showConfirmDialog = false + this.$apollo.queries.users.refetch() + this.resetManipulatedUser() + }, + async proceedRoleChange() { + await this.updateUserRole(this.manipulatedUser.id, this.newRole) + this.resetManipulatedUser() + this.showConfirmDialog = false + }, + async updateUserRole(userId, newRole) { + await this.$apollo.mutate({ mutation: gql` - mutation($userId: String!) { - userRoleChange(userRoleInput: { id: $userId, role: "server:user" }) + mutation ($userId: String!, $newRole: String!) { + userRoleChange(userRoleInput: { id: $userId, role: $newRole }) } `, variables: { - userId + userId, + newRole }, update: () => { this.$apollo.queries.users.refetch() @@ -149,37 +193,16 @@ export default { } }) }, - addAdminRole(userId) { - this.$apollo.mutate({ - mutation: gql` - mutation($userId: String!) { - userRoleChange(userRoleInput: { id: $userId, role: "server:admin" }) - } - `, - variables: { - userId - }, - update: () => { - this.$apollo.queries.users.refetch() - }, - error: (err) => { - console.log(err) - } - }) - }, - paginateNext: function (newPage) { + paginateNext(newPage) { this.$router.push(this._prepareRoute(newPage, this.limit, this.searchQuery)) }, - applySearch: function (searchQuery) { + applySearch(searchQuery) { this.$router.push(this._prepareRoute(1, this.limit, searchQuery)) }, - _prepareRoute: function (page, limit, query) { + _prepareRoute(page, limit, query) { let newRoute = `users?page=${page}&limit=${limit}` if (query) newRoute = `${newRoute}&q=${query}` return newRoute - }, - _matchCurrentPage: function () { - this.currentPage = this.page } }, apollo: {