inputs receive value from state
remove unused code
This commit is contained in:
parent
bf1d150954
commit
312f366501
@ -1,29 +1,24 @@
|
||||
import { MessageIcon } from "@icons/messagIcon";
|
||||
import { PointsIcon } from "@icons/questionsPage/PointsIcon";
|
||||
import { DeleteIcon } from "@icons/questionsPage/deleteIcon";
|
||||
import { TextareaAutosize } from "@mui/base/TextareaAutosize";
|
||||
import {
|
||||
Box,
|
||||
FormControl,
|
||||
IconButton,
|
||||
InputAdornment,
|
||||
Popover,
|
||||
TextField as MuiTextField,
|
||||
TextFieldProps,
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
TextFieldProps,
|
||||
} from "@mui/material";
|
||||
import {
|
||||
addQuestionVariant,
|
||||
deleteQuestionVariant,
|
||||
setQuestionVariantField,
|
||||
} from "@root/questions/actions";
|
||||
import { enqueueSnackbar } from "notistack";
|
||||
import type { ChangeEvent, FC, KeyboardEvent, ReactNode } from "react";
|
||||
import { useState } from "react";
|
||||
import { Draggable } from "react-beautiful-dnd";
|
||||
import type { QuestionVariant } from "../../../model/questionTypes/shared";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import { enqueueSnackbar } from "notistack";
|
||||
|
||||
const TextField = MuiTextField as unknown as FC<TextFieldProps>;
|
||||
|
||||
@ -48,21 +43,6 @@ export const AnswerItem = ({
|
||||
}: AnswerItemProps) => {
|
||||
const theme = useTheme();
|
||||
const isTablet = useMediaQuery(theme.breakpoints.down(790));
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);
|
||||
const [inputValue, setInputValue] = useState(variant.answer);
|
||||
const setQuestionVariantAnswer = useDebouncedCallback((value) => {
|
||||
setQuestionVariantField(questionId, variant.id, "answer", value);
|
||||
}, 200);
|
||||
|
||||
const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
|
||||
setAnchorEl(event.currentTarget);
|
||||
setIsOpen(true);
|
||||
};
|
||||
|
||||
const handleClose = () => {
|
||||
setIsOpen(false);
|
||||
};
|
||||
|
||||
return (
|
||||
<Draggable draggableId={String(index)} index={index}>
|
||||
@ -80,16 +60,20 @@ export const AnswerItem = ({
|
||||
}}
|
||||
>
|
||||
<TextField
|
||||
value={inputValue}
|
||||
value={variant.answer}
|
||||
fullWidth
|
||||
focused={false}
|
||||
placeholder={"Добавьте ответ"}
|
||||
multiline={largeCheck}
|
||||
onChange={({ target }: ChangeEvent<HTMLInputElement>) => {
|
||||
if (target.value.length <= 1000) {
|
||||
setInputValue(target.value);
|
||||
setQuestionVariantField(
|
||||
questionId,
|
||||
variant.id,
|
||||
"answer",
|
||||
target.value || " ",
|
||||
);
|
||||
}
|
||||
setQuestionVariantAnswer(target.value || " ");
|
||||
}}
|
||||
onKeyDown={(event: KeyboardEvent<HTMLInputElement>) => {
|
||||
if (disableKeyDown) {
|
||||
|
@ -1,15 +1,6 @@
|
||||
import {
|
||||
Box,
|
||||
Tooltip,
|
||||
Typography,
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from "@mui/material";
|
||||
import { setQuestionInnerName, updateQuestion } from "@root/questions/actions";
|
||||
import { Box, Typography, useMediaQuery, useTheme } from "@mui/material";
|
||||
import { updateQuestion } from "@root/questions/actions";
|
||||
import CustomCheckbox from "@ui_kit/CustomCheckbox";
|
||||
import CustomTextField from "@ui_kit/CustomTextField";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import InfoIcon from "../../../assets/icons/InfoIcon";
|
||||
import type { QuizQuestionDate } from "../../../model/questionTypes/date";
|
||||
|
||||
type SettingsDataProps = {
|
||||
@ -22,10 +13,6 @@ export default function SettingsData({ question }: SettingsDataProps) {
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(790));
|
||||
const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
|
||||
|
||||
const setInnerName = useDebouncedCallback((value) => {
|
||||
setQuestionInnerName(question.id, value);
|
||||
}, 200);
|
||||
|
||||
return (
|
||||
<Box
|
||||
sx={{
|
||||
|
@ -1,15 +1,7 @@
|
||||
import {
|
||||
Box,
|
||||
Tooltip,
|
||||
Typography,
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from "@mui/material";
|
||||
import { setQuestionInnerName, updateQuestion } from "@root/questions/actions";
|
||||
import { Box, Typography, useMediaQuery, useTheme } from "@mui/material";
|
||||
import { updateQuestion } from "@root/questions/actions";
|
||||
import CustomCheckbox from "@ui_kit/CustomCheckbox";
|
||||
import CustomTextField from "@ui_kit/CustomTextField";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import InfoIcon from "../../../assets/icons/InfoIcon";
|
||||
import type { QuizQuestionSelect } from "../../../model/questionTypes/select";
|
||||
|
||||
type SettingDropDownProps = {
|
||||
@ -21,17 +13,13 @@ export default function SettingDropDown({ question }: SettingDropDownProps) {
|
||||
const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(790));
|
||||
|
||||
const debounced = useDebouncedCallback((value) => {
|
||||
setQuestionInnerName(question.id, value);
|
||||
}, 200);
|
||||
|
||||
const debounceAnswer = useDebouncedCallback((value) => {
|
||||
const setContentDefault = (value: string) => {
|
||||
updateQuestion(question.id, (question) => {
|
||||
if (question.type !== "select") return;
|
||||
|
||||
question.content.default = value;
|
||||
});
|
||||
}, 200);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
@ -98,9 +86,9 @@ export default function SettingDropDown({ question }: SettingDropDownProps) {
|
||||
</Typography>
|
||||
<CustomTextField
|
||||
placeholder={"Выберите вариант"}
|
||||
text={question.content.default}
|
||||
value={question.content.default}
|
||||
maxLength={60}
|
||||
onChange={({ target }) => debounceAnswer(target.value)}
|
||||
onChange={({ target }) => setContentDefault(target.value)}
|
||||
/>
|
||||
</Box>
|
||||
</Box>
|
||||
@ -178,7 +166,7 @@ export default function SettingDropDown({ question }: SettingDropDownProps) {
|
||||
<CustomTextField
|
||||
placeholder={"Выберите вариант"}
|
||||
text={question.content.default}
|
||||
onChange={({ target }) => debounceAnswer(target.value)}
|
||||
onChange={({ target }) => setContentDefault(target.value)}
|
||||
/>
|
||||
</Box>
|
||||
{/*{question.content.innerNameCheck && (*/}
|
||||
|
@ -1,15 +1,6 @@
|
||||
import {
|
||||
Box,
|
||||
Tooltip,
|
||||
Typography,
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from "@mui/material";
|
||||
import { setQuestionInnerName, updateQuestion } from "@root/questions/actions";
|
||||
import { Box, Typography, useMediaQuery, useTheme } from "@mui/material";
|
||||
import { updateQuestion } from "@root/questions/actions";
|
||||
import CustomCheckbox from "@ui_kit/CustomCheckbox";
|
||||
import CustomTextField from "@ui_kit/CustomTextField";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import InfoIcon from "../../../assets/icons/InfoIcon";
|
||||
import type { QuizQuestionEmoji } from "../../../model/questionTypes/emoji";
|
||||
|
||||
type SettingEmojiProps = {
|
||||
@ -19,14 +10,9 @@ type SettingEmojiProps = {
|
||||
export default function SettingEmoji({ question }: SettingEmojiProps) {
|
||||
const theme = useTheme();
|
||||
const isWrappColumn = useMediaQuery(theme.breakpoints.down(980));
|
||||
const isTablet = useMediaQuery(theme.breakpoints.down(985));
|
||||
const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(790));
|
||||
|
||||
const setInnerName = useDebouncedCallback((value) => {
|
||||
setQuestionInnerName(question.id, value);
|
||||
}, 200);
|
||||
|
||||
return (
|
||||
<Box
|
||||
sx={{
|
||||
|
@ -77,14 +77,14 @@ export default function QuestionsPageCard({
|
||||
const isTablet = useMediaQuery(theme.breakpoints.down(1000));
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(790));
|
||||
|
||||
const setTitle = useDebouncedCallback((title) => {
|
||||
const setTitle = (title: string) => {
|
||||
const updateQuestionFn =
|
||||
question.type === null ? updateUntypedQuestion : updateQuestion;
|
||||
|
||||
updateQuestionFn(question.id, (question) => {
|
||||
question.title = title;
|
||||
});
|
||||
}, 200);
|
||||
};
|
||||
|
||||
const handleInputFocus = () => {
|
||||
setIsTextFieldtActive(true);
|
||||
@ -137,7 +137,7 @@ export default function QuestionsPageCard({
|
||||
>
|
||||
<TextField
|
||||
placeholder={`Заголовок ${questionIndex + 1} вопроса`}
|
||||
defaultValue={question.title}
|
||||
value={question.title}
|
||||
onChange={({ target }) => {
|
||||
if (target.value.length <= 225) setTitle(target.value);
|
||||
}}
|
||||
|
@ -1,15 +1,7 @@
|
||||
import {
|
||||
Box,
|
||||
Tooltip,
|
||||
Typography,
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from "@mui/material";
|
||||
import { setQuestionInnerName, updateQuestion } from "@root/questions/actions";
|
||||
import { Box, Typography, useMediaQuery, useTheme } from "@mui/material";
|
||||
import { updateQuestion } from "@root/questions/actions";
|
||||
import CustomCheckbox from "@ui_kit/CustomCheckbox";
|
||||
import CustomTextField from "@ui_kit/CustomTextField";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import InfoIcon from "../../../assets/icons/InfoIcon";
|
||||
import type { QuizQuestionVarImg } from "../../../model/questionTypes/varimg";
|
||||
|
||||
type SettingOptionsAndPictProps = {
|
||||
@ -24,17 +16,13 @@ export default function SettingOptionsAndPict({
|
||||
const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(680));
|
||||
|
||||
const setReplText = useDebouncedCallback((replText) => {
|
||||
const setReplText = (replText: string) => {
|
||||
updateQuestion(question.id, (question) => {
|
||||
if (question.type !== "varimg") return;
|
||||
|
||||
question.content.replText = replText;
|
||||
});
|
||||
}, 200);
|
||||
|
||||
const setDescription = useDebouncedCallback((value) => {
|
||||
setQuestionInnerName(question.id, value);
|
||||
}, 200);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
|
@ -1,18 +1,12 @@
|
||||
import {
|
||||
Box,
|
||||
Button,
|
||||
Tooltip,
|
||||
Typography,
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from "@mui/material";
|
||||
import { setQuestionInnerName, updateQuestion } from "@root/questions/actions";
|
||||
import { updateQuestion } from "@root/questions/actions";
|
||||
import CustomCheckbox from "@ui_kit/CustomCheckbox";
|
||||
import CustomTextField from "@ui_kit/CustomTextField";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import InfoIcon from "../../../assets/icons/InfoIcon";
|
||||
import FormatIcon1 from "../../../assets/icons/questionsPage/FormatIcon1";
|
||||
import FormatIcon2 from "../../../assets/icons/questionsPage/FormatIcon2";
|
||||
import ProportionsIcon11 from "../../../assets/icons/questionsPage/ProportionsIcon11";
|
||||
import ProportionsIcon12 from "../../../assets/icons/questionsPage/ProportionsIcon12";
|
||||
import ProportionsIcon21 from "../../../assets/icons/questionsPage/ProportionsIcon21";
|
||||
@ -43,18 +37,6 @@ export default function SettingOpytionsPict({
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(790));
|
||||
const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
|
||||
|
||||
const debounced = useDebouncedCallback((value) => {
|
||||
setQuestionInnerName(question.id, value);
|
||||
}, 200);
|
||||
|
||||
const updateProportions = (proportions: Proportion) => {
|
||||
updateQuestion(question.id, (question) => {
|
||||
if (question.type !== "images") return;
|
||||
|
||||
question.content.xy = proportions;
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<Box
|
||||
|
@ -7,14 +7,12 @@ import {
|
||||
} from "@mui/material";
|
||||
import { updateQuestion } from "@root/questions/actions";
|
||||
import CustomTextField from "@ui_kit/CustomTextField";
|
||||
import TooltipClickInfo from "@ui_kit/Toolbars/TooltipClickInfo";
|
||||
import { useState } from "react";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import InfoIcon from "../../../assets/icons/InfoIcon";
|
||||
import type { QuizQuestionText } from "../../../model/questionTypes/text";
|
||||
import ButtonsOptions from "../ButtonsOptions";
|
||||
import SwitchTextField from "./switchTextField";
|
||||
import TooltipClickInfo from "@ui_kit/Toolbars/TooltipClickInfo";
|
||||
import ButtonsOptionsAndPict from "../ButtonsOptionsAndPict";
|
||||
import SwitchTextField from "./switchTextField";
|
||||
|
||||
interface Props {
|
||||
question: QuizQuestionText;
|
||||
@ -32,13 +30,13 @@ export default function OwnTextField({
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(790));
|
||||
const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
|
||||
|
||||
const setPlaceholder = useDebouncedCallback((value) => {
|
||||
const setPlaceholder = (value: string) => {
|
||||
updateQuestion(question.id, (question) => {
|
||||
if (question.type !== "text") return;
|
||||
|
||||
question.content.placeholder = value;
|
||||
});
|
||||
}, 200);
|
||||
};
|
||||
|
||||
const SSHC = (data: string) => {
|
||||
setSwitchState(data);
|
||||
@ -60,7 +58,7 @@ export default function OwnTextField({
|
||||
>
|
||||
<CustomTextField
|
||||
placeholder={"Пример ответа"}
|
||||
text={question.content.placeholder}
|
||||
value={question.content.placeholder}
|
||||
onChange={({ target }) => setPlaceholder(target.value)}
|
||||
sx={{
|
||||
maxWidth: isFigmaTablte ? "549px" : "640px",
|
||||
|
@ -1,21 +1,6 @@
|
||||
import {
|
||||
Box,
|
||||
FormControl,
|
||||
FormControlLabel,
|
||||
Radio,
|
||||
RadioGroup,
|
||||
Tooltip,
|
||||
Typography,
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from "@mui/material";
|
||||
import { setQuestionInnerName, updateQuestion } from "@root/questions/actions";
|
||||
import { Box, Typography, useMediaQuery, useTheme } from "@mui/material";
|
||||
import { updateQuestion } from "@root/questions/actions";
|
||||
import CustomCheckbox from "@ui_kit/CustomCheckbox";
|
||||
import CustomTextField from "@ui_kit/CustomTextField";
|
||||
import CheckedIcon from "@ui_kit/RadioCheck";
|
||||
import CheckIcon from "@ui_kit/RadioIcon";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import InfoIcon from "../../../assets/icons/InfoIcon";
|
||||
import type { QuizQuestionText } from "../../../model/questionTypes/text";
|
||||
|
||||
type SettingTextFieldProps = {
|
||||
@ -38,10 +23,6 @@ export default function SettingTextField({ question }: SettingTextFieldProps) {
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(790));
|
||||
const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
|
||||
|
||||
const debounced = useDebouncedCallback((value) => {
|
||||
setQuestionInnerName(question.id, value);
|
||||
}, 200);
|
||||
|
||||
return (
|
||||
<Box
|
||||
sx={{
|
||||
|
@ -17,11 +17,9 @@ import CustomTextField from "@ui_kit/CustomTextField";
|
||||
|
||||
import { CopyIcon } from "@icons/questionsPage/CopyIcon";
|
||||
import { DeleteIcon } from "@icons/questionsPage/deleteIcon";
|
||||
import { updateDesireToOpenABranchingModal } from "@root/uiTools/actions";
|
||||
import { MediaSelectionAndDisplay } from "@ui_kit/MediaSelectionAndDisplay";
|
||||
import { DeleteFunction } from "@utils/deleteFunc";
|
||||
import { useState } from "react";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import type { QuizQuestionPage } from "../../../model/questionTypes/page";
|
||||
|
||||
type Props = {
|
||||
@ -32,28 +30,18 @@ type Props = {
|
||||
};
|
||||
|
||||
export default function PageOptions({ disableInput, question }: Props) {
|
||||
const [switchState, setSwitchState] = useState("setting");
|
||||
const theme = useTheme();
|
||||
const isTablet = useMediaQuery(theme.breakpoints.down(980));
|
||||
const isFigmaTablet = useMediaQuery(theme.breakpoints.down(990));
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(780));
|
||||
const [openDelete, setOpenDelete] = useState<boolean>(false);
|
||||
|
||||
const setText = useDebouncedCallback((value) => {
|
||||
const setText = (value: string) => {
|
||||
updateQuestion(question.id, (question) => {
|
||||
if (question.type !== "page") return;
|
||||
|
||||
question.content.text = value;
|
||||
});
|
||||
}, 200);
|
||||
|
||||
const [openDelete, setOpenDelete] = useState<boolean>(false);
|
||||
|
||||
const openedModal = () => {
|
||||
updateDesireToOpenABranchingModal(question.content.id);
|
||||
};
|
||||
|
||||
const SSHC = (data: string) => {
|
||||
setSwitchState(data);
|
||||
};
|
||||
|
||||
return (
|
||||
@ -76,7 +64,7 @@ export default function PageOptions({ disableInput, question }: Props) {
|
||||
<CustomTextField
|
||||
id="addText"
|
||||
placeholder={"Можно добавить текст"}
|
||||
text={question.content.text}
|
||||
value={question.content.text}
|
||||
onChange={({ target }) => setText(target.value)}
|
||||
maxLength={50}
|
||||
/>
|
||||
|
@ -1,16 +1,5 @@
|
||||
import {
|
||||
Box,
|
||||
Tooltip,
|
||||
Typography,
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from "@mui/material";
|
||||
import CustomCheckbox from "@ui_kit/CustomCheckbox";
|
||||
import CustomTextField from "@ui_kit/CustomTextField";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import InfoIcon from "../../../assets/icons/InfoIcon";
|
||||
import { Box, Typography, useMediaQuery, useTheme } from "@mui/material";
|
||||
import type { QuizQuestionPage } from "../../../model/questionTypes/page";
|
||||
import { setQuestionInnerName, updateQuestion } from "@root/questions/actions";
|
||||
|
||||
type SettingPageOptionsProps = {
|
||||
question: QuizQuestionPage;
|
||||
@ -22,10 +11,6 @@ export default function SettingPageOptions({
|
||||
const theme = useTheme();
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(790));
|
||||
|
||||
const setInnerName = useDebouncedCallback((value) => {
|
||||
setQuestionInnerName(question.id, value);
|
||||
}, 200);
|
||||
|
||||
return (
|
||||
<Box
|
||||
sx={{
|
||||
|
@ -1,24 +1,25 @@
|
||||
import { useState, useEffect, useRef } from "react";
|
||||
import { useParams } from "react-router-dom";
|
||||
import {
|
||||
Box,
|
||||
TextField as MuiTextField,
|
||||
TextFieldProps,
|
||||
Typography,
|
||||
TextField,
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from "@mui/material";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import { updateQuestion } from "@root/questions/actions";
|
||||
import { FC, useLayoutEffect, useRef, useState } from "react";
|
||||
import FlagIcon from "../../../assets/icons/questionsPage/FlagIcon";
|
||||
import StarIconMini from "../../../assets/icons/questionsPage/StarIconMini";
|
||||
import HashtagIcon from "../../../assets/icons/questionsPage/hashtagIcon";
|
||||
import HeartIcon from "../../../assets/icons/questionsPage/heartIcon";
|
||||
import LightbulbIcon from "../../../assets/icons/questionsPage/lightbulbIcon";
|
||||
import LikeIcon from "../../../assets/icons/questionsPage/likeIcon";
|
||||
import TropfyIcon from "../../../assets/icons/questionsPage/tropfyIcon";
|
||||
import type { QuizQuestionRating } from "../../../model/questionTypes/rating";
|
||||
import ButtonsOptions from "../ButtonsOptions";
|
||||
import SwitchRating from "./switchRating";
|
||||
import TropfyIcon from "../../../assets/icons/questionsPage/tropfyIcon";
|
||||
import FlagIcon from "../../../assets/icons/questionsPage/FlagIcon";
|
||||
import HeartIcon from "../../../assets/icons/questionsPage/heartIcon";
|
||||
import LikeIcon from "../../../assets/icons/questionsPage/likeIcon";
|
||||
import LightbulbIcon from "../../../assets/icons/questionsPage/lightbulbIcon";
|
||||
import HashtagIcon from "../../../assets/icons/questionsPage/hashtagIcon";
|
||||
import StarIconMini from "../../../assets/icons/questionsPage/StarIconMini";
|
||||
import type { QuizQuestionRating } from "../../../model/questionTypes/rating";
|
||||
import { updateQuestion } from "@root/questions/actions";
|
||||
|
||||
const TextField = MuiTextField as unknown as FC<TextFieldProps>;
|
||||
|
||||
interface Props {
|
||||
question: QuizQuestionRating;
|
||||
@ -37,43 +38,36 @@ export default function RatingOptions({
|
||||
setOpenBranchingPage,
|
||||
}: Props) {
|
||||
const [switchState, setSwitchState] = useState("setting");
|
||||
const [negativeText, setNegativeText] = useState<string>("");
|
||||
const [positiveText, setPositiveText] = useState<string>("");
|
||||
const [negativeTextWidth, setNegativeTextWidth] = useState<number>(0);
|
||||
const [positiveTextWidth, setPositiveTextWidth] = useState<number>(0);
|
||||
const quizId = Number(useParams().quizId);
|
||||
const theme = useTheme();
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(790));
|
||||
const negativeRef = useRef<HTMLDivElement>(null);
|
||||
const positiveRef = useRef<HTMLDivElement>(null);
|
||||
|
||||
const debounceNegativeDescription = useDebouncedCallback((value) => {
|
||||
const setNegativeDescription = (value: string) => {
|
||||
updateQuestion(question.id, (question) => {
|
||||
if (question.type !== "rating") return;
|
||||
|
||||
question.content.ratingNegativeDescription = value.substring(0, 15);
|
||||
});
|
||||
}, 200);
|
||||
const debouncePositiveDescription = useDebouncedCallback((value) => {
|
||||
};
|
||||
|
||||
const setPositiveDescription = (value: string) => {
|
||||
updateQuestion(question.id, (question) => {
|
||||
if (question.type !== "rating") return;
|
||||
|
||||
question.content.ratingPositiveDescription = value.substring(0, 15);
|
||||
});
|
||||
}, 200);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
setNegativeText(question.content.ratingNegativeDescription);
|
||||
setPositiveText(question.content.ratingPositiveDescription);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
useLayoutEffect(() => {
|
||||
setNegativeTextWidth(negativeRef.current?.offsetWidth || 0);
|
||||
}, [negativeText]);
|
||||
}, [question.content.ratingNegativeDescription]);
|
||||
|
||||
useEffect(() => {
|
||||
useLayoutEffect(() => {
|
||||
setPositiveTextWidth(positiveRef.current?.offsetWidth || 0);
|
||||
}, [positiveText]);
|
||||
}, [question.content.ratingPositiveDescription]);
|
||||
|
||||
const buttonRatingForm: ButtonRatingFrom[] = [
|
||||
{
|
||||
@ -221,21 +215,17 @@ export default function RatingOptions({
|
||||
fontSize: "16px",
|
||||
}}
|
||||
>
|
||||
{negativeText}
|
||||
{question.content.ratingNegativeDescription}
|
||||
</Typography>
|
||||
<TextField
|
||||
defaultValue={question.content.ratingNegativeDescription}
|
||||
value={negativeText}
|
||||
value={question.content.ratingNegativeDescription}
|
||||
placeholder="Негативно"
|
||||
onChange={({ target }: { target: HTMLInputElement }) => {
|
||||
onChange={({ target }) => {
|
||||
if (target.value.length <= 15) {
|
||||
setNegativeText(target.value);
|
||||
debounceNegativeDescription(target.value);
|
||||
setNegativeDescription(target.value);
|
||||
}
|
||||
}}
|
||||
onBlur={({ target }: { target: HTMLInputElement }) =>
|
||||
debounceNegativeDescription(target.value)
|
||||
}
|
||||
onBlur={({ target }) => setNegativeDescription(target.value)}
|
||||
sx={{
|
||||
width: negativeTextWidth + 10 + "px",
|
||||
maxWidth: isMobile ? "140px" : "230px",
|
||||
@ -279,20 +269,17 @@ export default function RatingOptions({
|
||||
fontSize: "16px",
|
||||
}}
|
||||
>
|
||||
{positiveText}
|
||||
{question.content.ratingPositiveDescription}
|
||||
</Typography>
|
||||
<TextField
|
||||
value={positiveText}
|
||||
value={question.content.ratingPositiveDescription}
|
||||
placeholder="Позитивно"
|
||||
onChange={({ target }: { target: HTMLInputElement }) => {
|
||||
onChange={({ target }) => {
|
||||
if (target.value.length <= 15) {
|
||||
setPositiveText(target.value);
|
||||
debouncePositiveDescription(target.value);
|
||||
setPositiveDescription(target.value);
|
||||
}
|
||||
}}
|
||||
onBlur={({ target }: { target: HTMLInputElement }) =>
|
||||
debouncePositiveDescription(target.value)
|
||||
}
|
||||
onBlur={({ target }) => setPositiveDescription(target.value)}
|
||||
sx={{
|
||||
width: positiveTextWidth + 10 + "px",
|
||||
maxWidth: isMobile ? "140px" : "230px",
|
||||
|
@ -3,16 +3,12 @@ import {
|
||||
Box,
|
||||
ButtonBase,
|
||||
Slider,
|
||||
Tooltip,
|
||||
Typography,
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from "@mui/material";
|
||||
import { setQuestionInnerName, updateQuestion } from "@root/questions/actions";
|
||||
import { updateQuestion } from "@root/questions/actions";
|
||||
import CustomCheckbox from "@ui_kit/CustomCheckbox";
|
||||
import CustomTextField from "@ui_kit/CustomTextField";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import InfoIcon from "../../../assets/icons/InfoIcon";
|
||||
import FlagIcon from "../../../assets/icons/questionsPage/FlagIcon";
|
||||
import StarIconMini from "../../../assets/icons/questionsPage/StarIconMini";
|
||||
import HashtagIcon from "../../../assets/icons/questionsPage/hashtagIcon";
|
||||
@ -32,10 +28,6 @@ export default function SettingSlider({ question }: SettingSliderProps) {
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(790));
|
||||
const isWrappColumn = useMediaQuery(theme.breakpoints.down(980));
|
||||
|
||||
const setInnerName = useDebouncedCallback((value) => {
|
||||
setQuestionInnerName(question.id, value);
|
||||
}, 200);
|
||||
|
||||
const buttonRatingForm: ButtonRatingFrom[] = [
|
||||
{ name: "star", icon: <StarIconMini color={theme.palette.grey3.main} /> },
|
||||
{ name: "trophie", icon: <TropfyIcon color={theme.palette.grey3.main} /> },
|
||||
|
@ -1,15 +1,6 @@
|
||||
import {
|
||||
Box,
|
||||
Tooltip,
|
||||
Typography,
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from "@mui/material";
|
||||
import { setQuestionInnerName, updateQuestion } from "@root/questions/actions";
|
||||
import { Box, Typography, useMediaQuery, useTheme } from "@mui/material";
|
||||
import { updateQuestion } from "@root/questions/actions";
|
||||
import CustomCheckbox from "@ui_kit/CustomCheckbox";
|
||||
import CustomTextField from "@ui_kit/CustomTextField";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import InfoIcon from "../../../assets/icons/InfoIcon";
|
||||
import type { QuizQuestionNumber } from "../../../model/questionTypes/number";
|
||||
|
||||
type SettingSliderProps = {
|
||||
@ -22,10 +13,6 @@ export default function SettingSlider({ question }: SettingSliderProps) {
|
||||
const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(790));
|
||||
|
||||
const setInnerName = useDebouncedCallback((value) => {
|
||||
setQuestionInnerName(question.id, value);
|
||||
}, 200);
|
||||
|
||||
return (
|
||||
<Box
|
||||
sx={{
|
||||
|
@ -123,6 +123,9 @@ export default function SwitchQuestionsPage({
|
||||
/>
|
||||
);
|
||||
|
||||
case "result":
|
||||
return null;
|
||||
|
||||
default:
|
||||
notReachable(question);
|
||||
}
|
||||
|
@ -1,15 +1,6 @@
|
||||
import {
|
||||
Box,
|
||||
Tooltip,
|
||||
Typography,
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from "@mui/material";
|
||||
import { setQuestionInnerName, updateQuestion } from "@root/questions/actions";
|
||||
import { Box, Typography, useMediaQuery, useTheme } from "@mui/material";
|
||||
import { updateQuestion } from "@root/questions/actions";
|
||||
import CustomCheckbox from "@ui_kit/CustomCheckbox";
|
||||
import CustomTextField from "@ui_kit/CustomTextField";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import InfoIcon from "../../../assets/icons/InfoIcon";
|
||||
import type { QuizQuestionFile } from "../../../model/questionTypes/file";
|
||||
|
||||
type SettingsUploadProps = {
|
||||
@ -20,10 +11,6 @@ export default function SettingsUpload({ question }: SettingsUploadProps) {
|
||||
const theme = useTheme();
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(790));
|
||||
|
||||
const setInnerName = useDebouncedCallback((value) => {
|
||||
setQuestionInnerName(question.id, value);
|
||||
}, 200);
|
||||
|
||||
return (
|
||||
<Box
|
||||
sx={{
|
||||
|
@ -1,15 +1,6 @@
|
||||
import {
|
||||
Box,
|
||||
Tooltip,
|
||||
Typography,
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from "@mui/material";
|
||||
import { setQuestionInnerName, updateQuestion } from "@root/questions/actions";
|
||||
import { Box, Typography, useMediaQuery, useTheme } from "@mui/material";
|
||||
import { updateQuestion } from "@root/questions/actions";
|
||||
import CustomCheckbox from "@ui_kit/CustomCheckbox";
|
||||
import CustomTextField from "@ui_kit/CustomTextField";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import InfoIcon from "../../../assets/icons/InfoIcon";
|
||||
import type { QuizQuestionVariant } from "../../../model/questionTypes/variant";
|
||||
|
||||
interface Props {
|
||||
@ -23,10 +14,6 @@ export default function ResponseSettings({ question }: Props) {
|
||||
const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(790));
|
||||
|
||||
const updateQuestionInnerName = useDebouncedCallback((value) => {
|
||||
setQuestionInnerName(question.id, value);
|
||||
}, 200);
|
||||
|
||||
return (
|
||||
<Box
|
||||
sx={{
|
||||
|
@ -5,7 +5,6 @@ import CustomTextField from "@ui_kit/CustomTextField";
|
||||
import SelectableButton from "@ui_kit/SelectableButton";
|
||||
import UploadBox from "@ui_kit/UploadBox";
|
||||
import { useState } from "react";
|
||||
import { useDebouncedCallback } from "use-debounce";
|
||||
import UploadIcon from "../../assets/icons/UploadIcon";
|
||||
import { UploadVideoModal } from "./UploadVideoModal";
|
||||
|
||||
@ -19,11 +18,11 @@ export default function HelpQuestions({ question }: HelpQuestionsProps) {
|
||||
const [open, setOpen] = useState(false);
|
||||
const [backgroundType, setBackgroundType] = useState<BackgroundType>("text");
|
||||
|
||||
const updateQuestionHint = useDebouncedCallback((value) => {
|
||||
const updateQuestionHint = (value: string) => {
|
||||
updateQuestion(question.id, (question) => {
|
||||
question.content.hint.text = value;
|
||||
});
|
||||
}, 200);
|
||||
};
|
||||
|
||||
return (
|
||||
<Box
|
||||
@ -60,7 +59,7 @@ export default function HelpQuestions({ question }: HelpQuestionsProps) {
|
||||
<>
|
||||
<CustomTextField
|
||||
placeholder={"Текст консультанта"}
|
||||
text={question.content.hint.text}
|
||||
value={question.content.hint.text}
|
||||
onChange={({ target }) => updateQuestionHint(target.value || " ")}
|
||||
maxLength={100}
|
||||
/>
|
||||
|
@ -59,7 +59,7 @@ export default function EditPage({
|
||||
const quiz = useCurrentQuiz();
|
||||
const { editQuizId } = useQuizStore();
|
||||
const { questions } = useQuestionsStore();
|
||||
const { whyCantCreatePublic, showConfirmLeaveModal, nextStep } = useUiTools();
|
||||
const { showConfirmLeaveModal, nextStep } = useUiTools();
|
||||
const theme = useTheme();
|
||||
const navigate = useNavigate();
|
||||
const currentStep = useQuizStore((state) => state.currentStep);
|
||||
|
Loading…
Reference in New Issue
Block a user