diff --git a/src/components/Quiz/QuizWidget/QuizRadioGroup.tsx b/src/components/Quiz/QuizWidget/QuizRadioGroup.tsx index b248677840a..6719dcc29d9 100644 --- a/src/components/Quiz/QuizWidget/QuizRadioGroup.tsx +++ b/src/components/Quiz/QuizWidget/QuizRadioGroup.tsx @@ -1,6 +1,6 @@ -import { useMemo } from "react" +import { useMemo, useState } from "react" import { useTranslation } from "next-i18next" -import { useRadio, useRadioGroup, UseRadioProps } from "@chakra-ui/react" +import * as RadioGroup from "@radix-ui/react-radio-group" import type { AnswerChoice, @@ -30,21 +30,16 @@ export const QuizRadioGroup = ({ }: QuizRadioGroupProps) => { const { t } = useTranslation("learn-quizzes") + const [selectedAnswer, setSelectedAnswer] = + useState("") + const handleSelection = (answerId: AnswerKey) => { + setSelectedAnswer(answerId) const isCorrect = answerId === questions[currentQuestionIndex].correctAnswerId setCurrentQuestionAnswerChoice({ answerId, isCorrect }) } - const { - getRadioProps, - getRootProps, - value: selectedAnswer, - } = useRadioGroup({ - name: `quiz-question-${currentQuestionIndex}`, - onChange: handleSelection, - }) - const { answers, correctAnswerId, @@ -65,24 +60,24 @@ export const QuizRadioGroup = ({ ) return ( -
+
{t("question-number", { number: currentQuestionIndex + 1 })} {t(prompt)} - -
{answers.map(({ id, label }, idx) => { const display = !answerStatus || id === selectedAnswer ? "inline-flex" : "hidden" - return (
) })}
- {!!answerStatus && (

{t("explanation")}

@@ -104,12 +98,12 @@ export const QuizRadioGroup = ({

{t(explanation)}

)} -
+
) } -type CustomRadioProps = UseRadioProps & { +type CustomRadioProps = RadioGroup.RadioGroupItemProps & { index: number isAnswerVisible: boolean isSelectedCorrect: boolean @@ -117,73 +111,46 @@ type CustomRadioProps = UseRadioProps & { } const CustomRadio = ({ - isAnswerVisible, index, + isAnswerVisible, isSelectedCorrect, label, - ...radioProps + ...itemProps }: CustomRadioProps) => { - const INPUT_ID = `quiz-question-answer-${index}` - const { state, getInputProps, getRadioProps, getLabelProps } = useRadio({ - ...radioProps, - id: INPUT_ID, - }) - - const buttonBg = useMemo(() => { - if (!state.isChecked) return "bg-background-highlight" - if (!isAnswerVisible) return "bg-primary" - if (!isSelectedCorrect) return "bg-error" - return "bg-success" - }, [state.isChecked, isAnswerVisible, isSelectedCorrect]) - - const radioInputProps = getInputProps({ id: INPUT_ID }) - return ( - <> -