@freecodecamp/ui
Version:
The freeCodeCamp.org open-source UI components
32 lines (31 loc) • 1.17 kB
TypeScript
import { type Question } from "./types";
type InitialQuestion<AnswerT extends number | string> = Omit<Question<AnswerT>, "onChange">;
type ReturnedQuestion<AnswerT extends number | string> = Question<AnswerT> & {
onChange: (selectedAnswer: AnswerT) => void;
};
export interface UseQuizProps<AnswerT extends number | string> {
initialQuestions: InitialQuestion<AnswerT>[];
validationMessages: {
correct: string;
incorrect: string;
};
passingPercent: number;
onSuccess?: () => void;
onFailure?: () => void;
showCorrectAnswersOnSuccess?: boolean;
}
type ValidationData = {
validated: true;
grade: number;
correctAnswerCount: number;
} | {
validated: false;
grade?: never;
correctAnswerCount?: never;
};
export type UseQuizResult<AnswerT extends number | string> = ValidationData & {
questions: ReturnedQuestion<AnswerT>[];
validateAnswers: () => void;
};
export declare const useQuiz: <AnswerT extends number | string>({ initialQuestions, validationMessages, onSuccess, onFailure, passingPercent, showCorrectAnswersOnSuccess, }: UseQuizProps<AnswerT>) => UseQuizResult<AnswerT>;
export {};