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, updateQuestion, } from "@root/questions/actions"; import { updateOpenedModalSettingsId } from "@root/uiTools/actions"; import { useUiTools } from "@root/uiTools/store"; import { enqueueSnackbar } from "notistack"; export default function BranchingQuestions() { const theme = useTheme(); const { openedModalSettingsId } = useUiTools(); 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)); if (parentQuestion.content.rule.children.length === 1) { //Если потомок 1 - можно только чекнуть чекбокс (по-умолчанию и так должен быть чекнут единственный) mutate.content.rule.default = targetQuestion.content.id; } else { //Изменять чекбокс можно только если много потомков mutate.content.rule.default = parentQuestion.content.rule.default === targetQuestion.content.id ? "" : targetQuestion.content.id; } setParentQuestion(mutate); }} /> } label="Следующий вопрос по-умолчанию" /> ); }