rudeshark.net/src/client/components/user-moderate-dialog.vue

106 lines
2.5 KiB
Vue
Raw Normal View History

<template>
<x-window @closed="() => { $emit('closed'); destroyDom(); }" :avatar="user">
<template #header><mk-user-name :user="user"/></template>
<div class="vrcsvlkm">
2020-01-30 21:15:59 +01:00
<mk-button @click="resetPassword()" primary>{{ $t('resetPassword') }}</mk-button>
<mk-switch v-if="$store.state.i.isAdmin && (this.moderator || !user.isAdmin)" @change="toggleModerator()" v-model="moderator">{{ $t('moderator') }}</mk-switch>
<mk-switch @change="toggleSilence()" v-model="silenced">{{ $t('silence') }}</mk-switch>
<mk-switch @change="toggleSuspend()" v-model="suspended">{{ $t('suspend') }}</mk-switch>
</div>
</x-window>
</template>
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import MkButton from './ui/button.vue';
import MkSwitch from './ui/switch.vue';
import XWindow from './window.vue';
export default Vue.extend({
i18n,
components: {
MkButton,
MkSwitch,
XWindow,
},
props: {
user: {
type: Object,
required: true
}
},
data() {
return {
2020-01-29 22:00:43 +01:00
moderator: this.user.isModerator,
silenced: this.user.isSilenced,
suspended: this.user.isSuspended,
};
},
methods: {
2020-01-30 21:15:59 +01:00
async resetPassword() {
const dialog = this.$root.dialog({
type: 'waiting',
iconOnly: true
});
2020-01-30 21:15:59 +01:00
this.$root.api('admin/reset-password', {
userId: this.user.id,
2020-01-30 21:15:59 +01:00
}).then(({ password }) => {
this.$root.dialog({
type: 'success',
2020-01-30 21:15:59 +01:00
text: this.$t('newPasswordIs', { password })
});
}).catch(e => {
this.$root.dialog({
type: 'error',
text: e
});
}).finally(() => {
dialog.close();
});
},
async toggleSilence() {
const confirm = await this.$root.dialog({
type: 'warning',
showCancelButton: true,
text: this.silenced ? this.$t('silenceConfirm') : this.$t('unsilenceConfirm'),
});
if (confirm.canceled) {
this.silenced = !this.silenced;
} else {
this.$root.api(this.silenced ? 'admin/silence-user' : 'admin/unsilence-user', { userId: this.user.id });
}
},
async toggleSuspend() {
const confirm = await this.$root.dialog({
type: 'warning',
showCancelButton: true,
text: this.suspended ? this.$t('suspendConfirm') : this.$t('unsuspendConfirm'),
});
if (confirm.canceled) {
this.suspended = !this.suspended;
} else {
2020-01-29 22:00:43 +01:00
this.$root.api(this.suspended ? 'admin/suspend-user' : 'admin/unsuspend-user', { userId: this.user.id });
}
2020-01-29 22:00:43 +01:00
},
async toggleModerator() {
this.$root.api(this.moderator ? 'admin/moderators/add' : 'admin/moderators/remove', { userId: this.user.id });
}
}
});
</script>
<style lang="scss" scoped>
.vrcsvlkm {
}
</style>