frontPanel/src/pages/ResultPage/ResultSettings.tsx

166 lines
4.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { useEffect, useRef, useState } from "react";
// import { useBlocker } from "react-router-dom";
import {
Box,
Button,
Typography,
Paper,
Modal,
TextField,
} from "@mui/material";
import { incrementCurrentStep } from "@root/quizes/actions";
import CustomWrapper from "@ui_kit/CustomWrapper";
import { DescriptionForm } from "./DescriptionForm/DescriptionForm";
import { ResultListForm } from "./ResultListForm";
import { SettingForm } from "./SettingForm";
import { WhenCard } from "./cards/WhenCard";
import { ResultCard, checkEmptyData } from "./cards/ResultCard";
import { EmailSettingsCard } from "./cards/EmailSettingsCard";
import { useCurrentQuiz } from "@root/quizes/hooks";
import { useQuestionsStore } from "@root/questions/store";
import { deleteQuestion } from "@root/questions/actions";
import { QuizQuestionResult } from "@model/questionTypes/result";
import IconPlus from "@icons/IconPlus";
import Info from "@icons/Info";
import Plus from "@icons/Plus";
import ArrowLeft from "@icons/questionsPage/arrowLeft";
export const ResultSettings = () => {
const { questions } = useQuestionsStore();
const quiz = useCurrentQuiz();
const results = useQuestionsStore().questions.filter(
(q): q is QuizQuestionResult => q.type === "result",
);
const [quizExpand, setQuizExpand] = useState(true);
const [resultContract, setResultContract] = useState(true);
const [triggerExit, setTriggerExit] = useState<{
follow: boolean;
path: string;
}>({ follow: false, path: "" });
const [openNotificationModal, setOpenNotificationModal] =
useState<boolean>(true);
const isReadyToLeaveRef = useRef(true);
// const blocker = useBlocker(false);
useEffect(
function calcIsReadyToLeave() {
let isReadyToLeave = true;
results.forEach((result) => {
if (checkEmptyData({ resultData: result })) {
isReadyToLeave = false;
}
});
isReadyToLeaveRef.current = isReadyToLeave;
},
[results],
);
useEffect(() => {
return () => {
if (!isReadyToLeaveRef.current && window.location.pathname !== "/edit") {
setOpenNotificationModal(true);
}
};
}, []);
const cnsl = results.filter((q) => q.content.usage);
const shouldBlock = true; // Replace this
// useEffect(() => {
// if (shouldBlock) {
// blocker.proceed?.()
// }
// }, [shouldBlock]);
const leavePage = (leave: boolean) => {
if (leave) {
}
setOpenNotificationModal(false);
};
return (
<Box sx={{ maxWidth: "796px" }}>
<Box
sx={{
display: "flex",
alignItems: "center",
margin: "60px 0 40px 0",
}}
>
<Typography variant="h5">Настройки результатов</Typography>
<Info />
<Button
disableRipple
sx={{
ml: "auto",
width: "73px",
height: "19px",
color: "#7E2AEA",
textDecoration: "underline",
fontSize: "16px",
"&:hover": {
background: "none",
textDecoration: "underline",
},
}}
variant="text"
onClick={() => setQuizExpand(!quizExpand)}
>
Свернуть
</Button>
</Box>
<WhenCard quizExpand={quizExpand} />
{quiz.config.resultInfo.when === "email" && (
<EmailSettingsCard quizExpand={quizExpand} />
)}
<Box
sx={{ display: "flex", alignItems: "center", mb: "15px", mt: "15px" }}
>
<Typography variant="p1" sx={{ color: "#4D4D4D", fontSize: "14px" }}>
Создайте результат
</Typography>
<Button
disableRipple
sx={{
ml: "auto",
height: "19px",
color: "#7E2AEA",
textDecoration: "underline",
fontSize: "16px",
"&:hover": {
background: "none",
textDecoration: "underline",
},
}}
variant="text"
onClick={() => setResultContract(!resultContract)}
>
Развернуть все
</Button>
</Box>
{cnsl.map((resultQuestion) => (
<ResultCard
resultContract={resultContract}
resultData={resultQuestion}
key={resultQuestion.id}
/>
))}
<Modal
open={false}
// onClose={handleClose}
aria-labelledby="modal-modal-title"
aria-describedby="modal-modal-description"
>
<></>
</Modal>
</Box>
);
};