import { Box, Button, LinearProgress, Paper, Typography } from "@mui/material"; import { questionStore } from "@root/questions"; import { decrementCurrentQuestionIndex, incrementCurrentQuestionIndex, useQuizPreviewStore } from "@root/quizPreview"; import { DefiniteQuestionType } from "model/questionTypes/shared"; import { FC, useEffect } from "react"; import { useParams } from "react-router-dom"; import ArrowLeft from "../../assets/icons/questionsPage/arrowLeft"; import Date from "./QuizPreviewQuestionTypes/Date"; import Emoji from "./QuizPreviewQuestionTypes/Emoji"; import File from "./QuizPreviewQuestionTypes/File"; import Images from "./QuizPreviewQuestionTypes/Images"; import Number from "./QuizPreviewQuestionTypes/Number"; import Page from "./QuizPreviewQuestionTypes/Page"; import Rating from "./QuizPreviewQuestionTypes/Rating"; import Select from "./QuizPreviewQuestionTypes/Select"; import Text from "./QuizPreviewQuestionTypes/Text"; import Variant from "./QuizPreviewQuestionTypes/Variant"; import Varimg from "./QuizPreviewQuestionTypes/Varimg"; 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 = listQuestions[quizId] ?? []; const nonDeletedQuizQuestions = quizQuestions.filter(question => !question.deleted); const maxCurrentQuizStep = nonDeletedQuizQuestions.length > 0 ? nonDeletedQuizQuestions.length - 1 : 0; const currentProgress = Math.floor((currentQuizStep / maxCurrentQuizStep) * 100); const currentQuestion = nonDeletedQuizQuestions[currentQuizStep]; const QuestionComponent = currentQuestion ? QuestionPreviewComponentByType[currentQuestion.type as DefiniteQuestionType] : null; const questionElement = QuestionComponent ? : null; useEffect(function resetCurrentQuizStep() { if (currentQuizStep > maxCurrentQuizStep) { decrementCurrentQuestionIndex(); } }, [currentQuizStep, maxCurrentQuizStep]); return ( {questionElement} {nonDeletedQuizQuestions.length > 0 ? `Вопрос ${currentQuizStep + 1} из ${nonDeletedQuizQuestions.length}` : "Нет вопросов" } {nonDeletedQuizQuestions.length > 0 && } ); }