import { Header } from "@ui_kit/Header/Header"; import Sidebar from "@ui_kit/Sidebar/Sidebar"; import Box from "@mui/material/Box"; import { IconButton, useMediaQuery, useTheme } from "@mui/material"; import { useCallback, 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 { 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"; import { useDomainDefine } from "@utils/hooks/useDomainDefine"; 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 { editQuizId } = useQuizStore(); const currentStep = useQuizStore((state) => state.currentStep); const { isTestServer } = useDomainDefine(); 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 = useCallback(() => { if (!openBranchingPage) { deleteTimeoutedQuestions(); } setOpenBranchingPage((old) => !old); }, [openBranchingPage, setOpenBranchingPage]); 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 [heightSidebar, setHeightSidebar] = useState(null); const [scrollDown, setScrollDown] = useState(null); const mainBlock = useRef(0); const heightHeader = heightSidebar + 51 + 36; 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 ? ( {isTestServer ? `https://s.hbpn.link/${quiz.qid}` : `https://hbpn.link/${quiz.qid}`} ) : ( ))} {isMobile && quiz?.status === "start" && ( )} {currentStep <= 1 && ( )} )} ); }