analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
140 lines (137 loc) • 4.5 kB
TypeScript
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 };