import { useEffect } from "react"; import { Box, Typography, RadioGroup, FormGroup, FormControlLabel, Radio, Checkbox, TextField, useTheme, } from "@mui/material"; import { useQuizViewStore, updateAnswer, deleteAnswer, updateOwnVariant, deleteOwnVariant, } from "@stores/quizView/store"; import RadioCheck from "@ui_kit/RadioCheck"; import RadioIcon from "@ui_kit/RadioIcon"; import { CheckboxIcon } from "@icons/Checkbox"; import type { QuizQuestionVariant } from "../../../model/questionTypes/variant"; import type { QuestionVariant } from "../../../model/questionTypes/shared"; import { enqueueSnackbar } from "notistack"; import { sendAnswer } from "@api/quizRelase"; import { useQuestionsStore } from "@stores/quizData/store" import { modes } from "../../../utils/themes/Publication/themePublication"; type VariantProps = { stepNumber: number; currentQuestion: QuizQuestionVariant; }; type VariantItemProps = { currentQuestion: QuizQuestionVariant; variant: QuestionVariant; answer: string | string[] | undefined; index: number; own?: boolean; }; export const Variant = ({ currentQuestion }: VariantProps) => { const { settings } = useQuestionsStore() const { answers, ownVariants } = useQuizViewStore(); const mode = modes; const { answer } = answers.find( ({ questionId }) => questionId === currentQuestion.id ) ?? {}; const ownVariant = ownVariants.find( (variant) => variant.id === currentQuestion.id ); const Group = currentQuestion.content.multi ? FormGroup : RadioGroup; useEffect(() => { if (!ownVariant) { updateOwnVariant(currentQuestion.id, ""); } }, []); const theme = useTheme(); return ( {currentQuestion.title} answer === id )} sx={{ display: "flex", flexWrap: "wrap", flexDirection: "row", justifyContent: "space-between", flexBasis: "100%", marginTop: "20px", }} > {currentQuestion.content.variants.map((variant, index) => ( ))} {currentQuestion.content.own && ownVariant && ( )} {currentQuestion.content.back && currentQuestion.content.back !== " " && ( )} ); }; const VariantItem = ({ currentQuestion, variant, answer, index, own = false, }: VariantItemProps) => { const { settings } = useQuestionsStore() const theme = useTheme(); const mode = modes; return ( } icon={} /> ) : //@ts-ignore (} icon={} /> ) } //@ts-ignore label={own ? : variant.answer} onClick={async (event) => { event.preventDefault(); const variantId = currentQuestion.content.variants[index].id; if (currentQuestion.content.multi) { const currentAnswer = typeof answer !== "string" ? answer || [] : []; try { await sendAnswer({ questionId: currentQuestion.id, body: currentAnswer.includes(variantId) ? currentAnswer?.filter((item) => item !== variantId) : [...currentAnswer, variantId], //@ts-ignore qid: settings.qid }) updateAnswer( currentQuestion.id, currentAnswer.includes(variantId) ? currentAnswer?.filter((item) => item !== variantId) : [...currentAnswer, variantId] ); } catch (e) { enqueueSnackbar("ответ не был засчитан") } return; } try { await sendAnswer({ questionId: currentQuestion.id, body: currentQuestion.content.variants[index].answer, //@ts-ignore qid: settings.qid }) updateAnswer(currentQuestion.id, variantId); } catch (e) { enqueueSnackbar("ответ не был засчитан") } if (answer === variantId) { try { await sendAnswer({ questionId: currentQuestion.id, body: "", //@ts-ignore qid: settings.qid }) } catch (e) { enqueueSnackbar("ответ не был засчитан") } deleteAnswer(currentQuestion.id); } }} /> ); };