Files
habitica/website/client/src/components/header/notifications/groupTaskApproval.vue
2019-10-13 18:04:04 +02:00

96 lines
2.4 KiB
Vue

<template>
<base-notification
:can-remove="canRemove"
:has-icon="false"
:notification="notification"
@click="action"
>
<div slot="content">
<div v-html="notification.data.message"></div>
<div class="notifications-buttons">
<div
class="btn btn-small btn-success"
@click.stop="approve()"
>
{{ $t('approve') }}
</div>
<div
class="btn btn-small btn-warning"
@click.stop="needsWork()"
>
{{ $t('needsWork') }}
</div>
</div>
</div>
</base-notification>
</template>
<script>
import BaseNotification from './base';
import { mapState } from '@/libs/store';
import sync from '@/mixins/sync';
export default {
components: {
BaseNotification,
},
mixins: [sync],
props: ['notification', 'canRemove'],
computed: {
...mapState({ user: 'user.data' }),
// Check that the notification has all the necessary data (old ones are missing some fields)
notificationHasData () {
return Boolean(this.notification.data.groupTaskId && this.notification.data.userId);
},
},
methods: {
action () {
const groupId = this.notification.data.group.id;
this.$router.push({ name: 'groupPlanDetailTaskInformation', params: { groupId } });
},
async approve () {
// Redirect users to the group tasks page if the notification doesn't have data
if (!this.notificationHasData) {
this.$router.push({
name: 'groupPlanDetailTaskInformation',
params: {
groupId: this.notification.data.groupId,
},
});
return;
}
await this.$store.dispatch('tasks:approve', {
taskId: this.notification.data.groupTaskId,
userId: this.notification.data.userId,
});
this.sync();
},
async needsWork () {
// Redirect users to the group tasks page if the notification doesn't have data
if (!this.notificationHasData) {
this.$router.push({
name: 'groupPlanDetailTaskInformation',
params: {
groupId: this.notification.data.groupId,
},
});
return;
}
if (!window.confirm(this.$t('confirmNeedsWork'))) return;
await this.$store.dispatch('tasks:needsWork', {
taskId: this.notification.data.groupTaskId,
userId: this.notification.data.userId,
});
this.sync();
},
},
};
</script>