frontPanel/src/pages/Questions/BranchingMap/FirstNodeField.tsx

83 lines
2.7 KiB
TypeScript
Raw Normal View History

2024-01-05 16:48:35 +00:00
import { Box } from "@mui/material";
import { clearRuleForAll, createResult, updateQuestion } from "@root/questions/actions";
import { updateRootContentId } from "@root/quizes/actions";
import { useCurrentQuiz } from "@root/quizes/hooks";
import { setOpenedModalQuestions, updateOpenedModalSettingsId } from "@root/uiTools/actions";
import { useUiTools } from "@root/uiTools/store";
2024-01-05 16:48:35 +00:00
import { enqueueSnackbar } from "notistack";
import { useEffect, useLayoutEffect, useRef } from "react";
2023-11-29 15:45:15 +00:00
2024-01-05 16:48:35 +00:00
export const FirstNodeField = () => {
2023-11-29 15:45:15 +00:00
const quiz = useCurrentQuiz();
2024-01-05 16:48:35 +00:00
const modalQuestionTargetContentId = useUiTools(state => state.modalQuestionTargetContentId);
useLayoutEffect(() => {
2024-01-05 16:48:35 +00:00
if (!quiz) return;
2024-01-05 16:48:35 +00:00
updateOpenedModalSettingsId();
updateRootContentId(quiz.id, "");
clearRuleForAll();
}, []);
2024-01-05 16:48:35 +00:00
const { dragQuestionContentId } = useUiTools();
2023-12-04 13:33:43 +00:00
const Container = useRef<HTMLDivElement | null>(null);
2023-11-29 15:45:15 +00:00
2024-01-05 16:48:35 +00:00
const modalOpen = () => setOpenedModalQuestions(true);
2023-11-29 15:45:15 +00:00
const newRootNode = () => {
if (quiz) {
if (dragQuestionContentId) {
2024-01-05 16:48:35 +00:00
updateRootContentId(quiz?.id, dragQuestionContentId);
updateQuestion(dragQuestionContentId, (question) => question.content.rule.parentId = "root");
createResult(dragQuestionContentId);
2023-11-29 15:45:15 +00:00
}
} else {
2024-01-05 16:48:35 +00:00
enqueueSnackbar("Нет информации о взятом опроснике");
2023-11-29 15:45:15 +00:00
}
2023-12-04 13:33:43 +00:00
2024-01-05 16:48:35 +00:00
};
2023-11-29 15:45:15 +00:00
useEffect(() => {
2024-01-10 18:32:00 +00:00
Container.current?.addEventListener("pointerup", newRootNode);
2024-01-05 16:48:35 +00:00
Container.current?.addEventListener("click", modalOpen);
return () => {
2024-01-10 18:32:00 +00:00
Container.current?.removeEventListener("pointerup", newRootNode);
2024-01-05 16:48:35 +00:00
Container.current?.removeEventListener("click", modalOpen);
};
}, [dragQuestionContentId]);
2023-11-29 15:45:15 +00:00
useEffect(() => {
if (quiz) {
2023-12-02 13:51:37 +00:00
if (modalQuestionTargetContentId) {
2024-01-05 16:48:35 +00:00
updateRootContentId(quiz?.id, modalQuestionTargetContentId);
updateQuestion(modalQuestionTargetContentId, (question) => question.content.rule.parentId = "root");
createResult(modalQuestionTargetContentId);
}
} else {
2024-01-05 16:48:35 +00:00
enqueueSnackbar("Нет информации о взятом опроснике");
}
2024-01-05 16:48:35 +00:00
}, [modalQuestionTargetContentId]);
2023-12-04 13:33:43 +00:00
2023-11-29 15:45:15 +00:00
return (
<Box
ref={Container}
sx={{
height: "100%",
width: "100%",
backgroundColor: "#f2f3f7",
display: "flex",
alignItems: "center",
justifyContent: "center",
color: "#4d4d4d",
fontSize: "50px"
}}
>
+
</Box>
2024-01-05 16:48:35 +00:00
);
};