analytica-frontend-lib 1.0.82 → 1.0.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Accordation/index.js +2 -2
- package/dist/Accordation/index.js.map +1 -1
- package/dist/Accordation/index.mjs +2 -2
- package/dist/Accordation/index.mjs.map +1 -1
- package/dist/AlertDialog/index.js +1 -1
- package/dist/AlertDialog/index.js.map +1 -1
- package/dist/AlertDialog/index.mjs +1 -1
- package/dist/AlertDialog/index.mjs.map +1 -1
- package/dist/Card/index.js +2 -2
- package/dist/Card/index.js.map +1 -1
- package/dist/Card/index.mjs +2 -2
- package/dist/Card/index.mjs.map +1 -1
- package/dist/Modal/index.js +1 -1
- package/dist/Modal/index.js.map +1 -1
- package/dist/Modal/index.mjs +1 -1
- package/dist/Modal/index.mjs.map +1 -1
- package/dist/Quiz/index.d.mts +52 -0
- package/dist/Quiz/index.d.ts +52 -0
- package/dist/Quiz/index.js +4185 -0
- package/dist/Quiz/index.js.map +1 -0
- package/dist/Quiz/index.mjs +4191 -0
- package/dist/Quiz/index.mjs.map +1 -0
- package/dist/Quiz/useQuizStore/index.d.mts +140 -0
- package/dist/Quiz/useQuizStore/index.d.ts +140 -0
- package/dist/Quiz/useQuizStore/index.js +395 -0
- package/dist/Quiz/useQuizStore/index.js.map +1 -0
- package/dist/Quiz/useQuizStore/index.mjs +367 -0
- package/dist/Quiz/useQuizStore/index.mjs.map +1 -0
- package/dist/index.css +59 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1008 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1003 -4
- package/dist/index.mjs.map +1 -1
- package/dist/simulated-result-QN5HCUY5.png +0 -0
- package/dist/styles.css +59 -0
- package/dist/styles.css.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Quiz/useQuizStore.ts"],"sourcesContent":["import { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\n\nexport enum QUESTION_DIFFICULTY {\n FACIL = 'FACIL',\n MEDIO = 'MEDIO',\n DIFICIL = 'DIFICIL',\n}\n\nexport enum QUESTION_TYPE {\n ALTERNATIVA = 'ALTERNATIVA',\n DISSERTATIVA = 'DISSERTATIVA',\n MULTIPLA_CHOICE = 'MULTIPLA_CHOICE',\n}\n\nexport enum QUESTION_STATUS {\n APROVADO = 'APROVADO',\n REPROVADO = 'REPROVADO',\n}\n\nexport interface Question {\n id: string;\n questionText: string;\n correctOptionId: string;\n description: string;\n type: QUESTION_TYPE;\n status: QUESTION_STATUS;\n difficulty: QUESTION_DIFFICULTY;\n examBoard: string | null;\n examYear: string | null;\n answerKey: string | null;\n createdAt: string;\n updatedAt: string;\n knowledgeMatrix: {\n areaKnowledgeId: string;\n subjectId: string;\n topicId: string;\n subtopicId: string;\n contentId: string;\n }[];\n options: {\n id: string;\n option: string;\n }[];\n createdBy: string;\n}\n\ninterface Simulado {\n id: string;\n title: string;\n category: string;\n questions: Question[];\n}\n\ninterface Atividade {\n id: string;\n title: string;\n questions: Question[];\n}\n\ninterface Aula {\n id: string;\n title: string;\n questions: Question[];\n}\n\ninterface UserAnswerItem {\n questionId: string;\n activityId: string;\n userId: string;\n answer: string | null;\n optionId: string | null;\n}\n\ninterface UserAnswer extends Question {\n isSkipped: boolean;\n}\n\ninterface QuizState {\n // Data\n bySimulated?: Simulado;\n byActivity?: Atividade;\n byQuestionary?: Aula;\n\n // UI State\n currentQuestionIndex: number;\n selectedAnswers: Record<string, string>;\n userAnswers: UserAnswerItem[];\n timeElapsed: number;\n isStarted: boolean;\n isFinished: boolean;\n userId: string;\n\n // Actions\n setBySimulated: (simulado: Simulado) => void;\n setByActivity: (atividade: Atividade) => void;\n setByQuestionary: (aula: Aula) => void;\n setUserId: (userId: string) => void;\n\n // Quiz Navigation\n goToNextQuestion: () => void;\n goToPreviousQuestion: () => void;\n goToQuestion: (index: number) => void;\n getActiveQuiz: () => {\n quiz: Simulado | Atividade | Aula;\n type: 'bySimulated' | 'byActivity' | 'byQuestionary';\n } | null;\n\n // Quiz Actions\n selectAnswer: (questionId: string, answerId: string) => void;\n skipQuestion: () => void;\n addUserAnswer: (questionId: string, answerId?: string) => void;\n startQuiz: () => void;\n finishQuiz: () => void;\n resetQuiz: () => void;\n\n // Timer\n updateTime: (time: number) => void;\n startTimer: () => void;\n stopTimer: () => void;\n\n // Getters\n getCurrentQuestion: () => Question | null;\n getTotalQuestions: () => number;\n getAnsweredQuestions: () => number;\n getUnansweredQuestions: () => number[];\n getSkippedQuestions: () => number;\n getProgress: () => number;\n isQuestionAnswered: (questionId: string) => boolean;\n isQuestionSkipped: (questionId: string) => boolean;\n getCurrentAnswer: () => string | undefined;\n getQuizTitle: () => string;\n formatTime: (seconds: number) => string;\n getUserAnswers: () => UserAnswer[];\n getUnansweredQuestionsFromUserAnswers: () => number[];\n getQuestionsGroupedBySubject: () => { [key: string]: Question[] };\n getUserId: () => string;\n\n // New methods for userAnswers\n getUserAnswerByQuestionId: (questionId: string) => UserAnswerItem | null;\n isQuestionAnsweredByUserAnswers: (questionId: string) => boolean;\n getQuestionStatusFromUserAnswers: (\n questionId: string\n ) => 'answered' | 'unanswered' | 'skipped';\n getUserAnswersForActivity: () => UserAnswerItem[];\n}\n\nexport const useQuizStore = create<QuizState>()(\n devtools(\n (set, get) => {\n let timerInterval: ReturnType<typeof setInterval> | null = null;\n\n const startTimer = () => {\n if (get().isFinished) {\n return;\n }\n\n if (timerInterval) {\n clearInterval(timerInterval);\n }\n\n timerInterval = setInterval(() => {\n const { timeElapsed } = get();\n set({ timeElapsed: timeElapsed + 1 });\n }, 1000);\n };\n\n const stopTimer = () => {\n if (timerInterval) {\n clearInterval(timerInterval);\n timerInterval = null;\n }\n };\n\n return {\n // Initial State\n currentQuestionIndex: 0,\n selectedAnswers: {},\n userAnswers: [],\n timeElapsed: 0,\n isStarted: false,\n isFinished: false,\n userId: '',\n\n // Setters\n setBySimulated: (simulado) => set({ bySimulated: simulado }),\n setByActivity: (atividade) => set({ byActivity: atividade }),\n setByQuestionary: (aula) => set({ byQuestionary: aula }),\n setUserId: (userId) => set({ userId }),\n getUserId: () => get().userId,\n\n // Navigation\n goToNextQuestion: () => {\n const { currentQuestionIndex, getTotalQuestions } = get();\n const totalQuestions = getTotalQuestions();\n\n if (currentQuestionIndex < totalQuestions - 1) {\n set({ currentQuestionIndex: currentQuestionIndex + 1 });\n }\n },\n\n goToPreviousQuestion: () => {\n const { currentQuestionIndex } = get();\n\n if (currentQuestionIndex > 0) {\n set({ currentQuestionIndex: currentQuestionIndex - 1 });\n }\n },\n\n goToQuestion: (index) => {\n const { getTotalQuestions } = get();\n const totalQuestions = getTotalQuestions();\n\n if (index >= 0 && index < totalQuestions) {\n set({ currentQuestionIndex: index });\n }\n },\n\n getActiveQuiz: () => {\n const { bySimulated, byActivity, byQuestionary } = get();\n if (bySimulated)\n return { quiz: bySimulated, type: 'bySimulated' as const };\n if (byActivity)\n return { quiz: byActivity, type: 'byActivity' as const };\n if (byQuestionary)\n return { quiz: byQuestionary, type: 'byQuestionary' as const };\n return null;\n },\n\n selectAnswer: (questionId, answerId) => {\n const { getActiveQuiz, userAnswers } = get();\n const activeQuiz = getActiveQuiz();\n\n if (!activeQuiz) return;\n\n const updatedQuestions = activeQuiz.quiz.questions.map((question) =>\n question.id === questionId\n ? { ...question, answerKey: answerId }\n : question\n );\n\n const updatedQuiz = {\n ...activeQuiz.quiz,\n questions: updatedQuestions,\n };\n\n const activityId = activeQuiz.quiz.id;\n const userId = get().getUserId();\n\n if (!userId) {\n console.warn('selectAnswer called before userId is set');\n return;\n }\n\n const existingAnswerIndex = userAnswers.findIndex(\n (answer) => answer.questionId === questionId\n );\n\n const newUserAnswer: UserAnswerItem = {\n questionId,\n activityId,\n userId,\n answer: answerId,\n optionId: answerId,\n };\n\n let updatedUserAnswers;\n if (existingAnswerIndex !== -1) {\n updatedUserAnswers = [...userAnswers];\n updatedUserAnswers[existingAnswerIndex] = newUserAnswer;\n } else {\n updatedUserAnswers = [...userAnswers, newUserAnswer];\n }\n\n set({\n [activeQuiz.type]: updatedQuiz,\n userAnswers: updatedUserAnswers,\n });\n },\n\n skipQuestion: () => {\n const { getCurrentQuestion, userAnswers, getActiveQuiz } = get();\n const currentQuestion = getCurrentQuestion();\n const activeQuiz = getActiveQuiz();\n\n if (!activeQuiz) return;\n\n if (currentQuestion) {\n const activityId = activeQuiz.quiz.id;\n const userId = get().getUserId();\n\n const existingAnswerIndex = userAnswers.findIndex(\n (answer) => answer.questionId === currentQuestion.id\n );\n\n const newUserAnswer: UserAnswerItem = {\n questionId: currentQuestion.id,\n activityId,\n userId,\n answer: null,\n optionId: null,\n };\n\n let updatedUserAnswers;\n if (existingAnswerIndex !== -1) {\n // Update existing answer\n updatedUserAnswers = [...userAnswers];\n updatedUserAnswers[existingAnswerIndex] = newUserAnswer;\n } else {\n // Add new answer\n updatedUserAnswers = [...userAnswers, newUserAnswer];\n }\n\n set({\n userAnswers: updatedUserAnswers,\n });\n }\n },\n\n addUserAnswer: (questionId, answerId) => {\n const { getActiveQuiz, userAnswers } = get();\n const activeQuiz = getActiveQuiz();\n\n if (!activeQuiz) return;\n\n // Add to userAnswers array with new structure\n const activityId = activeQuiz.quiz.id;\n const userId = get().getUserId();\n\n const existingAnswerIndex = userAnswers.findIndex(\n (answer) => answer.questionId === questionId\n );\n\n const newUserAnswer: UserAnswerItem = {\n questionId,\n activityId,\n userId,\n answer: answerId || null,\n optionId: answerId || null,\n };\n\n if (existingAnswerIndex !== -1) {\n // Update existing answer\n const updatedUserAnswers = [...userAnswers];\n updatedUserAnswers[existingAnswerIndex] = newUserAnswer;\n set({ userAnswers: updatedUserAnswers });\n } else {\n // Add new answer\n set({ userAnswers: [...userAnswers, newUserAnswer] });\n }\n },\n\n startQuiz: () => {\n set({ isStarted: true, timeElapsed: 0 });\n startTimer();\n },\n\n finishQuiz: () => {\n set({ isFinished: true });\n stopTimer();\n },\n\n resetQuiz: () => {\n stopTimer();\n set({\n currentQuestionIndex: 0,\n selectedAnswers: {},\n userAnswers: [],\n timeElapsed: 0,\n isStarted: false,\n isFinished: false,\n userId: '',\n });\n },\n\n // Timer\n updateTime: (time) => set({ timeElapsed: time }),\n startTimer,\n stopTimer,\n\n // Getters\n getCurrentQuestion: () => {\n const { currentQuestionIndex, getActiveQuiz } = get();\n const activeQuiz = getActiveQuiz();\n\n if (!activeQuiz) {\n return null;\n }\n\n return activeQuiz.quiz.questions[currentQuestionIndex];\n },\n\n getTotalQuestions: () => {\n const { getActiveQuiz } = get();\n const activeQuiz = getActiveQuiz();\n\n return activeQuiz?.quiz?.questions?.length || 0;\n },\n\n getAnsweredQuestions: () => {\n const { userAnswers } = get();\n return userAnswers.filter((answer) => answer.answer !== null).length;\n },\n\n getUnansweredQuestions: () => {\n const { getActiveQuiz, userAnswers } = get();\n const activeQuiz = getActiveQuiz();\n if (!activeQuiz) return [];\n\n const unansweredQuestions: number[] = [];\n\n activeQuiz.quiz.questions.forEach((question, index) => {\n const userAnswer = userAnswers.find(\n (answer) => answer.questionId === question.id\n );\n const isAnswered = userAnswer && userAnswer.answer !== null;\n const isSkipped = userAnswer && userAnswer.answer === null;\n\n if (!isAnswered && !isSkipped) {\n unansweredQuestions.push(index + 1); // index + 1 para mostrar número da questão\n }\n });\n return unansweredQuestions;\n },\n\n getSkippedQuestions: () => {\n const { userAnswers } = get();\n return userAnswers.filter((answer) => answer.answer === null).length;\n },\n\n getProgress: () => {\n const { getTotalQuestions, getAnsweredQuestions } = get();\n const total = getTotalQuestions();\n const answered = getAnsweredQuestions();\n\n return total > 0 ? (answered / total) * 100 : 0;\n },\n\n isQuestionAnswered: (questionId) => {\n const { userAnswers } = get();\n const userAnswer = userAnswers.find(\n (answer) => answer.questionId === questionId\n );\n return userAnswer ? userAnswer.answer !== null : false;\n },\n\n isQuestionSkipped: (questionId) => {\n const { userAnswers } = get();\n const userAnswer = userAnswers.find(\n (answer) => answer.questionId === questionId\n );\n return userAnswer ? userAnswer.answer === null : false;\n },\n\n getCurrentAnswer: () => {\n const { getCurrentQuestion, userAnswers } = get();\n const currentQuestion = getCurrentQuestion();\n\n if (!currentQuestion) return undefined;\n\n const userAnswer = userAnswers.find(\n (answer) => answer.questionId === currentQuestion.id\n );\n return userAnswer?.answer;\n },\n\n getQuizTitle: () => {\n const { getActiveQuiz } = get();\n const activeQuiz = getActiveQuiz();\n\n return activeQuiz?.quiz?.title || 'Quiz';\n },\n\n formatTime: (seconds: number) => {\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;\n },\n\n getUserAnswers: () => {\n const { getActiveQuiz, userAnswers } = get();\n const activeQuiz = getActiveQuiz();\n\n if (!activeQuiz) return [];\n\n return activeQuiz.quiz.questions.map((question) => {\n const userAnswer = userAnswers.find(\n (answer) => answer.questionId === question.id\n );\n return {\n ...question,\n isSkipped: userAnswer ? userAnswer.answer === null : false,\n };\n });\n },\n\n getUnansweredQuestionsFromUserAnswers: () => {\n const { getActiveQuiz, userAnswers } = get();\n const activeQuiz = getActiveQuiz();\n if (!activeQuiz) return [];\n\n const unansweredQuestions: number[] = [];\n\n activeQuiz.quiz.questions.forEach((question, index) => {\n const userAnswer = userAnswers.find(\n (answer) => answer.questionId === question.id\n );\n const hasAnswer = userAnswer && userAnswer.answer !== null;\n const isSkipped = userAnswer && userAnswer.answer === null;\n\n // Se não há resposta do usuário OU se a questão foi pulada\n if (!hasAnswer || isSkipped) {\n unansweredQuestions.push(index + 1); // index + 1 para mostrar número da questão\n }\n });\n\n return unansweredQuestions;\n },\n\n getQuestionsGroupedBySubject: () => {\n const { getActiveQuiz } = get();\n const activeQuiz = getActiveQuiz();\n if (!activeQuiz) return {};\n\n const groupedQuestions: { [key: string]: Question[] } = {};\n\n activeQuiz.quiz.questions.forEach((question) => {\n const subjectId =\n question.knowledgeMatrix?.[0]?.subjectId || 'Sem matéria';\n\n if (!groupedQuestions[subjectId]) {\n groupedQuestions[subjectId] = [];\n }\n\n groupedQuestions[subjectId].push(question);\n });\n\n return groupedQuestions;\n },\n\n // New methods for userAnswers\n getUserAnswerByQuestionId: (questionId) => {\n const { userAnswers } = get();\n return (\n userAnswers.find((answer) => answer.questionId === questionId) ||\n null\n );\n },\n isQuestionAnsweredByUserAnswers: (questionId) => {\n const { userAnswers } = get();\n const answer = userAnswers.find(\n (answer) => answer.questionId === questionId\n );\n return answer ? answer.answer !== null : false;\n },\n getQuestionStatusFromUserAnswers: (questionId) => {\n const { userAnswers } = get();\n const answer = userAnswers.find(\n (answer) => answer.questionId === questionId\n );\n if (!answer) return 'unanswered';\n if (answer.answer === null) return 'skipped';\n return 'answered';\n },\n getUserAnswersForActivity: () => {\n const { userAnswers } = get();\n return userAnswers;\n },\n };\n },\n {\n name: 'quiz-store',\n }\n )\n);\n"],"mappings":"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","names":["QUESTION_DIFFICULTY","QUESTION_TYPE","QUESTION_STATUS","answer"]}
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
// src/components/Quiz/useQuizStore.ts
|
|
2
|
+
import { create } from "zustand";
|
|
3
|
+
import { devtools } from "zustand/middleware";
|
|
4
|
+
var QUESTION_DIFFICULTY = /* @__PURE__ */ ((QUESTION_DIFFICULTY2) => {
|
|
5
|
+
QUESTION_DIFFICULTY2["FACIL"] = "FACIL";
|
|
6
|
+
QUESTION_DIFFICULTY2["MEDIO"] = "MEDIO";
|
|
7
|
+
QUESTION_DIFFICULTY2["DIFICIL"] = "DIFICIL";
|
|
8
|
+
return QUESTION_DIFFICULTY2;
|
|
9
|
+
})(QUESTION_DIFFICULTY || {});
|
|
10
|
+
var QUESTION_TYPE = /* @__PURE__ */ ((QUESTION_TYPE2) => {
|
|
11
|
+
QUESTION_TYPE2["ALTERNATIVA"] = "ALTERNATIVA";
|
|
12
|
+
QUESTION_TYPE2["DISSERTATIVA"] = "DISSERTATIVA";
|
|
13
|
+
QUESTION_TYPE2["MULTIPLA_CHOICE"] = "MULTIPLA_CHOICE";
|
|
14
|
+
return QUESTION_TYPE2;
|
|
15
|
+
})(QUESTION_TYPE || {});
|
|
16
|
+
var QUESTION_STATUS = /* @__PURE__ */ ((QUESTION_STATUS2) => {
|
|
17
|
+
QUESTION_STATUS2["APROVADO"] = "APROVADO";
|
|
18
|
+
QUESTION_STATUS2["REPROVADO"] = "REPROVADO";
|
|
19
|
+
return QUESTION_STATUS2;
|
|
20
|
+
})(QUESTION_STATUS || {});
|
|
21
|
+
var useQuizStore = create()(
|
|
22
|
+
devtools(
|
|
23
|
+
(set, get) => {
|
|
24
|
+
let timerInterval = null;
|
|
25
|
+
const startTimer = () => {
|
|
26
|
+
if (get().isFinished) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (timerInterval) {
|
|
30
|
+
clearInterval(timerInterval);
|
|
31
|
+
}
|
|
32
|
+
timerInterval = setInterval(() => {
|
|
33
|
+
const { timeElapsed } = get();
|
|
34
|
+
set({ timeElapsed: timeElapsed + 1 });
|
|
35
|
+
}, 1e3);
|
|
36
|
+
};
|
|
37
|
+
const stopTimer = () => {
|
|
38
|
+
if (timerInterval) {
|
|
39
|
+
clearInterval(timerInterval);
|
|
40
|
+
timerInterval = null;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
return {
|
|
44
|
+
// Initial State
|
|
45
|
+
currentQuestionIndex: 0,
|
|
46
|
+
selectedAnswers: {},
|
|
47
|
+
userAnswers: [],
|
|
48
|
+
timeElapsed: 0,
|
|
49
|
+
isStarted: false,
|
|
50
|
+
isFinished: false,
|
|
51
|
+
userId: "",
|
|
52
|
+
// Setters
|
|
53
|
+
setBySimulated: (simulado) => set({ bySimulated: simulado }),
|
|
54
|
+
setByActivity: (atividade) => set({ byActivity: atividade }),
|
|
55
|
+
setByQuestionary: (aula) => set({ byQuestionary: aula }),
|
|
56
|
+
setUserId: (userId) => set({ userId }),
|
|
57
|
+
getUserId: () => get().userId,
|
|
58
|
+
// Navigation
|
|
59
|
+
goToNextQuestion: () => {
|
|
60
|
+
const { currentQuestionIndex, getTotalQuestions } = get();
|
|
61
|
+
const totalQuestions = getTotalQuestions();
|
|
62
|
+
if (currentQuestionIndex < totalQuestions - 1) {
|
|
63
|
+
set({ currentQuestionIndex: currentQuestionIndex + 1 });
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
goToPreviousQuestion: () => {
|
|
67
|
+
const { currentQuestionIndex } = get();
|
|
68
|
+
if (currentQuestionIndex > 0) {
|
|
69
|
+
set({ currentQuestionIndex: currentQuestionIndex - 1 });
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
goToQuestion: (index) => {
|
|
73
|
+
const { getTotalQuestions } = get();
|
|
74
|
+
const totalQuestions = getTotalQuestions();
|
|
75
|
+
if (index >= 0 && index < totalQuestions) {
|
|
76
|
+
set({ currentQuestionIndex: index });
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
getActiveQuiz: () => {
|
|
80
|
+
const { bySimulated, byActivity, byQuestionary } = get();
|
|
81
|
+
if (bySimulated)
|
|
82
|
+
return { quiz: bySimulated, type: "bySimulated" };
|
|
83
|
+
if (byActivity)
|
|
84
|
+
return { quiz: byActivity, type: "byActivity" };
|
|
85
|
+
if (byQuestionary)
|
|
86
|
+
return { quiz: byQuestionary, type: "byQuestionary" };
|
|
87
|
+
return null;
|
|
88
|
+
},
|
|
89
|
+
selectAnswer: (questionId, answerId) => {
|
|
90
|
+
const { getActiveQuiz, userAnswers } = get();
|
|
91
|
+
const activeQuiz = getActiveQuiz();
|
|
92
|
+
if (!activeQuiz) return;
|
|
93
|
+
const updatedQuestions = activeQuiz.quiz.questions.map(
|
|
94
|
+
(question) => question.id === questionId ? { ...question, answerKey: answerId } : question
|
|
95
|
+
);
|
|
96
|
+
const updatedQuiz = {
|
|
97
|
+
...activeQuiz.quiz,
|
|
98
|
+
questions: updatedQuestions
|
|
99
|
+
};
|
|
100
|
+
const activityId = activeQuiz.quiz.id;
|
|
101
|
+
const userId = get().getUserId();
|
|
102
|
+
if (!userId) {
|
|
103
|
+
console.warn("selectAnswer called before userId is set");
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const existingAnswerIndex = userAnswers.findIndex(
|
|
107
|
+
(answer) => answer.questionId === questionId
|
|
108
|
+
);
|
|
109
|
+
const newUserAnswer = {
|
|
110
|
+
questionId,
|
|
111
|
+
activityId,
|
|
112
|
+
userId,
|
|
113
|
+
answer: answerId,
|
|
114
|
+
optionId: answerId
|
|
115
|
+
};
|
|
116
|
+
let updatedUserAnswers;
|
|
117
|
+
if (existingAnswerIndex !== -1) {
|
|
118
|
+
updatedUserAnswers = [...userAnswers];
|
|
119
|
+
updatedUserAnswers[existingAnswerIndex] = newUserAnswer;
|
|
120
|
+
} else {
|
|
121
|
+
updatedUserAnswers = [...userAnswers, newUserAnswer];
|
|
122
|
+
}
|
|
123
|
+
set({
|
|
124
|
+
[activeQuiz.type]: updatedQuiz,
|
|
125
|
+
userAnswers: updatedUserAnswers
|
|
126
|
+
});
|
|
127
|
+
},
|
|
128
|
+
skipQuestion: () => {
|
|
129
|
+
const { getCurrentQuestion, userAnswers, getActiveQuiz } = get();
|
|
130
|
+
const currentQuestion = getCurrentQuestion();
|
|
131
|
+
const activeQuiz = getActiveQuiz();
|
|
132
|
+
if (!activeQuiz) return;
|
|
133
|
+
if (currentQuestion) {
|
|
134
|
+
const activityId = activeQuiz.quiz.id;
|
|
135
|
+
const userId = get().getUserId();
|
|
136
|
+
const existingAnswerIndex = userAnswers.findIndex(
|
|
137
|
+
(answer) => answer.questionId === currentQuestion.id
|
|
138
|
+
);
|
|
139
|
+
const newUserAnswer = {
|
|
140
|
+
questionId: currentQuestion.id,
|
|
141
|
+
activityId,
|
|
142
|
+
userId,
|
|
143
|
+
answer: null,
|
|
144
|
+
optionId: null
|
|
145
|
+
};
|
|
146
|
+
let updatedUserAnswers;
|
|
147
|
+
if (existingAnswerIndex !== -1) {
|
|
148
|
+
updatedUserAnswers = [...userAnswers];
|
|
149
|
+
updatedUserAnswers[existingAnswerIndex] = newUserAnswer;
|
|
150
|
+
} else {
|
|
151
|
+
updatedUserAnswers = [...userAnswers, newUserAnswer];
|
|
152
|
+
}
|
|
153
|
+
set({
|
|
154
|
+
userAnswers: updatedUserAnswers
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
addUserAnswer: (questionId, answerId) => {
|
|
159
|
+
const { getActiveQuiz, userAnswers } = get();
|
|
160
|
+
const activeQuiz = getActiveQuiz();
|
|
161
|
+
if (!activeQuiz) return;
|
|
162
|
+
const activityId = activeQuiz.quiz.id;
|
|
163
|
+
const userId = get().getUserId();
|
|
164
|
+
const existingAnswerIndex = userAnswers.findIndex(
|
|
165
|
+
(answer) => answer.questionId === questionId
|
|
166
|
+
);
|
|
167
|
+
const newUserAnswer = {
|
|
168
|
+
questionId,
|
|
169
|
+
activityId,
|
|
170
|
+
userId,
|
|
171
|
+
answer: answerId || null,
|
|
172
|
+
optionId: answerId || null
|
|
173
|
+
};
|
|
174
|
+
if (existingAnswerIndex !== -1) {
|
|
175
|
+
const updatedUserAnswers = [...userAnswers];
|
|
176
|
+
updatedUserAnswers[existingAnswerIndex] = newUserAnswer;
|
|
177
|
+
set({ userAnswers: updatedUserAnswers });
|
|
178
|
+
} else {
|
|
179
|
+
set({ userAnswers: [...userAnswers, newUserAnswer] });
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
startQuiz: () => {
|
|
183
|
+
set({ isStarted: true, timeElapsed: 0 });
|
|
184
|
+
startTimer();
|
|
185
|
+
},
|
|
186
|
+
finishQuiz: () => {
|
|
187
|
+
set({ isFinished: true });
|
|
188
|
+
stopTimer();
|
|
189
|
+
},
|
|
190
|
+
resetQuiz: () => {
|
|
191
|
+
stopTimer();
|
|
192
|
+
set({
|
|
193
|
+
currentQuestionIndex: 0,
|
|
194
|
+
selectedAnswers: {},
|
|
195
|
+
userAnswers: [],
|
|
196
|
+
timeElapsed: 0,
|
|
197
|
+
isStarted: false,
|
|
198
|
+
isFinished: false,
|
|
199
|
+
userId: ""
|
|
200
|
+
});
|
|
201
|
+
},
|
|
202
|
+
// Timer
|
|
203
|
+
updateTime: (time) => set({ timeElapsed: time }),
|
|
204
|
+
startTimer,
|
|
205
|
+
stopTimer,
|
|
206
|
+
// Getters
|
|
207
|
+
getCurrentQuestion: () => {
|
|
208
|
+
const { currentQuestionIndex, getActiveQuiz } = get();
|
|
209
|
+
const activeQuiz = getActiveQuiz();
|
|
210
|
+
if (!activeQuiz) {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
return activeQuiz.quiz.questions[currentQuestionIndex];
|
|
214
|
+
},
|
|
215
|
+
getTotalQuestions: () => {
|
|
216
|
+
const { getActiveQuiz } = get();
|
|
217
|
+
const activeQuiz = getActiveQuiz();
|
|
218
|
+
return activeQuiz?.quiz?.questions?.length || 0;
|
|
219
|
+
},
|
|
220
|
+
getAnsweredQuestions: () => {
|
|
221
|
+
const { userAnswers } = get();
|
|
222
|
+
return userAnswers.filter((answer) => answer.answer !== null).length;
|
|
223
|
+
},
|
|
224
|
+
getUnansweredQuestions: () => {
|
|
225
|
+
const { getActiveQuiz, userAnswers } = get();
|
|
226
|
+
const activeQuiz = getActiveQuiz();
|
|
227
|
+
if (!activeQuiz) return [];
|
|
228
|
+
const unansweredQuestions = [];
|
|
229
|
+
activeQuiz.quiz.questions.forEach((question, index) => {
|
|
230
|
+
const userAnswer = userAnswers.find(
|
|
231
|
+
(answer) => answer.questionId === question.id
|
|
232
|
+
);
|
|
233
|
+
const isAnswered = userAnswer && userAnswer.answer !== null;
|
|
234
|
+
const isSkipped = userAnswer && userAnswer.answer === null;
|
|
235
|
+
if (!isAnswered && !isSkipped) {
|
|
236
|
+
unansweredQuestions.push(index + 1);
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
return unansweredQuestions;
|
|
240
|
+
},
|
|
241
|
+
getSkippedQuestions: () => {
|
|
242
|
+
const { userAnswers } = get();
|
|
243
|
+
return userAnswers.filter((answer) => answer.answer === null).length;
|
|
244
|
+
},
|
|
245
|
+
getProgress: () => {
|
|
246
|
+
const { getTotalQuestions, getAnsweredQuestions } = get();
|
|
247
|
+
const total = getTotalQuestions();
|
|
248
|
+
const answered = getAnsweredQuestions();
|
|
249
|
+
return total > 0 ? answered / total * 100 : 0;
|
|
250
|
+
},
|
|
251
|
+
isQuestionAnswered: (questionId) => {
|
|
252
|
+
const { userAnswers } = get();
|
|
253
|
+
const userAnswer = userAnswers.find(
|
|
254
|
+
(answer) => answer.questionId === questionId
|
|
255
|
+
);
|
|
256
|
+
return userAnswer ? userAnswer.answer !== null : false;
|
|
257
|
+
},
|
|
258
|
+
isQuestionSkipped: (questionId) => {
|
|
259
|
+
const { userAnswers } = get();
|
|
260
|
+
const userAnswer = userAnswers.find(
|
|
261
|
+
(answer) => answer.questionId === questionId
|
|
262
|
+
);
|
|
263
|
+
return userAnswer ? userAnswer.answer === null : false;
|
|
264
|
+
},
|
|
265
|
+
getCurrentAnswer: () => {
|
|
266
|
+
const { getCurrentQuestion, userAnswers } = get();
|
|
267
|
+
const currentQuestion = getCurrentQuestion();
|
|
268
|
+
if (!currentQuestion) return void 0;
|
|
269
|
+
const userAnswer = userAnswers.find(
|
|
270
|
+
(answer) => answer.questionId === currentQuestion.id
|
|
271
|
+
);
|
|
272
|
+
return userAnswer?.answer;
|
|
273
|
+
},
|
|
274
|
+
getQuizTitle: () => {
|
|
275
|
+
const { getActiveQuiz } = get();
|
|
276
|
+
const activeQuiz = getActiveQuiz();
|
|
277
|
+
return activeQuiz?.quiz?.title || "Quiz";
|
|
278
|
+
},
|
|
279
|
+
formatTime: (seconds) => {
|
|
280
|
+
const minutes = Math.floor(seconds / 60);
|
|
281
|
+
const remainingSeconds = seconds % 60;
|
|
282
|
+
return `${minutes.toString().padStart(2, "0")}:${remainingSeconds.toString().padStart(2, "0")}`;
|
|
283
|
+
},
|
|
284
|
+
getUserAnswers: () => {
|
|
285
|
+
const { getActiveQuiz, userAnswers } = get();
|
|
286
|
+
const activeQuiz = getActiveQuiz();
|
|
287
|
+
if (!activeQuiz) return [];
|
|
288
|
+
return activeQuiz.quiz.questions.map((question) => {
|
|
289
|
+
const userAnswer = userAnswers.find(
|
|
290
|
+
(answer) => answer.questionId === question.id
|
|
291
|
+
);
|
|
292
|
+
return {
|
|
293
|
+
...question,
|
|
294
|
+
isSkipped: userAnswer ? userAnswer.answer === null : false
|
|
295
|
+
};
|
|
296
|
+
});
|
|
297
|
+
},
|
|
298
|
+
getUnansweredQuestionsFromUserAnswers: () => {
|
|
299
|
+
const { getActiveQuiz, userAnswers } = get();
|
|
300
|
+
const activeQuiz = getActiveQuiz();
|
|
301
|
+
if (!activeQuiz) return [];
|
|
302
|
+
const unansweredQuestions = [];
|
|
303
|
+
activeQuiz.quiz.questions.forEach((question, index) => {
|
|
304
|
+
const userAnswer = userAnswers.find(
|
|
305
|
+
(answer) => answer.questionId === question.id
|
|
306
|
+
);
|
|
307
|
+
const hasAnswer = userAnswer && userAnswer.answer !== null;
|
|
308
|
+
const isSkipped = userAnswer && userAnswer.answer === null;
|
|
309
|
+
if (!hasAnswer || isSkipped) {
|
|
310
|
+
unansweredQuestions.push(index + 1);
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
return unansweredQuestions;
|
|
314
|
+
},
|
|
315
|
+
getQuestionsGroupedBySubject: () => {
|
|
316
|
+
const { getActiveQuiz } = get();
|
|
317
|
+
const activeQuiz = getActiveQuiz();
|
|
318
|
+
if (!activeQuiz) return {};
|
|
319
|
+
const groupedQuestions = {};
|
|
320
|
+
activeQuiz.quiz.questions.forEach((question) => {
|
|
321
|
+
const subjectId = question.knowledgeMatrix?.[0]?.subjectId || "Sem mat\xE9ria";
|
|
322
|
+
if (!groupedQuestions[subjectId]) {
|
|
323
|
+
groupedQuestions[subjectId] = [];
|
|
324
|
+
}
|
|
325
|
+
groupedQuestions[subjectId].push(question);
|
|
326
|
+
});
|
|
327
|
+
return groupedQuestions;
|
|
328
|
+
},
|
|
329
|
+
// New methods for userAnswers
|
|
330
|
+
getUserAnswerByQuestionId: (questionId) => {
|
|
331
|
+
const { userAnswers } = get();
|
|
332
|
+
return userAnswers.find((answer) => answer.questionId === questionId) || null;
|
|
333
|
+
},
|
|
334
|
+
isQuestionAnsweredByUserAnswers: (questionId) => {
|
|
335
|
+
const { userAnswers } = get();
|
|
336
|
+
const answer = userAnswers.find(
|
|
337
|
+
(answer2) => answer2.questionId === questionId
|
|
338
|
+
);
|
|
339
|
+
return answer ? answer.answer !== null : false;
|
|
340
|
+
},
|
|
341
|
+
getQuestionStatusFromUserAnswers: (questionId) => {
|
|
342
|
+
const { userAnswers } = get();
|
|
343
|
+
const answer = userAnswers.find(
|
|
344
|
+
(answer2) => answer2.questionId === questionId
|
|
345
|
+
);
|
|
346
|
+
if (!answer) return "unanswered";
|
|
347
|
+
if (answer.answer === null) return "skipped";
|
|
348
|
+
return "answered";
|
|
349
|
+
},
|
|
350
|
+
getUserAnswersForActivity: () => {
|
|
351
|
+
const { userAnswers } = get();
|
|
352
|
+
return userAnswers;
|
|
353
|
+
}
|
|
354
|
+
};
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
name: "quiz-store"
|
|
358
|
+
}
|
|
359
|
+
)
|
|
360
|
+
);
|
|
361
|
+
export {
|
|
362
|
+
QUESTION_DIFFICULTY,
|
|
363
|
+
QUESTION_STATUS,
|
|
364
|
+
QUESTION_TYPE,
|
|
365
|
+
useQuizStore
|
|
366
|
+
};
|
|
367
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Quiz/useQuizStore.ts"],"sourcesContent":["import { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\n\nexport enum QUESTION_DIFFICULTY {\n FACIL = 'FACIL',\n MEDIO = 'MEDIO',\n DIFICIL = 'DIFICIL',\n}\n\nexport enum QUESTION_TYPE {\n ALTERNATIVA = 'ALTERNATIVA',\n DISSERTATIVA = 'DISSERTATIVA',\n MULTIPLA_CHOICE = 'MULTIPLA_CHOICE',\n}\n\nexport enum QUESTION_STATUS {\n APROVADO = 'APROVADO',\n REPROVADO = 'REPROVADO',\n}\n\nexport interface Question {\n id: string;\n questionText: string;\n correctOptionId: string;\n description: string;\n type: QUESTION_TYPE;\n status: QUESTION_STATUS;\n difficulty: QUESTION_DIFFICULTY;\n examBoard: string | null;\n examYear: string | null;\n answerKey: string | null;\n createdAt: string;\n updatedAt: string;\n knowledgeMatrix: {\n areaKnowledgeId: string;\n subjectId: string;\n topicId: string;\n subtopicId: string;\n contentId: string;\n }[];\n options: {\n id: string;\n option: string;\n }[];\n createdBy: string;\n}\n\ninterface Simulado {\n id: string;\n title: string;\n category: string;\n questions: Question[];\n}\n\ninterface Atividade {\n id: string;\n title: string;\n questions: Question[];\n}\n\ninterface Aula {\n id: string;\n title: string;\n questions: Question[];\n}\n\ninterface UserAnswerItem {\n questionId: string;\n activityId: string;\n userId: string;\n answer: string | null;\n optionId: string | null;\n}\n\ninterface UserAnswer extends Question {\n isSkipped: boolean;\n}\n\ninterface QuizState {\n // Data\n bySimulated?: Simulado;\n byActivity?: Atividade;\n byQuestionary?: Aula;\n\n // UI State\n currentQuestionIndex: number;\n selectedAnswers: Record<string, string>;\n userAnswers: UserAnswerItem[];\n timeElapsed: number;\n isStarted: boolean;\n isFinished: boolean;\n userId: string;\n\n // Actions\n setBySimulated: (simulado: Simulado) => void;\n setByActivity: (atividade: Atividade) => void;\n setByQuestionary: (aula: Aula) => void;\n setUserId: (userId: string) => void;\n\n // Quiz Navigation\n goToNextQuestion: () => void;\n goToPreviousQuestion: () => void;\n goToQuestion: (index: number) => void;\n getActiveQuiz: () => {\n quiz: Simulado | Atividade | Aula;\n type: 'bySimulated' | 'byActivity' | 'byQuestionary';\n } | null;\n\n // Quiz Actions\n selectAnswer: (questionId: string, answerId: string) => void;\n skipQuestion: () => void;\n addUserAnswer: (questionId: string, answerId?: string) => void;\n startQuiz: () => void;\n finishQuiz: () => void;\n resetQuiz: () => void;\n\n // Timer\n updateTime: (time: number) => void;\n startTimer: () => void;\n stopTimer: () => void;\n\n // Getters\n getCurrentQuestion: () => Question | null;\n getTotalQuestions: () => number;\n getAnsweredQuestions: () => number;\n getUnansweredQuestions: () => number[];\n getSkippedQuestions: () => number;\n getProgress: () => number;\n isQuestionAnswered: (questionId: string) => boolean;\n isQuestionSkipped: (questionId: string) => boolean;\n getCurrentAnswer: () => string | undefined;\n getQuizTitle: () => string;\n formatTime: (seconds: number) => string;\n getUserAnswers: () => UserAnswer[];\n getUnansweredQuestionsFromUserAnswers: () => number[];\n getQuestionsGroupedBySubject: () => { [key: string]: Question[] };\n getUserId: () => string;\n\n // New methods for userAnswers\n getUserAnswerByQuestionId: (questionId: string) => UserAnswerItem | null;\n isQuestionAnsweredByUserAnswers: (questionId: string) => boolean;\n getQuestionStatusFromUserAnswers: (\n questionId: string\n ) => 'answered' | 'unanswered' | 'skipped';\n getUserAnswersForActivity: () => UserAnswerItem[];\n}\n\nexport const useQuizStore = create<QuizState>()(\n devtools(\n (set, get) => {\n let timerInterval: ReturnType<typeof setInterval> | null = null;\n\n const startTimer = () => {\n if (get().isFinished) {\n return;\n }\n\n if (timerInterval) {\n clearInterval(timerInterval);\n }\n\n timerInterval = setInterval(() => {\n const { timeElapsed } = get();\n set({ timeElapsed: timeElapsed + 1 });\n }, 1000);\n };\n\n const stopTimer = () => {\n if (timerInterval) {\n clearInterval(timerInterval);\n timerInterval = null;\n }\n };\n\n return {\n // Initial State\n currentQuestionIndex: 0,\n selectedAnswers: {},\n userAnswers: [],\n timeElapsed: 0,\n isStarted: false,\n isFinished: false,\n userId: '',\n\n // Setters\n setBySimulated: (simulado) => set({ bySimulated: simulado }),\n setByActivity: (atividade) => set({ byActivity: atividade }),\n setByQuestionary: (aula) => set({ byQuestionary: aula }),\n setUserId: (userId) => set({ userId }),\n getUserId: () => get().userId,\n\n // Navigation\n goToNextQuestion: () => {\n const { currentQuestionIndex, getTotalQuestions } = get();\n const totalQuestions = getTotalQuestions();\n\n if (currentQuestionIndex < totalQuestions - 1) {\n set({ currentQuestionIndex: currentQuestionIndex + 1 });\n }\n },\n\n goToPreviousQuestion: () => {\n const { currentQuestionIndex } = get();\n\n if (currentQuestionIndex > 0) {\n set({ currentQuestionIndex: currentQuestionIndex - 1 });\n }\n },\n\n goToQuestion: (index) => {\n const { getTotalQuestions } = get();\n const totalQuestions = getTotalQuestions();\n\n if (index >= 0 && index < totalQuestions) {\n set({ currentQuestionIndex: index });\n }\n },\n\n getActiveQuiz: () => {\n const { bySimulated, byActivity, byQuestionary } = get();\n if (bySimulated)\n return { quiz: bySimulated, type: 'bySimulated' as const };\n if (byActivity)\n return { quiz: byActivity, type: 'byActivity' as const };\n if (byQuestionary)\n return { quiz: byQuestionary, type: 'byQuestionary' as const };\n return null;\n },\n\n selectAnswer: (questionId, answerId) => {\n const { getActiveQuiz, userAnswers } = get();\n const activeQuiz = getActiveQuiz();\n\n if (!activeQuiz) return;\n\n const updatedQuestions = activeQuiz.quiz.questions.map((question) =>\n question.id === questionId\n ? { ...question, answerKey: answerId }\n : question\n );\n\n const updatedQuiz = {\n ...activeQuiz.quiz,\n questions: updatedQuestions,\n };\n\n const activityId = activeQuiz.quiz.id;\n const userId = get().getUserId();\n\n if (!userId) {\n console.warn('selectAnswer called before userId is set');\n return;\n }\n\n const existingAnswerIndex = userAnswers.findIndex(\n (answer) => answer.questionId === questionId\n );\n\n const newUserAnswer: UserAnswerItem = {\n questionId,\n activityId,\n userId,\n answer: answerId,\n optionId: answerId,\n };\n\n let updatedUserAnswers;\n if (existingAnswerIndex !== -1) {\n updatedUserAnswers = [...userAnswers];\n updatedUserAnswers[existingAnswerIndex] = newUserAnswer;\n } else {\n updatedUserAnswers = [...userAnswers, newUserAnswer];\n }\n\n set({\n [activeQuiz.type]: updatedQuiz,\n userAnswers: updatedUserAnswers,\n });\n },\n\n skipQuestion: () => {\n const { getCurrentQuestion, userAnswers, getActiveQuiz } = get();\n const currentQuestion = getCurrentQuestion();\n const activeQuiz = getActiveQuiz();\n\n if (!activeQuiz) return;\n\n if (currentQuestion) {\n const activityId = activeQuiz.quiz.id;\n const userId = get().getUserId();\n\n const existingAnswerIndex = userAnswers.findIndex(\n (answer) => answer.questionId === currentQuestion.id\n );\n\n const newUserAnswer: UserAnswerItem = {\n questionId: currentQuestion.id,\n activityId,\n userId,\n answer: null,\n optionId: null,\n };\n\n let updatedUserAnswers;\n if (existingAnswerIndex !== -1) {\n // Update existing answer\n updatedUserAnswers = [...userAnswers];\n updatedUserAnswers[existingAnswerIndex] = newUserAnswer;\n } else {\n // Add new answer\n updatedUserAnswers = [...userAnswers, newUserAnswer];\n }\n\n set({\n userAnswers: updatedUserAnswers,\n });\n }\n },\n\n addUserAnswer: (questionId, answerId) => {\n const { getActiveQuiz, userAnswers } = get();\n const activeQuiz = getActiveQuiz();\n\n if (!activeQuiz) return;\n\n // Add to userAnswers array with new structure\n const activityId = activeQuiz.quiz.id;\n const userId = get().getUserId();\n\n const existingAnswerIndex = userAnswers.findIndex(\n (answer) => answer.questionId === questionId\n );\n\n const newUserAnswer: UserAnswerItem = {\n questionId,\n activityId,\n userId,\n answer: answerId || null,\n optionId: answerId || null,\n };\n\n if (existingAnswerIndex !== -1) {\n // Update existing answer\n const updatedUserAnswers = [...userAnswers];\n updatedUserAnswers[existingAnswerIndex] = newUserAnswer;\n set({ userAnswers: updatedUserAnswers });\n } else {\n // Add new answer\n set({ userAnswers: [...userAnswers, newUserAnswer] });\n }\n },\n\n startQuiz: () => {\n set({ isStarted: true, timeElapsed: 0 });\n startTimer();\n },\n\n finishQuiz: () => {\n set({ isFinished: true });\n stopTimer();\n },\n\n resetQuiz: () => {\n stopTimer();\n set({\n currentQuestionIndex: 0,\n selectedAnswers: {},\n userAnswers: [],\n timeElapsed: 0,\n isStarted: false,\n isFinished: false,\n userId: '',\n });\n },\n\n // Timer\n updateTime: (time) => set({ timeElapsed: time }),\n startTimer,\n stopTimer,\n\n // Getters\n getCurrentQuestion: () => {\n const { currentQuestionIndex, getActiveQuiz } = get();\n const activeQuiz = getActiveQuiz();\n\n if (!activeQuiz) {\n return null;\n }\n\n return activeQuiz.quiz.questions[currentQuestionIndex];\n },\n\n getTotalQuestions: () => {\n const { getActiveQuiz } = get();\n const activeQuiz = getActiveQuiz();\n\n return activeQuiz?.quiz?.questions?.length || 0;\n },\n\n getAnsweredQuestions: () => {\n const { userAnswers } = get();\n return userAnswers.filter((answer) => answer.answer !== null).length;\n },\n\n getUnansweredQuestions: () => {\n const { getActiveQuiz, userAnswers } = get();\n const activeQuiz = getActiveQuiz();\n if (!activeQuiz) return [];\n\n const unansweredQuestions: number[] = [];\n\n activeQuiz.quiz.questions.forEach((question, index) => {\n const userAnswer = userAnswers.find(\n (answer) => answer.questionId === question.id\n );\n const isAnswered = userAnswer && userAnswer.answer !== null;\n const isSkipped = userAnswer && userAnswer.answer === null;\n\n if (!isAnswered && !isSkipped) {\n unansweredQuestions.push(index + 1); // index + 1 para mostrar número da questão\n }\n });\n return unansweredQuestions;\n },\n\n getSkippedQuestions: () => {\n const { userAnswers } = get();\n return userAnswers.filter((answer) => answer.answer === null).length;\n },\n\n getProgress: () => {\n const { getTotalQuestions, getAnsweredQuestions } = get();\n const total = getTotalQuestions();\n const answered = getAnsweredQuestions();\n\n return total > 0 ? (answered / total) * 100 : 0;\n },\n\n isQuestionAnswered: (questionId) => {\n const { userAnswers } = get();\n const userAnswer = userAnswers.find(\n (answer) => answer.questionId === questionId\n );\n return userAnswer ? userAnswer.answer !== null : false;\n },\n\n isQuestionSkipped: (questionId) => {\n const { userAnswers } = get();\n const userAnswer = userAnswers.find(\n (answer) => answer.questionId === questionId\n );\n return userAnswer ? userAnswer.answer === null : false;\n },\n\n getCurrentAnswer: () => {\n const { getCurrentQuestion, userAnswers } = get();\n const currentQuestion = getCurrentQuestion();\n\n if (!currentQuestion) return undefined;\n\n const userAnswer = userAnswers.find(\n (answer) => answer.questionId === currentQuestion.id\n );\n return userAnswer?.answer;\n },\n\n getQuizTitle: () => {\n const { getActiveQuiz } = get();\n const activeQuiz = getActiveQuiz();\n\n return activeQuiz?.quiz?.title || 'Quiz';\n },\n\n formatTime: (seconds: number) => {\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;\n },\n\n getUserAnswers: () => {\n const { getActiveQuiz, userAnswers } = get();\n const activeQuiz = getActiveQuiz();\n\n if (!activeQuiz) return [];\n\n return activeQuiz.quiz.questions.map((question) => {\n const userAnswer = userAnswers.find(\n (answer) => answer.questionId === question.id\n );\n return {\n ...question,\n isSkipped: userAnswer ? userAnswer.answer === null : false,\n };\n });\n },\n\n getUnansweredQuestionsFromUserAnswers: () => {\n const { getActiveQuiz, userAnswers } = get();\n const activeQuiz = getActiveQuiz();\n if (!activeQuiz) return [];\n\n const unansweredQuestions: number[] = [];\n\n activeQuiz.quiz.questions.forEach((question, index) => {\n const userAnswer = userAnswers.find(\n (answer) => answer.questionId === question.id\n );\n const hasAnswer = userAnswer && userAnswer.answer !== null;\n const isSkipped = userAnswer && userAnswer.answer === null;\n\n // Se não há resposta do usuário OU se a questão foi pulada\n if (!hasAnswer || isSkipped) {\n unansweredQuestions.push(index + 1); // index + 1 para mostrar número da questão\n }\n });\n\n return unansweredQuestions;\n },\n\n getQuestionsGroupedBySubject: () => {\n const { getActiveQuiz } = get();\n const activeQuiz = getActiveQuiz();\n if (!activeQuiz) return {};\n\n const groupedQuestions: { [key: string]: Question[] } = {};\n\n activeQuiz.quiz.questions.forEach((question) => {\n const subjectId =\n question.knowledgeMatrix?.[0]?.subjectId || 'Sem matéria';\n\n if (!groupedQuestions[subjectId]) {\n groupedQuestions[subjectId] = [];\n }\n\n groupedQuestions[subjectId].push(question);\n });\n\n return groupedQuestions;\n },\n\n // New methods for userAnswers\n getUserAnswerByQuestionId: (questionId) => {\n const { userAnswers } = get();\n return (\n userAnswers.find((answer) => answer.questionId === questionId) ||\n null\n );\n },\n isQuestionAnsweredByUserAnswers: (questionId) => {\n const { userAnswers } = get();\n const answer = userAnswers.find(\n (answer) => answer.questionId === questionId\n );\n return answer ? answer.answer !== null : false;\n },\n getQuestionStatusFromUserAnswers: (questionId) => {\n const { userAnswers } = get();\n const answer = userAnswers.find(\n (answer) => answer.questionId === questionId\n );\n if (!answer) return 'unanswered';\n if (answer.answer === null) return 'skipped';\n return 'answered';\n },\n getUserAnswersForActivity: () => {\n const { userAnswers } = get();\n return userAnswers;\n },\n };\n },\n {\n name: 'quiz-store',\n }\n )\n);\n"],"mappings":"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","names":["QUESTION_DIFFICULTY","QUESTION_TYPE","QUESTION_STATUS","answer"]}
|
package/dist/index.css
CHANGED
|
@@ -526,9 +526,15 @@
|
|
|
526
526
|
.right-\[10px\] {
|
|
527
527
|
right: 10px;
|
|
528
528
|
}
|
|
529
|
+
.bottom-0 {
|
|
530
|
+
bottom: calc(var(--spacing) * 0);
|
|
531
|
+
}
|
|
529
532
|
.bottom-4 {
|
|
530
533
|
bottom: calc(var(--spacing) * 4);
|
|
531
534
|
}
|
|
535
|
+
.bottom-15 {
|
|
536
|
+
bottom: calc(var(--spacing) * 15);
|
|
537
|
+
}
|
|
532
538
|
.bottom-full {
|
|
533
539
|
bottom: 100%;
|
|
534
540
|
}
|
|
@@ -652,6 +658,9 @@
|
|
|
652
658
|
.mb-8 {
|
|
653
659
|
margin-bottom: calc(var(--spacing) * 8);
|
|
654
660
|
}
|
|
661
|
+
.mb-auto {
|
|
662
|
+
margin-bottom: auto;
|
|
663
|
+
}
|
|
655
664
|
.ml-2 {
|
|
656
665
|
margin-left: calc(var(--spacing) * 2);
|
|
657
666
|
}
|
|
@@ -810,6 +819,9 @@
|
|
|
810
819
|
.h-\[152px\] {
|
|
811
820
|
height: 152px;
|
|
812
821
|
}
|
|
822
|
+
.h-\[calc\(100vh-180px\)\] {
|
|
823
|
+
height: calc(100vh - 180px);
|
|
824
|
+
}
|
|
813
825
|
.h-auto {
|
|
814
826
|
height: auto;
|
|
815
827
|
}
|
|
@@ -945,6 +957,9 @@
|
|
|
945
957
|
.w-\[200px\] {
|
|
946
958
|
width: 200px;
|
|
947
959
|
}
|
|
960
|
+
.w-\[282px\] {
|
|
961
|
+
width: 282px;
|
|
962
|
+
}
|
|
948
963
|
.w-\[320px\] {
|
|
949
964
|
width: 320px;
|
|
950
965
|
}
|
|
@@ -994,6 +1009,9 @@
|
|
|
994
1009
|
.max-w-\[262px\] {
|
|
995
1010
|
max-width: 262px;
|
|
996
1011
|
}
|
|
1012
|
+
.max-w-\[266px\] {
|
|
1013
|
+
max-width: 266px;
|
|
1014
|
+
}
|
|
997
1015
|
.max-w-\[324px\] {
|
|
998
1016
|
max-width: 324px;
|
|
999
1017
|
}
|
|
@@ -2405,6 +2423,10 @@
|
|
|
2405
2423
|
.stroke-success-200 {
|
|
2406
2424
|
stroke: var(--color-success-200);
|
|
2407
2425
|
}
|
|
2426
|
+
.object-cover {
|
|
2427
|
+
-o-object-fit: cover;
|
|
2428
|
+
object-fit: cover;
|
|
2429
|
+
}
|
|
2408
2430
|
.p-0 {
|
|
2409
2431
|
padding: calc(var(--spacing) * 0);
|
|
2410
2432
|
}
|
|
@@ -2417,6 +2439,9 @@
|
|
|
2417
2439
|
.p-3 {
|
|
2418
2440
|
padding: calc(var(--spacing) * 3);
|
|
2419
2441
|
}
|
|
2442
|
+
.p-3\.5 {
|
|
2443
|
+
padding: calc(var(--spacing) * 3.5);
|
|
2444
|
+
}
|
|
2420
2445
|
.p-4 {
|
|
2421
2446
|
padding: calc(var(--spacing) * 4);
|
|
2422
2447
|
}
|
|
@@ -2498,6 +2523,9 @@
|
|
|
2498
2523
|
.pr-10 {
|
|
2499
2524
|
padding-right: calc(var(--spacing) * 10);
|
|
2500
2525
|
}
|
|
2526
|
+
.\!pb-\[150px\] {
|
|
2527
|
+
padding-bottom: 150px !important;
|
|
2528
|
+
}
|
|
2501
2529
|
.pb-2 {
|
|
2502
2530
|
padding-bottom: calc(var(--spacing) * 2);
|
|
2503
2531
|
}
|
|
@@ -2513,6 +2541,12 @@
|
|
|
2513
2541
|
.pb-9\.5 {
|
|
2514
2542
|
padding-bottom: calc(var(--spacing) * 9.5);
|
|
2515
2543
|
}
|
|
2544
|
+
.pb-15 {
|
|
2545
|
+
padding-bottom: calc(var(--spacing) * 15);
|
|
2546
|
+
}
|
|
2547
|
+
.pb-\[80px\] {
|
|
2548
|
+
padding-bottom: 80px;
|
|
2549
|
+
}
|
|
2516
2550
|
.pl-8 {
|
|
2517
2551
|
padding-left: calc(var(--spacing) * 8);
|
|
2518
2552
|
}
|
|
@@ -3415,6 +3449,21 @@
|
|
|
3415
3449
|
border-radius: var(--radius-xl);
|
|
3416
3450
|
}
|
|
3417
3451
|
}
|
|
3452
|
+
.not-lg\:h-\[calc\(100vh-200px\)\] {
|
|
3453
|
+
@media not (width >= 64rem) {
|
|
3454
|
+
height: calc(100vh - 200px);
|
|
3455
|
+
}
|
|
3456
|
+
}
|
|
3457
|
+
.not-lg\:max-w-\[calc\(100vw-32px\)\] {
|
|
3458
|
+
@media not (width >= 64rem) {
|
|
3459
|
+
max-width: calc(100vw - 32px);
|
|
3460
|
+
}
|
|
3461
|
+
}
|
|
3462
|
+
.not-lg\:px-6 {
|
|
3463
|
+
@media not (width >= 64rem) {
|
|
3464
|
+
padding-inline: calc(var(--spacing) * 6);
|
|
3465
|
+
}
|
|
3466
|
+
}
|
|
3418
3467
|
.group-hover\:text-primary-950 {
|
|
3419
3468
|
&:is(:where(.group):hover *) {
|
|
3420
3469
|
@media (hover: hover) {
|
|
@@ -7951,6 +8000,11 @@
|
|
|
7951
8000
|
height: calc(var(--spacing) * 6);
|
|
7952
8001
|
}
|
|
7953
8002
|
}
|
|
8003
|
+
.lg\:max-h-\[687px\] {
|
|
8004
|
+
@media (width >= 64rem) {
|
|
8005
|
+
max-height: 687px;
|
|
8006
|
+
}
|
|
8007
|
+
}
|
|
7954
8008
|
.lg\:w-3\.5 {
|
|
7955
8009
|
@media (width >= 64rem) {
|
|
7956
8010
|
width: calc(var(--spacing) * 3.5);
|
|
@@ -7961,6 +8015,11 @@
|
|
|
7961
8015
|
width: calc(var(--spacing) * 6);
|
|
7962
8016
|
}
|
|
7963
8017
|
}
|
|
8018
|
+
.lg\:max-w-\[1000px\] {
|
|
8019
|
+
@media (width >= 64rem) {
|
|
8020
|
+
max-width: 1000px;
|
|
8021
|
+
}
|
|
8022
|
+
}
|
|
7964
8023
|
.lg\:max-w-none {
|
|
7965
8024
|
@media (width >= 64rem) {
|
|
7966
8025
|
max-width: none;
|