import { useState, useEffect } from "react"; import { getQuestionByContentId, updateQuestion, } from "@root/questions/actions"; import { useCurrentQuiz } from "@root/quizes/hooks"; import CustomTextField from "@ui_kit/CustomTextField"; import { Box, IconButton, Paper, Button, Typography, TextField, useMediaQuery, useTheme, FormControl, Popover, } from "@mui/material"; import MiniButtonSetting from "@ui_kit/MiniButtonSetting"; import ExpandLessIconBG from "@icons/ExpandLessIconBG"; import ExpandLessIcon from "@mui/icons-material/ExpandLess"; import Trash from "@icons/trash"; import Info from "@icons/Info"; import SettingIcon from "@icons/questionsPage/settingIcon"; import { MediaSelectionAndDisplay } from "@ui_kit/MediaSelectionAndDisplay"; import type { MouseEvent } from "react"; import type { QuizQuestionResult } from "@model/questionTypes/result"; interface Props { resultContract: boolean; resultData: QuizQuestionResult; } export const checkEmptyData = ({ resultData, }: { resultData: QuizQuestionResult; }) => { let check = true; if ( resultData.title?.length > 0 || resultData.description?.length > 0 || resultData.content.back?.length > 0 || resultData.content.originalBack?.length > 0 || resultData.content.innerName?.length > 0 || resultData.content.text?.length > 0 || resultData.content.video?.length > 0 || resultData.content.hint.text?.length > 0 ) check = false; return check; }; const InfoView = ({ resultData }: { resultData: QuizQuestionResult }) => { const checkEmpty = checkEmptyData({ resultData }); const question = getQuestionByContentId(resultData.content.rule.parentId); const [anchorEl, setAnchorEl] = useState(null); const handleClick = (event: MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleClose = () => { setAnchorEl(null); }; const open = Boolean(anchorEl); const id = open ? "simple-popover" : undefined; return ( <> {resultData?.content.rule.parentId === "line" ? "Единый результат в конце прохождения опроса без ветвления" : `Заголовок вопроса, после которого появится результат: "${ question?.title || "нет заголовка" }"`} {checkEmpty && ( Вы не заполнили этот результат никакими данными )} ); }; export const ResultCard = ({ resultContract, resultData }: Props) => { const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down(790)); const isTablet = useMediaQuery(theme.breakpoints.down(800)); const [expand, setExpand] = useState(true); const [resultCardSettings, setResultCardSettings] = useState(false); const [buttonPlus, setButtonPlus] = useState(true); const [inputValue, setInputValue] = useState(resultData.content.text); const question = getQuestionByContentId(resultData.content.rule.parentId); const quiz = useCurrentQuiz(); useEffect(() => { if ( resultData.content.hint.text || (quiz?.config.resultInfo.showResultForm === "after" && resultData.content.redirect) ) { setButtonPlus(false); } }, []); useEffect(() => { setExpand(true); }, [resultContract]); return ( {resultData?.content.rule.parentId === "line" ? "Единый результат в конце прохождения опроса без ветвления" : `Заголовок вопроса, после которого появится результат: "${ question?.title || "нет заголовка" }"`} updateQuestion( resultData.id, (question) => (question.title = target.value), ) } sx={{ margin: isMobile ? "10px 0" : 0, backgroundColor: expand ? theme.palette.background.default : "transparent", height: "48px", borderRadius: "10px", borderWidth: "1px !important", border: !expand ? "none" : null, "&::placeholder": { color: "#4D4D4D", opacity: 0.8, }, }} /> setExpand(!expand)} > {expand ? ( ) : ( )} {expand && ( <> updateQuestion( resultData.id, (question) => (question.description = target.value), ) } placeholder={"Заголовок пожирнее"} maxLength={200} sx={{ borderRadius: "8px", height: "48px", width: "100%", }} /> setExpand(!expand)} > updateQuestion( resultData.id, (question) => (question.title = target.value), ) } /> { if (target.value.length <= 3000) { setInputValue(target.value); } updateQuestion( resultData.id, (question) => (question.content.text = target.value), ); }} fullWidth placeholder="Описание" multiline rows={4} sx={{ "& .MuiInputBase-root": { backgroundColor: "#F2F3F7", width: "100%", height: "110px", borderRadius: "10px", }, }} inputProps={{ sx: { height: "85px", borderRadius: "10px", fontSize: "18px", lineHeight: "21px", py: 0, }, }} /> {buttonPlus ? ( ) : ( Призыв к действию { setButtonPlus(true); updateQuestion( resultData.id, (q) => (q.content.hint.text = ""), ); }} > updateQuestion(resultData.id, (question) => { question.content.hint.text = target.value; }) } maxLength={19} placeholder="Например: узнать подробнее" sx={{ "& .MuiInputBase-root": { backgroundColor: "#F2F3F7", width: isMobile ? undefined : "409px", height: "48px", borderRadius: "8px", }, }} inputProps={{ sx: { height: "85px", borderRadius: "10px", fontSize: "18px", lineHeight: "21px", py: 0, }, }} /> {quiz?.config.resultInfo.showResultForm === "after" && ( <> Cсылка для кнопки updateQuestion( resultData.id, (question) => { question.content.redirect = target.value; }, ) } placeholder="https://penahub.ru" maxLength={200} sx={{ "& .MuiInputBase-root": { backgroundColor: "#F2F3F7", width: isMobile ? undefined : "409px", height: "48px", borderRadius: "8px", }, }} inputProps={{ sx: { height: "85px", borderRadius: "10px", fontSize: "18px", lineHeight: "21px", py: 0, }, }} /> )} )} )} ); };