import { useState, useRef, useEffect, useLayoutEffect } from "react"; import { Box, Button, FormControl, FormControlLabel, Link, Modal, Radio, RadioGroup, Tooltip, Typography, useTheme, Checkbox, } from "@mui/material"; import { AnyTypedQuizQuestion, createBranchingRuleMain } from "../../../model/questionTypes/shared" import { Select } from "../Select"; import RadioCheck from "@ui_kit/RadioCheck"; import RadioIcon from "@ui_kit/RadioIcon"; import InfoIcon from "@icons/Info"; import { DeleteIcon } from "@icons/questionsPage/deleteIcon"; import { TypeSwitch, BlockRule } from "./Settings"; import { getQuestionById, getQuestionByContentId, updateOpenedModalSettingsId, updateQuestion } from "@root/questions/actions"; import { useQuestionsStore } from "@root/questions/store"; import { enqueueSnackbar } from "notistack"; export default function BranchingQuestions() { const theme = useTheme(); const { openedModalSettingsId } = useQuestionsStore(); const [targetQuestion, setTargetQuestion] = useState(getQuestionById(openedModalSettingsId) || getQuestionByContentId(openedModalSettingsId)) const [parentQuestion, setParentQuestion] = useState(getQuestionByContentId(targetQuestion?.content.rule.parentId)) useLayoutEffect(() => { if (parentQuestion === null) return if (parentQuestion.content.rule.main.length === 0) { let mutate = JSON.parse(JSON.stringify(parentQuestion)) mutate.content.rule.main = [{ next: targetQuestion.content.id, or: true, rules: [{ question: parentQuestion.content.id, answers: [] }] }] setParentQuestion(mutate) } }) if (targetQuestion === null || parentQuestion === null) { enqueueSnackbar("Невозможно найти данные ветвления для этого вопроса") return <> } const saveData = () => { if (parentQuestion !== null) { updateQuestion(parentQuestion.content.id, question => question.content = parentQuestion.content) } handleClose() } const handleClose = () => { updateOpenedModalSettingsId() }; return ( <> <> {targetQuestion.title} { parentQuestion.content.rule.main.length ? parentQuestion.content.rule.main.map((e: any, i: number) => { if (e.next === targetQuestion.content.id) { return } else { <> } }) : } { const mutate = JSON.parse(JSON.stringify(parentQuestion)) mutate.content.rule.main.push(createBranchingRuleMain(targetQuestion.content.id, parentQuestion.content.id)) setParentQuestion(mutate) }} > Добавить условие { let mutate = JSON.parse(JSON.stringify(parentQuestion)) mutate.content.rule.default = targetQuestion.id setParentQuestion(mutate) }} />} label="Следующий вопрос по-умолчанию" /> ); }