import { useEffect, useState } from "react"; import { Box, Typography, useMediaQuery, useTheme } from "@mui/material"; import ButtonsOptions from "../ButtonsOptions"; import CustomNumberField from "@ui_kit/CustomNumberField"; import SwitchSlider from "./switchSlider"; import type { QuizQuestionNumber } from "../../../model/questionTypes/number"; import { updateQuestion } from "@root/questions/actions"; interface Props { question: QuizQuestionNumber; } export default function SliderOptions({ question }: Props) { const theme = useTheme(); const isTablet = useMediaQuery(theme.breakpoints.down(980)); const isMobile = useMediaQuery(theme.breakpoints.down(790)); const [switchState, setSwitchState] = useState("setting"); const [stepError, setStepError] = useState(""); const [startError, setStartError] = useState(false); const [minError, setMinError] = useState(false); const [maxError, setMaxError] = useState(false); useEffect(() => { const min = Number(question.content.range.split("—")[0]); const max = Number(question.content.range.split("—")[1]); const start = Number(question.content.start); if (start < min || start > max) { setStartError(true); } if (start >= min && start <= max) { setStartError(false); } }, [question.content.range, question.content.start]); useEffect(() => { const min = Number(question.content.range.split("—")[0]); const max = Number(question.content.range.split("—")[1]); const step = Number(question.content.step); const range = max - min; if (range % step) { setStepError( `Шаг должен делить без остатка диапазон ${max} - ${min} = ${max - min}` ); } else { setStepError(""); } }, [question]); const SSHC = (data: string) => { setSwitchState(data); }; return ( <> Выбор значения из диапазона { const min = Number(target.value); const max = Number(question.content.range.split("—")[1]); updateQuestion(question.id, (question) => { if (question.type !== "number") return; question.content.range = `${target.value}—${ question.content.range.split("—")[1] }`; }); if (min >= max) { setMinError(true); } else { setMinError(false); setMaxError(false); } }} /> { const min = Number(question.content.range.split("—")[0]); const max = Number(target.value); updateQuestion(question.id, (question) => { if (question.type !== "number") return; question.content.range = `${ question.content.range.split("—")[0] }—${target.value}`; }); if (max <= min) { setMaxError(true); } else { setMaxError(false); setMinError(false); } }} onBlur={({ target }) => { const step = question.content.step; const min = Number(question.content.range.split("—")[0]); const max = Number(target.value); if (step > max) { updateQuestion(question.id, (question) => { if (question.type !== "number") return; question.content.step = min; }); } }} /> Начальное значение { updateQuestion(question.id, (question) => { if (question.type !== "number") return; question.content.start = Number(target.value); }); }} /> Шаг { updateQuestion(question.id, (question) => { if (question.type !== "number") return; question.content.step = Number(target.value); }); }} onBlur={({ target }) => { const max = Number(question.content.range.split("—")[1]); const step = Number(target.value); if (step > max) { updateQuestion(question.id, (question) => { if (question.type !== "number") return; question.content.step = max; }); } }} /> ); }