Files
habitica/website/client/src/components/challenges/challengeMemberProgressModal.vue
T
2019-10-12 17:05:15 +02:00

103 lines
2.2 KiB
Vue

<template>
<b-modal
id="challenge-member-modal"
title="User Progress"
size="lg"
>
<div
v-if="isLeader || isAdmin"
class="row award-row"
>
<div class="col-12 text-center">
<button
v-once
class="btn btn-primary"
@click="closeChallenge()"
>
{{ $t('awardWinners') }}
</button>
</div>
</div>
<div class="row">
<task-column
v-for="column in columns"
:key="column"
class="col-6"
:type="column"
:task-list-override="tasksByType[column]"
/>
</div>
</b-modal>
</template>
<style scoped>
.award-row {
padding-top: 1rem;
padding-bottom: 1rem;
}
</style>
<script>
import axios from 'axios';
import Column from '../tasks/column';
export default {
components: {
TaskColumn: Column,
},
props: ['challengeId'],
data () {
return {
columns: ['habit', 'daily', 'todo', 'reward'],
tasksByType: {
habit: [],
daily: [],
todo: [],
reward: [],
},
memberId: '',
isLeader: false,
isAdmin: false,
};
},
watch: {
async memberId (id) {
if (!id) return;
this.tasksByType = {
habit: [],
daily: [],
todo: [],
reward: [],
};
const response = await axios.get(`/api/v4/challenges/${this.challengeId}/members/${this.memberId}`);
const { tasks } = response.data.data;
tasks.forEach(task => {
this.tasksByType[task.type].push(task);
});
},
},
mounted () {
this.$root.$on('habitica:challenge:member-progress', data => {
if (!data.progressMemberId) return;
this.memberId = data.progressMemberId;
this.isLeader = data.isLeader;
this.isAdmin = data.isAdmin;
this.$root.$emit('bv::show::modal', 'challenge-member-modal');
});
},
beforeDestroy () {
this.$root.$off('habitica:challenge:member-progress');
},
methods: {
async closeChallenge () {
this.challenge = await this.$store.dispatch('challenges:selectChallengeWinner', {
challengeId: this.challengeId,
winnerId: this.memberId,
});
this.$router.push('/challenges/myChallenges');
},
},
};
</script>