aboutsummaryrefslogtreecommitdiff
path: root/src/site/pages/dashboard/admin
diff options
context:
space:
mode:
Diffstat (limited to 'src/site/pages/dashboard/admin')
-rw-r--r--src/site/pages/dashboard/admin/user/_id.vue66
-rw-r--r--src/site/pages/dashboard/admin/users.vue66
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);
},
},
};