138 lines
3.5 KiB
Vue
138 lines
3.5 KiB
Vue
|
<template>
|
|||
|
<div class="content">
|
|||
|
<team-header/>
|
|||
|
<hr/>
|
|||
|
<div v-if="loading" class="center" >
|
|||
|
<loader/>
|
|||
|
</div>
|
|||
|
<section v-if="currentResult" class="last-quiz">
|
|||
|
<div class="last-quiz-header">
|
|||
|
<span class="date"> {{ currentResult.createdDate | formatDate }}</span>
|
|||
|
<!-- FIXME remove this dirty trick -->
|
|||
|
<nuxt-link
|
|||
|
class="link"
|
|||
|
:to="{ path: '/details', query: { quiz: currentResult._links.self.href.replace('http://localhost:8080/quizzes/','') }}">
|
|||
|
+ Voir le détail
|
|||
|
</nuxt-link>
|
|||
|
</div>
|
|||
|
<div v-if="currentResult && currentResult.scores" class="chart-area">
|
|||
|
<polar-area-chart :data="currentResult.scores.map(value => value.scoreAvg)"/>
|
|||
|
<Legend/>
|
|||
|
</div>
|
|||
|
</section>
|
|||
|
<section v-if="quizzes.length > 0" class="history" >
|
|||
|
<div v-for="q in quizzes" :key="q.id">
|
|||
|
<button @click="setCurrent(q)"><span>Bousolle - {{ q.createdDate | formatDate }}</span><span>❯</span></button>
|
|||
|
</div>
|
|||
|
</section>
|
|||
|
<section v-else-if="!loading" class="center">
|
|||
|
Aucune auto-évaluation n'a été faite. Veuillez en réaliser une première.
|
|||
|
</section>
|
|||
|
<div class="button-container">
|
|||
|
<nuxt-link class="button orange" to="/quiz">Nouveau</nuxt-link>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</template>
|
|||
|
|
|||
|
<script lang="ts">
|
|||
|
import {Component, Vue} from "vue-property-decorator";
|
|||
|
import {AxiosResponse} from "axios";
|
|||
|
import {RepositoryFactory} from "~/repositories/RepositoryFactory";
|
|||
|
import {RestResponse} from "~/repositories/models/rest-response.model";
|
|||
|
import {Quiz, Score} from "~/repositories/models/quiz.model";
|
|||
|
|
|||
|
@Component
|
|||
|
export default class History extends Vue {
|
|||
|
|
|||
|
readonly quizRepository = RepositoryFactory.get('quiz');
|
|||
|
|
|||
|
private quizzes: Quiz[] = [];
|
|||
|
private currentResult: Quiz | null = null;
|
|||
|
private loading = true;
|
|||
|
|
|||
|
async mounted() {
|
|||
|
await this.quizRepository.findMine().then((response: AxiosResponse<RestResponse<Quiz>>) => {
|
|||
|
this.quizzes = response.data._embedded.quizzes;
|
|||
|
});
|
|||
|
for (const quiz of this.quizzes) {
|
|||
|
// FIXME ugly : replace when scores will be handled as a REST resource
|
|||
|
console.info(quiz);
|
|||
|
const id = Number.parseInt(quiz._links.self.href.replace("http://localhost:8080/quizzes/", ""));
|
|||
|
await this.quizRepository.findScores(id)
|
|||
|
.then((value: AxiosResponse<Score[]>) => {
|
|||
|
quiz.scores = value.data;
|
|||
|
});
|
|||
|
}
|
|||
|
this.currentResult = this.quizzes.length > 0 ? this.quizzes[0] : null;
|
|||
|
this.loading = false;
|
|||
|
}
|
|||
|
|
|||
|
private setCurrent(quiz: Quiz) {
|
|||
|
this.currentResult = quiz;
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|
|||
|
|
|||
|
<style lang="scss" scoped>
|
|||
|
@import "assets/css/color";
|
|||
|
@import "assets/css/spacing";
|
|||
|
@import "assets/css/font";
|
|||
|
|
|||
|
.last-quiz {
|
|||
|
margin-bottom: $x_small 0;
|
|||
|
}
|
|||
|
|
|||
|
.last-quiz-header {
|
|||
|
display: flex;
|
|||
|
justify-content: space-between;
|
|||
|
font-size: $tertiary-font-size;
|
|||
|
|
|||
|
.date {
|
|||
|
color: $gray_4;
|
|||
|
font-weight: 700;
|
|||
|
}
|
|||
|
|
|||
|
.link {
|
|||
|
color: $blue;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.chart-area {
|
|||
|
display: flex;
|
|||
|
flex-wrap: wrap;
|
|||
|
justify-content: space-around;
|
|||
|
margin: $x_small 0;
|
|||
|
}
|
|||
|
|
|||
|
.history {
|
|||
|
margin-top: $x_small;
|
|||
|
}
|
|||
|
|
|||
|
.history button {
|
|||
|
display: flex;
|
|||
|
width: 100%;
|
|||
|
justify-content: space-between;
|
|||
|
padding: 16px;
|
|||
|
margin: $xxx_small 0;
|
|||
|
|
|||
|
background: $gray_1;
|
|||
|
border-radius: 8px;
|
|||
|
border: none;
|
|||
|
color: $gray_4;
|
|||
|
font-weight: 700;
|
|||
|
font-size: $tertiary-font-size;
|
|||
|
|
|||
|
&:hover {
|
|||
|
text-decoration: none;
|
|||
|
cursor: pointer;
|
|||
|
background: $gray_3;
|
|||
|
color: $gray_1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.button-container {
|
|||
|
margin-bottom: $x_small;
|
|||
|
}
|
|||
|
|
|||
|
</style>
|