import { 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 SSHC = (data: string) => { setSwitchState(data); }; return ( <> Выбор значения из диапазона { updateQuestion(question.id, question => { if (question.type !== "number") return; question.content.range = `${target.value}—${question.content.range.split("—")[1]}`; }); }} onBlur={({ target }) => { const start = question.content.start; const min = Number(target.value); const max = Number(question.content.range.split("—")[1]); if (min >= max) { updateQuestion(question.id, question => { if (question.type !== "number") return; question.content.range = `${max - 1 >= 0 ? max - 1 : 0}—${question.content.range.split("—")[1]}`; }); } if (start < min) { updateQuestion(question.id, question => { if (question.type !== "number") return; question.content.start = min; }); } }} /> { updateQuestion(question.id, question => { if (question.type !== "number") return; question.content.range = `${question.content.range.split("—")[0]}—${target.value}`; }); }} onBlur={({ target }) => { const start = question.content.start; const step = question.content.step; const min = Number(question.content.range.split("—")[0]); const max = Number(target.value); const range = max - min; if (max <= min) { updateQuestion(question.id, question => { if (question.type !== "number") return; question.content.range = `${min}—${min + 1 >= 100 ? 100 : min + 1}`; }); } if (start > max) { updateQuestion(question.id, question => { if (question.type !== "number") return; question.content.start = max; }); } if (step > max) { updateQuestion(question.id, question => { if (question.type !== "number") return; question.content.step = min; }); if (range % step) { setStepError(`Шаг должен делить без остатка диапазон ${max} - ${min} = ${max - min}`); } else { setStepError(""); } } }} /> Начальное значение { 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 min = Number(question.content.range.split("—")[0]); const max = Number(question.content.range.split("—")[1]); const range = max - min; const step = Number(target.value); if (step > max) { updateQuestion(question.id, question => { if (question.type !== "number") return; question.content.step = max; }); } if (range % step) { setStepError(`Шаг должен делить без остатка диапазон ${max} - ${min} = ${max - min}`); } else { setStepError(""); } }} /> ); }