UNPKG

analytica-frontend-lib

Version:

Repositório público dos componentes utilizados nas plataformas da Analytica Ensino

140 lines (137 loc) 4.5 kB
import * as zustand from 'zustand'; declare enum QUESTION_DIFFICULTY { FACIL = "FACIL", MEDIO = "MEDIO", DIFICIL = "DIFICIL" } declare enum QUESTION_TYPE { ALTERNATIVA = "ALTERNATIVA", DISSERTATIVA = "DISSERTATIVA", MULTIPLA_CHOICE = "MULTIPLA_CHOICE" } declare enum QUESTION_STATUS { APROVADO = "APROVADO", REPROVADO = "REPROVADO" } interface Question { id: string; questionText: string; description: string; type: QUESTION_TYPE; status: QUESTION_STATUS; difficulty: QUESTION_DIFFICULTY; examBoard: string; examYear: string; answerKey: null | string; institutionIds: string[]; knowledgeMatrix: { areaKnowledgeId: string; subjectId: string; topicId: string; subtopicId: string; contentId: string; }[]; options: { id: string; option: string; isCorrect: boolean; }[]; } interface Simulado { id: string; title: string; category: string; questions: Question[]; } interface Atividade { id: string; title: string; questions: Question[]; } interface Aula { id: string; title: string; questions: Question[]; } interface UserAnswerItem { questionId: string; activityId: string; userId: string; answer: string | null; optionId: string | null; } interface QuizState { bySimulated?: Simulado; byActivity?: Atividade; byQuestionary?: Aula; currentQuestionIndex: number; selectedAnswers: Record<string, string>; userAnswers: UserAnswerItem[]; timeElapsed: number; isStarted: boolean; isFinished: boolean; userId: string; setBySimulated: (simulado: Simulado) => void; setByActivity: (atividade: Atividade) => void; setByQuestionary: (aula: Aula) => void; setUserId: (userId: string) => void; setUserAnswers: (userAnswers: UserAnswerItem[]) => void; goToNextQuestion: () => void; goToPreviousQuestion: () => void; goToQuestion: (index: number) => void; getActiveQuiz: () => { quiz: Simulado | Atividade | Aula; type: 'bySimulated' | 'byActivity' | 'byQuestionary'; } | null; selectAnswer: (questionId: string, answerId: string) => void; selectMultipleAnswer: (questionId: string, answerIds: string[]) => void; skipQuestion: () => void; addUserAnswer: (questionId: string, answerId?: string) => void; startQuiz: () => void; finishQuiz: () => void; resetQuiz: () => void; updateTime: (time: number) => void; startTimer: () => void; stopTimer: () => void; getCurrentQuestion: () => Question | null; getTotalQuestions: () => number; getAnsweredQuestions: () => number; getUnansweredQuestions: () => number[]; getSkippedQuestions: () => number; getProgress: () => number; isQuestionAnswered: (questionId: string) => boolean; isQuestionSkipped: (questionId: string) => boolean; getCurrentAnswer: () => string | undefined; getAllCurrentAnswer: () => UserAnswerItem[] | undefined; getQuizTitle: () => string; formatTime: (seconds: number) => string; getUserAnswers: () => UserAnswerItem[]; getUnansweredQuestionsFromUserAnswers: () => number[]; getQuestionsGroupedBySubject: () => { [key: string]: Question[]; }; getUserId: () => string; setCurrentQuestion: (question: Question) => void; getUserAnswerByQuestionId: (questionId: string) => UserAnswerItem | null; isQuestionAnsweredByUserAnswers: (questionId: string) => boolean; getQuestionStatusFromUserAnswers: (questionId: string) => 'answered' | 'unanswered' | 'skipped'; getUserAnswersForActivity: () => UserAnswerItem[]; } declare const useQuizStore: zustand.UseBoundStore<Omit<zustand.StoreApi<QuizState>, "setState" | "devtools"> & { setState(partial: QuizState | Partial<QuizState> | ((state: QuizState) => QuizState | Partial<QuizState>), replace?: false | undefined, action?: (string | { [x: string]: unknown; [x: number]: unknown; [x: symbol]: unknown; type: string; }) | undefined): void; setState(state: QuizState | ((state: QuizState) => QuizState), replace: true, action?: (string | { [x: string]: unknown; [x: number]: unknown; [x: symbol]: unknown; type: string; }) | undefined): void; devtools: { cleanup: () => void; }; }>; export { QUESTION_DIFFICULTY, QUESTION_STATUS, QUESTION_TYPE, type Question, useQuizStore };