import { Box, MenuItem, FormControl, Checkbox, FormControlLabel, Radio, RadioGroup, Typography, useTheme, Select, Chip, IconButton, TextField } from "@mui/material" import RadioCheck from "@ui_kit/RadioCheck" import RadioIcon from "@ui_kit/RadioIcon" import { QuizQuestionBase } from "model/questionTypes/shared" import { useState, useRef, useEffect } from "react"; import { useParams } from "react-router-dom"; import { useQuestionsStore } from "@root/questions/store"; import { updateQuestion, getQuestionById } from "@root/questions/actions"; import { AnyQuizQuestion } from "../../../model/questionTypes/shared" import { SelectChangeEvent } from '@mui/material/Select'; import InfoIcon from "@icons/Info"; import { DeleteIcon } from "@icons/questionsPage/deleteIcon"; const CONDITIONS = [ "Все условия обязательны", "Обязательно хотя бы одно условие", ]; interface Props { parentQuestion: AnyQuizQuestion; targetQuestion: AnyQuizQuestion; ruleIndex: number; setParentQuestion: (q:AnyQuizQuestion) => void; } //Этот компонент вызывается 1 раз на каждое условие родителя для перехода к этому вопросу. Поэтому для изменения стора мы знаем индекс export const TypeSwitch = ({ parentQuestion, targetQuestion, ruleIndex, setParentQuestion }: Props) => { console.log("index " + ruleIndex) switch (parentQuestion.type) { // case 'nonselected': // return // break; case "variant": case "images": case "varimg": case "emoji": case "select": return (parentQuestion.content.variants === undefined ? : //Реализован ) break; case "date": // return return <> break; case "number": return //Реализован break; case "page": case "date": return break; case "text": return //Реализован break; case "file": return //Реализован break; case "rating": return //Реализован break; default: return break; } } export const BlockRule = ({ text }: { text: string }) => { return ( {text} ) } const SelectorType = ({ parentQuestion, targetQuestion, ruleIndex, setParentQuestion }: Props) => { const theme = useTheme(); const quizId = Number(useParams().quizId); console.log(parentQuestion) return ( Новое условие { let newParentQuestion = JSON.parse(JSON.stringify(parentQuestion)) newParentQuestion.content.rule.main.splice(ruleIndex, 1) setParentQuestion(newParentQuestion) }} > Дан ответ (Укажите один или несколько вариантов) { let newParentQuestion = JSON.parse(JSON.stringify(parentQuestion)) newParentQuestion.content.rule.main[ruleIndex].or = value setParentQuestion(newParentQuestion) }} > {CONDITIONS.map((condition, totalIndex) => ( } icon={} /> } label={condition} /> ))} ) } const DateInputsType = ({ parentQuestion, targetQuestion, ruleIndex, setParentQuestion }: Props) => { return <> } const NumberInputsType = ({ parentQuestion, targetQuestion, ruleIndex, setParentQuestion }: Props) => { const theme = useTheme(); const quizId = Number(useParams().quizId); return ( Новое условие { let newParentQuestion = JSON.parse(JSON.stringify(parentQuestion)) newParentQuestion.content.rule.main.splice(ruleIndex, 1) setParentQuestion(newParentQuestion) }} > Дан ответ (Укажите один или несколько вариантов) ) => { let newParentQuestion = JSON.parse(JSON.stringify(parentQuestion)) newParentQuestion.content.rule.main[ruleIndex].rules[0].answers[0] = Number((event.target as HTMLInputElement).value.replace(/[^0-9,\s]/g, "")) if (newParentQuestion.content.rule.main[ruleIndex].rules[0].answers[1] === undefined) newParentQuestion.content.rule.main[ruleIndex].rules[0].answers[1] = 0 setParentQuestion(newParentQuestion) }} /> {parentQuestion.content.chooseRange && ) => { let newParentQuestion = JSON.parse(JSON.stringify(parentQuestion)) newParentQuestion.content.rule.main[ruleIndex].rules[0].answers[1] = Number((event.target as HTMLInputElement).value.replace(/[^0-9,\s]/g, "")) if (newParentQuestion.content.rule.main[ruleIndex].rules[0].answers[0] === undefined) newParentQuestion.content.rule.main[ruleIndex].rules[0].answers[0] = 0 setParentQuestion(newParentQuestion) }} /> } ) } const TextInputsType = ({ parentQuestion, targetQuestion, ruleIndex, setParentQuestion }: Props) => { const theme = useTheme(); const quizId = Number(useParams().quizId); return ( Новое условие { let newParentQuestion = JSON.parse(JSON.stringify(parentQuestion)) newParentQuestion.content.rule.main.splice(ruleIndex, 1) setParentQuestion(newParentQuestion) }} > Дан ответ (Укажите текст, при совпадении с которым пользователь попадёт на этот вопрос) ) => { let newParentQuestion = JSON.parse(JSON.stringify(parentQuestion)) newParentQuestion.content.rule.main[ruleIndex].rules[0].answers = [(event.target as HTMLInputElement).value] setParentQuestion(newParentQuestion) }} /> ) } const FileInputsType = ({ parentQuestion, targetQuestion, ruleIndex, setParentQuestion }: Props) => { const theme = useTheme(); const quizId = Number(useParams().quizId); return ( Новое условие { let newParentQuestion = JSON.parse(JSON.stringify(parentQuestion)) newParentQuestion.content.rule.main.splice(ruleIndex, 1) setParentQuestion(newParentQuestion) }} > Перевести на этот вопрос если пользователь загрузил файл ) => { let newParentQuestion = JSON.parse(JSON.stringify(parentQuestion)) newParentQuestion.content.rule.main[ruleIndex].rules[0].answers = [(event.target as HTMLInputElement).checked] setParentQuestion(newParentQuestion) }} />} label="да" /> ) } const RatingInputsType = ({ parentQuestion, targetQuestion, ruleIndex, setParentQuestion }: Props) => { const theme = useTheme(); const quizId = Number(useParams().quizId); return ( Новое условие { let newParentQuestion = JSON.parse(JSON.stringify(parentQuestion)) newParentQuestion.content.rule.main.splice(ruleIndex, 1) setParentQuestion(newParentQuestion) }} > (Ожидаемое количество ячеек) {/* ) => { let newParentQuestion = JSON.parse(JSON.stringify(parentQuestion)) newParentQuestion.content.rule.main[ruleIndex].rules[0].answers = [(event.target as HTMLInputElement).value.replace(/[^0-9,\s]/g, "")] setParentQuestion(newParentQuestion) }} /> */} ) } // { // content: { // rule: { // main: [ // { // next: "id of next question", // 2 string // or: true // 3 boolean // rules: [ // { // question: "question id", string // answers: [] // ответы на вопросы. для вариантов выбора - конкретные айдишники, для полей ввода текста - текст по полному совпадению, для ввода файла ии ещё какой подобной дичи - просто факт того что файл ввели, т.е. boolean // } // ] // } // ], // default: ID string // } // } // }