import { Header } from "@ui_kit/Header/Header"; import Sidebar from "@ui_kit/Sidebar/Sidebar"; import Box from "@mui/material/Box"; import { useTheme, useMediaQuery, IconButton } from "@mui/material"; import HeaderFull from "@ui_kit/Header/HeaderFull"; import { useEffect, useRef, useState } from "react"; import { SidebarMobile } from "../ui_kit/Sidebar/SidebarMobile"; import { setShowConfirmLeaveModal } from "@root/uiTools/actions"; import { setCurrentStep, setQuizes } from "@root/quizes/actions"; import { useQuizStore } from "@root/quizes/store"; import { SmallSwitchQuestionListGraph } from "@ui_kit/Toolbars/SmallSwitchQuestionListGraph"; import { PanelSwitchQuestionListGraph } from "@ui_kit/Toolbars/PanelSwitchQuestionListGraph"; import { ButtonTestPublication } from "@ui_kit/Toolbars/ButtonTestPublication"; import { ButtonRecallQuiz } from "@ui_kit/Toolbars/ButtonRecallQuiz"; import { Link } from "react-router-dom"; import { LinkSimple } from "@icons/LinkSimple"; import { useCurrentQuiz } from "@root/quizes/hooks"; import { deleteTimeoutedQuestions } from "@utils/deleteTimeoutedQuestions"; import { useQuestionsStore } from "@root/questions/store"; import { quizApi } from "@api/quiz"; import { questionApi } from "@api/question"; import { createResult, setQuestions } from "@root/questions/actions"; import { toggleQuizPreview } from "@root/quizPreview"; import VisibilityIcon from "@mui/icons-material/Visibility"; interface Props { sidebar: boolean; header?: boolean; footer?: boolean; Page?: React.Component; } export default function Main({ sidebar, header, footer, Page }: Props) { const theme = useTheme(); const quiz = useCurrentQuiz(); const quizConfig = quiz?.config; const { questions } = useQuestionsStore(); const { editQuizId } = useQuizStore(); const currentStep = useQuizStore((state) => state.currentStep); useEffect(() => { const getData = async () => { const quizes = await quizApi.getList(); setQuizes(quizes); if (editQuizId) { const questions = await questionApi.getList({ quiz_id: editQuizId }); setQuestions(questions); //Всегда должен существовать хоть 1 резулт - "line" if ( !questions?.find( (q) => (q.type === "result" && q.content.includes(':"line"')) || q.content.includes(":'line'"), ) ) { createResult(quiz?.backendId, "line"); } } }; getData(); }, []); const isMobile = useMediaQuery(theme.breakpoints.down(650)); const isMobileSm = useMediaQuery(theme.breakpoints.down(370)); const isBranchingLogicSmall = useMediaQuery(theme.breakpoints.down(1100)); const isBranchingLogicBig = useMediaQuery(theme.breakpoints.down(1446)); const isLinkButton = useMediaQuery(theme.breakpoints.down(708)); const [mobileSidebar, setMobileSidebar] = useState(false); const [nextStep, setNextStep] = useState(0); const [openBranchingPage, setOpenBranchingPage] = useState(false); const openBranchingPageHC = () => { if (!openBranchingPage) { deleteTimeoutedQuestions(questions, quiz); } setOpenBranchingPage((old) => !old); }; const isConditionMet = [1].includes(currentStep) && quizConfig?.type !== "form"; const changePage = (index: number) => { if (currentStep === 2) { setNextStep(index); setShowConfirmLeaveModal(true); return; } setCurrentStep(index); }; const [widthMain, setWidthMain] = useState(null); const mainBlock = useRef(0); const observer = useRef( new ResizeObserver((entries) => { const { width } = entries[0].contentRect; setWidthMain(width); }), ); useEffect(() => { if (mainBlock.current) observer.current.observe(mainBlock.current); }, [mainBlock, observer]); if (!quizConfig) return <>; return ( <>
{sidebar ? ( <> {isMobile ? ( ) : ( )} ) : ( <> )} {footer && ( {isConditionMet && (isBranchingLogicSmall ? ( ) : widthMain < 1216 || !openBranchingPage ? ( ) : ( <> ))} {/* Кнопка тестового просмотра */} {/* Кнопка отозвать */} {/* Ссылка */} {quiz?.status === "start" && (!isLinkButton ? ( https://s.hbpn.link/{quiz.qid} ) : ( ))} {/* Маленькая кнопка ссылки */} {isMobile && quiz?.status === "start" && ( )} {currentStep <= 1 && ( )} )} ); }