import { Box, Button, LinearProgress, Paper, Typography } from "@mui/material"; import { Question, questionStore } from "@root/questions"; import { decrementCurrentQuestionIndex, incrementCurrentQuestionIndex, useQuizPreviewStore } from "@root/quizPreview"; import { useParams } from "react-router-dom"; import ArrowLeft from "../../assets/icons/questionsPage/arrowLeft"; import Variant from "./QuizPreviewQuestionTypes/Variant"; import { FC, useEffect } from "react"; import Images from "./QuizPreviewQuestionTypes/Images"; import Varimg from "./QuizPreviewQuestionTypes/Varimg"; import Emoji from "./QuizPreviewQuestionTypes/Emoji"; import Text from "./QuizPreviewQuestionTypes/Text"; import Select from "./QuizPreviewQuestionTypes/Select"; import Date from "./QuizPreviewQuestionTypes/Date"; import Number from "./QuizPreviewQuestionTypes/Number"; import File from "./QuizPreviewQuestionTypes/File"; import Page from "./QuizPreviewQuestionTypes/Page"; import Rating from "./QuizPreviewQuestionTypes/Rating"; type QuizQuestionType = "variant" | "images" | "varimg" | "emoji" | "text" | "select" | "date" | "number" | "file" | "page" | "rating"; const QuestionPreviewComponentByType: Record> = { variant: Variant, images: Images, varimg: Varimg, emoji: Emoji, text: Text, select: Select, date: Date, number: Number, file: File, page: Page, rating: Rating, }; export default function QuizPreviewLayout() { const quizId = useParams().quizId ?? 0; const listQuestions = questionStore(state => state.listQuestions); const currentQuizStep = useQuizPreviewStore(state => state.currentQuestionIndex); const quizQuestions: Question[] | undefined = listQuestions[quizId]; const maxCurrentQuizStep = quizQuestions?.length > 0 ? quizQuestions.length - 1 : 0; const currentProgress = Math.floor((currentQuizStep / maxCurrentQuizStep) * 100); const currentQuestion = quizQuestions[currentQuizStep]; const QuestionComponent = currentQuestion ? QuestionPreviewComponentByType[currentQuestion.type as QuizQuestionType] : null; const questionElement = QuestionComponent ? : null; useEffect(function resetCurrentQuizStep() { if (currentQuizStep > maxCurrentQuizStep) { decrementCurrentQuestionIndex(); } }, [currentQuizStep, maxCurrentQuizStep]); return ( {questionElement} {quizQuestions.length > 0 ? `Вопрос ${currentQuizStep + 1} из ${quizQuestions.length}` : "Нет вопросов" } {quizQuestions.length > 0 && } ); }