import { DoubleArrowRight } from "@icons/questionsPage/DoubleArrowRight"; import { DoubleTick } from "@icons/questionsPage/DoubleTick"; import { VectorQuestions } from "@icons/questionsPage/VectorQuestions"; import { DeleteIcon } from "@icons/questionsPage/deleteIcon"; import type { SxProps } from "@mui/material"; import { Box, Button, IconButton, Modal, Tooltip, Typography, useMediaQuery, useTheme, } from "@mui/material"; import { copyQuestion, deleteQuestion, deleteQuestionWithTimeout, clearRuleForAll, updateQuestion, getQuestionByContentId } from "@root/questions/actions"; import { updateOpenBranchingPanel, updateDesireToOpenABranchingModal, } from "@root/uiTools/actions"; import MiniButtonSetting from "@ui_kit/MiniButtonSetting"; import { CopyIcon } from "../../assets/icons/questionsPage/CopyIcon"; import Branching from "../../assets/icons/questionsPage/branching"; import Clue from "../../assets/icons/questionsPage/clue"; import { HideIcon } from "../../assets/icons/questionsPage/hideIcon"; import SettingIcon from "../../assets/icons/questionsPage/settingIcon"; import type { AnyTypedQuizQuestion } from "../../model/questionTypes/shared"; import { useCurrentQuiz } from "@root/quizes/hooks"; import { enqueueSnackbar } from "notistack"; import { useQuestionsStore } from "@root/questions/store"; import { updateOpenedModalSettingsId } from "@root/uiTools/actions"; import { updateRootContentId } from "@root/quizes/actions"; import { useUiTools } from "@root/uiTools/store"; import {useState} from "react"; interface Props { switchState: string; SSHC: (data: string) => void; question: AnyTypedQuizQuestion; sx?: SxProps; } export default function ButtonsOptions({ SSHC, switchState, question, }: Props) { const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down(790)); const isWrappMiniButtonSetting = useMediaQuery(theme.breakpoints.down(920)); const quiz = useCurrentQuiz(); const { questions } = useQuestionsStore.getState(); const [openDelete, setOpenDelete] = useState(false); const openedModal = () => { updateOpenBranchingPanel(true); updateDesireToOpenABranchingModal(question.content.id); }; const deleteFn = () => { if (question.type !== null) { if (question.content.rule.parentId === "root") { //удалить из стора root и очистить rule всем вопросам updateRootContentId(quiz.id, ""); clearRuleForAll(); questions.forEach(q => { if (q.type === "result") { deleteQuestion(q.id); } }); deleteQuestion(question.id); } else if (question.content.rule.parentId.length > 0) { //удалить из стора вопрос из дерева и очистить его потомков const clearQuestions = [] as string[]; //записываем потомков , а их результаты удаляем const getChildren = (parentQuestion: AnyTypedQuizQuestion) => { questions.forEach((targetQuestion) => { if (targetQuestion.content.rule.parentId === parentQuestion.content.id) {//если у вопроса совпал родитель с родителем => он потомок, в кучу его if (targetQuestion.type === "result") { deleteQuestion(targetQuestion.id); } else { if (!clearQuestions.includes(targetQuestion.content.id)) clearQuestions.push(targetQuestion.content.id); getChildren(targetQuestion); //и ищем его потомков } } }); }; getChildren(question); //чистим потомков от инфы ветвления clearQuestions.forEach((id) => { updateQuestion(id, question => { question.content.rule.parentId = ""; question.content.rule.main = []; question.content.rule.default = ""; }); }); //чистим rule родителя const parentQuestion = getQuestionByContentId(question.content.rule.parentId); const newRule = {}; newRule.main = parentQuestion.content.rule.main.filter((data) => data.next !== question.content.id); //удаляем условия перехода от родителя к этому вопросу newRule.parentId = parentQuestion.content.rule.parentId; newRule.default = parentQuestion.content.rule.parentId === question.content.id ? "" : parentQuestion.content.rule.parentId; newRule.children = [...parentQuestion.content.rule.children].splice(parentQuestion.content.rule.children.indexOf(question.content.id), 1); updateQuestion(question.content.rule.parentId, (PQ) => { PQ.content.rule = newRule; }); deleteQuestion(question.id); } deleteQuestion(question.id); } else { console.log("удаляю безтипогово"); deleteQuestion(question.id); } }; const buttonSetting: { icon: JSX.Element; title: string; value: string; myFunc?: any; }[] = [ { icon: ( ), title: "Настройки", value: "setting", }, // { // icon: ( // // ), // title: "Подсказка", // value: "help", // }, { icon: ( ), title: "Ветвление", value: "branching", myFunc: (question) => { console.log("buttons opiums") updateOpenBranchingPanel(true); updateDesireToOpenABranchingModal(question.content.id); } }, ]; return ( {buttonSetting.map(({ icon, title, value, myFunc }) => ( {value === "branching" ? ( Будет показан при условии Название Условие 1, Условие 2 Все условия обязательны } > { openedModal(); // SSHC(value); // myFunc(question); }} sx={{ backgroundColor: switchState === value ? theme.palette.brightPurple.main : "transparent", color: switchState === value ? "#ffffff" : theme.palette.grey3.main, minWidth: isWrappMiniButtonSetting ? "30px" : "64px", height: "30px", "&:hover": { color: theme.palette.grey3.main, "& path": { stroke: theme.palette.grey3.main }, }, }} > {icon} {isWrappMiniButtonSetting ? null : title} ) : ( <> { SSHC(value); myFunc(); }} sx={{ backgroundColor: switchState === value ? theme.palette.brightPurple.main : "transparent", color: switchState === value ? "#ffffff" : theme.palette.grey3.main, minWidth: isWrappMiniButtonSetting ? "30px" : "64px", height: "30px", "&:hover": { color: theme.palette.grey3.main, "& path": { stroke: theme.palette.grey3.main }, }, }} > {icon} {isWrappMiniButtonSetting ? null : title} )} ))} <> copyQuestion(question.id, question.quizId)} > { if(question.content.rule.parentId.length !== 0) { setOpenDelete(true) } else { deleteQuestionWithTimeout(question.id, deleteFn); } }} data-cy="delete-question" > setOpenDelete(false)}> Вы удаляете вопрос, участвующий в ветвлении. Все его потомки потеряют данные ветвления. Вы уверены, что хотите удалить вопрос? ); }