diff options
Diffstat (limited to 'src/site/pages/dashboard/admin')
| -rw-r--r-- | src/site/pages/dashboard/admin/user/_id.vue | 66 | ||||
| -rw-r--r-- | src/site/pages/dashboard/admin/users.vue | 66 |
2 files changed, 67 insertions, 65 deletions
diff --git a/src/site/pages/dashboard/admin/user/_id.vue b/src/site/pages/dashboard/admin/user/_id.vue index 1755b89..7814468 100644 --- a/src/site/pages/dashboard/admin/user/_id.vue +++ b/src/site/pages/dashboard/admin/user/_id.vue @@ -41,20 +41,27 @@ <b-field label="Files" horizontal> - <span>{{ files.length }}</span> + <span>{{ user.files.length }}</span> </b-field> <div class="mb2 mt2 text-center"> - <button - class="button is-danger" + <b-button + v-if="user.enabled" + type="is-danger" @click="promptDisableUser"> Disable user - </button> + </b-button> + <b-button + v-if="!user.enabled" + type="is-success" + @click="promptEnableUser"> + Enable user + </b-button> </div> <Grid - v-if="files.length" - :files="files" /> + v-if="user.files.length" + :files="user.files" /> </div> </div> </div> @@ -62,6 +69,7 @@ </template> <script> +import { mapState } from 'vuex'; import Sidebar from '~/components/sidebar/Sidebar.vue'; import Grid from '~/components/grid/Grid.vue'; @@ -70,42 +78,42 @@ export default { Sidebar, Grid, }, - middleware: ['auth', 'admin'], + middleware: ['auth', 'admin', ({ route, store }) => { + try { + store.dispatch('admin/fetchUser', route.params.id); + } catch (e) { + // eslint-disable-next-line no-console + console.error(e); + } + }], data() { return { options: {}, - files: null, - user: null, }; }, - async asyncData({ $axios, route }) { - try { - const response = await $axios.$get(`/admin/users/${route.params.id}`); - return { - files: response.files ? response.files : null, - user: response.user ? response.user : null, - }; - } catch (error) { - console.error(error); - return { - files: null, - user: null, - }; - } - }, + computed: mapState({ + user: (state) => state.admin.user, + }), methods: { promptDisableUser() { this.$buefy.dialog.confirm({ type: 'is-danger', - message: 'Are you sure you want to disable the account of the user that uploaded this file?', + message: 'Are you sure you want to disable the account of this user?', onConfirm: () => this.disableUser(), }); }, - async disableUser() { - const response = await this.$axios.$post('admin/users/disable', { - id: this.user.id, + promptEnableUser() { + this.$buefy.dialog.confirm({ + type: 'is-danger', + message: 'Are you sure you want to enable the account of this user?', + onConfirm: () => this.enableUser(), }); - this.$buefy.toast.open(response.message); + }, + disableUser() { + this.$handler.executeAction('admin/disableUser', this.user.id); + }, + enableUser() { + this.$handler.executeAction('admin/enableUser', this.user.id); }, }, }; diff --git a/src/site/pages/dashboard/admin/users.vue b/src/site/pages/dashboard/admin/users.vue index 269946c..bed4c2b 100644 --- a/src/site/pages/dashboard/admin/users.vue +++ b/src/site/pages/dashboard/admin/users.vue @@ -13,7 +13,7 @@ <div class="view-container"> <b-table - :data="users || []" + :data="users" :mobile-cards="true"> <template slot-scope="props"> <b-table-column @@ -37,7 +37,7 @@ label="Enabled" centered> <b-switch - v-model="props.row.enabled" + :value="props.row.enabled" @input="changeEnabledStatus(props.row)" /> </b-table-column> @@ -46,18 +46,18 @@ label="Admin" centered> <b-switch - v-model="props.row.isAdmin" + :value="props.row.isAdmin" @input="changeIsAdmin(props.row)" /> </b-table-column> <b-table-column field="purge" centered> - <button - class="button is-primary" + <b-button + type="is-danger" @click="promptPurgeFiles(props.row)"> Purge files - </button> + </b-button> </b-table-column> </template> <template slot="empty"> @@ -82,45 +82,42 @@ </template> <script> +import { mapState } from 'vuex'; import Sidebar from '~/components/sidebar/Sidebar.vue'; export default { components: { Sidebar, }, - middleware: ['auth', 'admin'], - data() { - return { - users: [], - }; - }, - computed: { - config() { - return this.$store.state.config; - }, - }, + middleware: ['auth', 'admin', ({ route, store }) => { + try { + store.dispatch('admin/fetchUsers', route.params.id); + } catch (e) { + // eslint-disable-next-line no-console + console.error(e); + } + }], + computed: mapState({ + users: (state) => state.admin.users, + config: (state) => state.config, + }), metaInfo() { return { title: 'Uploads' }; }, - mounted() { - this.getUsers(); - }, methods: { - async getUsers() { - const response = await this.$axios.$get('admin/users'); - this.users = response.users; - }, async changeEnabledStatus(row) { - const response = await this.$axios.$post(`admin/users/${row.enabled ? 'enable' : 'disable'}`, { - id: row.id, - }); - this.$buefy.toast.open(response.message); + if (row.enabled) { + this.$handler.executeAction('admin/disableUser', row.id); + } else { + this.$handler.executeAction('admin/enableUser', row.id); + } }, async changeIsAdmin(row) { - const response = await this.$axios.$post(`admin/users/${row.isAdmin ? 'promote' : 'demote'}`, { - id: row.id, - }); - this.$buefy.toast.open(response.message); + if (row.isAdmin) { + this.$handler.executeAction('admin/demoteUser', row.id); + } else { + this.$handler.executeAction('admin/promoteUser', row.id); + } }, promptPurgeFiles(row) { this.$buefy.dialog.confirm({ @@ -129,10 +126,7 @@ export default { }); }, async purgeFiles(row) { - const response = await this.$axios.$post('admin/users/purge', { - id: row.id, - }); - this.$buefy.toast.open(response.message); + this.$handler.executeAction('admin/purgeUserFiles', row.id); }, }, }; |