slider question preview supports range
This commit is contained in:
parent
040bf3acdd
commit
158471c2e0
@ -2,7 +2,7 @@ import { Slider } from "@mui/material";
|
|||||||
|
|
||||||
type CustomSliderProps = {
|
type CustomSliderProps = {
|
||||||
defaultValue?: number;
|
defaultValue?: number;
|
||||||
value?: number;
|
value?: number | number[];
|
||||||
min?: number;
|
min?: number;
|
||||||
max?: number;
|
max?: number;
|
||||||
step?: number;
|
step?: number;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { Box, Typography } from "@mui/material";
|
import { Box, Typography } from "@mui/material";
|
||||||
import { CustomSlider } from "@ui_kit/CustomSlider";
|
import { CustomSlider } from "@ui_kit/CustomSlider";
|
||||||
import { QuizQuestionNumber } from "model/questionTypes/number";
|
import { QuizQuestionNumber } from "model/questionTypes/number";
|
||||||
import { useState } from "react";
|
import { useLayoutEffect, useState } from "react";
|
||||||
|
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
@ -9,7 +9,19 @@ interface Props {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default function Number({ question }: Props) {
|
export default function Number({ question }: Props) {
|
||||||
const [sliderValue, setSliderValue] = useState<number>(question.content.start);
|
const [sliderValues, setSliderValues] = useState<number | number[]>(0);
|
||||||
|
|
||||||
|
const start = question.content.start;
|
||||||
|
const min = parseInt(question.content.range.split("—")[0]);
|
||||||
|
const max = parseInt(question.content.range.split("—")[1]);
|
||||||
|
|
||||||
|
useLayoutEffect(() => {
|
||||||
|
if (question.content.chooseRange) {
|
||||||
|
setSliderValues([start, start + (max - start) / 2]);
|
||||||
|
} else {
|
||||||
|
setSliderValues(start);
|
||||||
|
}
|
||||||
|
}, [max, question.content.chooseRange, start]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box sx={{
|
<Box sx={{
|
||||||
@ -22,11 +34,11 @@ export default function Number({ question }: Props) {
|
|||||||
px: 2,
|
px: 2,
|
||||||
}}>
|
}}>
|
||||||
<CustomSlider
|
<CustomSlider
|
||||||
value={sliderValue}
|
value={sliderValues}
|
||||||
onChange={v => setSliderValue(v as number)}
|
onChange={value => setSliderValues(value)}
|
||||||
min={parseInt(question.content.range.split("—")[0])}
|
min={min}
|
||||||
max={parseInt(question.content.range.split("—")[1])}
|
max={max}
|
||||||
defaultValue={question.content.start}
|
defaultValue={start}
|
||||||
step={question.content.step}
|
step={question.content.step}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user