import {Module, VuexModule, Mutation} from 'vuex-module-decorators' import {Question} from "~/repositories/models/question.model"; import {QuizRate, Response} from "~/repositories/models/quiz.model"; @Module({ name: 'quiz', stateFactory: true, namespaced: true, }) export default class Quiz extends VuexModule { responses = new Map; questionsRatedPerAxe = new Map; @Mutation initialize(questions: Map) { questions.forEach((questions, axeId) => this.questionsRatedPerAxe.set(axeId, questions.map(value => { return { questionId: value.id, rated: this.responses.has(value.id) } }))); } @Mutation reset() { this.responses.clear(); this.questionsRatedPerAxe.forEach((questions) => { questions .map(value => { value.rated = false; return value; }); }); } @Mutation updateScoreResponse(response: Response) { const previous = this.responses.get(response.questionId); if (previous) { this.responses.set(response.questionId, { comment: previous.comment, score: response.score }); } else { this.responses.set(response.questionId, { score: response.score }); } const questionsRated = this.questionsRatedPerAxe.get(response.axeId); if (questionsRated) { questionsRated .filter(value => value.questionId === response.questionId) .map(value => { value.rated = true; return value; }); } // else should not happen } @Mutation updateCommentResponse(response: Response) { const previous = this.responses.get(response.questionId); if (previous) { this.responses.set(response.questionId, { score: previous.score, comment: response.comment }); } else { this.responses.set(response.questionId, { comment: response.comment }); } } }