import { Box, Button, LinearProgress, Paper, Typography } from "@mui/material"; import { useQuestionsStore } from "@root/questions/store"; import { decrementCurrentQuestionIndex, incrementCurrentQuestionIndex, useQuizPreviewStore, } from "@root/quizPreview"; import { AnyTypedQuizQuestion, UntypedQuizQuestion } from "model/questionTypes/shared"; import { useEffect } from "react"; 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"; import { notReachable } from "../../utils/notReachable"; export default function QuizPreviewLayout() { const questions = useQuestionsStore(state => state.questions); const currentQuizStep = useQuizPreviewStore( (state) => state.currentQuestionIndex ); const nonDeletedQuizQuestions = questions.filter( (question) => !question.deleted ); const maxCurrentQuizStep = nonDeletedQuizQuestions.length > 0 ? nonDeletedQuizQuestions.length - 1 : 0; const currentProgress = Math.floor( (currentQuizStep / maxCurrentQuizStep) * 100 ); const currentQuestion = nonDeletedQuizQuestions[currentQuizStep]; useEffect( function resetCurrentQuizStep() { if (currentQuizStep > maxCurrentQuizStep) { decrementCurrentQuestionIndex(); } }, [currentQuizStep, maxCurrentQuizStep] ); return ( {nonDeletedQuizQuestions.length > 0 ? `Вопрос ${currentQuizStep + 1} из ${nonDeletedQuizQuestions.length }` : "Нет вопросов"} {nonDeletedQuizQuestions.length > 0 && ( )} ); } function QuestionPreviewComponent({ question }: { question: AnyTypedQuizQuestion | UntypedQuizQuestion; }) { if (question.type === null) return null; switch (question.type) { case "variant": return ; case "images": return ; case "varimg": return ; case "emoji": return ; case "text": return ; case "select": return