import AlignCenterIcon from "@icons/AlignCenterIcon"; import AlignLeftIcon from "@icons/AlignLeftIcon"; import AlignRightIcon from "@icons/AlignRightIcon"; import ArrowDown from "@icons/ArrowDownIcon"; import LayoutCenteredIcon from "@icons/LayoutCenteredIcon"; import LayoutExpandedIcon from "@icons/LayoutExpandedIcon"; import LayoutStandartIcon from "@icons/LayoutStandartIcon"; import MobilePhoneIcon from "@icons/MobilePhoneIcon"; import { QuizStartpageType } from "@model/quizSettings"; import { Box, Button, Checkbox, FormControl, FormControlLabel, MenuItem, Select, Typography, useMediaQuery, useTheme } from "@mui/material"; import { incrementCurrentStep, updateQuiz, uploadQuizImage } from "@root/quizes/actions"; import { useCurrentQuiz } from "@root/quizes/hooks"; import CustomCheckbox from "@ui_kit/CustomCheckbox"; import CustomTextField from "@ui_kit/CustomTextField"; import SelectableButton from "@ui_kit/SelectableButton"; import { StartPagePreview } from "@ui_kit/StartPagePreview"; import { resizeFavIcon } from "@ui_kit/reactImageFileResizer"; import { useState } from "react"; import { createPortal } from "react-dom"; import FaviconDropZone from "./FaviconDropZone"; import ModalSizeImage from "./ModalSizeImage"; import SelectableIconButton from "./SelectableIconButton"; import { DropZone } from "./dropZone"; import Extra from "./extra"; const designTypes = [ [ "standard", (color: string) => , "Standard", ], [ "expanded", (color: string) => , "Expanded", ], [ "centered", (color: string) => , "Centered", ], ] as const; // type DesignType = typeof designTypes[number][0]; export default function StartPageSettings() { const theme = useTheme(); const isSmallMonitor = useMediaQuery(theme.breakpoints.down(1500)); const isTablet = useMediaQuery(theme.breakpoints.down(950)); const quiz = useCurrentQuiz(); const [formState, setFormState] = useState<"design" | "content">("design"); const [mobileVersion, setMobileVersion] = useState(false); if (!quiz) return null; const MobileVersionHC = (bool: boolean) => { setMobileVersion(bool); }; const designType = quiz?.config?.startpageType; const favIconDropZoneElement = ( { const resizedImage = await resizeFavIcon(file); uploadQuizImage(quiz.id, resizedImage, (quiz, url) => { quiz.config.startpage.favIcon = url; }); }} onDeleteClick={() => { updateQuiz(quiz.id, quiz => { quiz.config.startpage.favIcon = null; }); }} /> ); return ( <> Стартовая страница {isSmallMonitor && ( )} {(!isSmallMonitor || (isSmallMonitor && formState === "design")) && ( Дизайн Фон updateQuiz(quiz.id, quiz => { quiz.config.startpage.background.type = "image"; })} > Изображение updateQuiz(quiz.id, quiz => { quiz.config.startpage.background.type = "video"; })} > Видео Изображение { uploadQuizImage(quiz.id, file, (quiz, url) => { quiz.config.startpage.background.desktop = url; quiz.config.startpage.background.originalDesktop = url; }); }} onImageSaveClick={file => { uploadQuizImage(quiz.id, file, (quiz, url) => { quiz.config.startpage.background.desktop = url; }); }} onDeleteClick={() => { updateQuiz(quiz.id, quiz => { quiz.config.startpage.background.desktop = null; }); }} /> updateQuiz(quiz.id, quiz => { quiz.config.startpage.background.video = e.target.value; })} /> {designType !== "centered" && <> Расположение элементов updateQuiz(quiz.id, quiz => { quiz.config.startpage.position = "left"; })} isActive={quiz.config.startpage.position === "left"} Icon={AlignLeftIcon} /> updateQuiz(quiz.id, quiz => { quiz.config.startpage.position = "center"; })} isActive={quiz.config.startpage.position === "center"} Icon={AlignCenterIcon} sx={{ display: designType === "standard" ? "none" : "flex" }} /> updateQuiz(quiz.id, quiz => { quiz.config.startpage.position = "right"; })} isActive={quiz.config.startpage.position === "right"} Icon={AlignRightIcon} /> } {(isTablet || !isSmallMonitor) && ( <> Логотип { uploadQuizImage(quiz.id, file, (quiz, url) => { quiz.config.startpage.logo = url; quiz.config.startpage.originalLogo = url; }); }} onImageSaveClick={file => { uploadQuizImage(quiz.id, file, (quiz, url) => { quiz.config.startpage.logo = url; }); }} onDeleteClick={() => { updateQuiz(quiz.id, quiz => { quiz.config.startpage.logo = null; }); }} /> Favicon {favIconDropZoneElement} )} )} {/*Правая сторона*/} {!isTablet && isSmallMonitor && formState === "design" && ( <> Логотип { uploadQuizImage(quiz.id, file, (quiz, url) => { quiz.config.startpage.logo = url; quiz.config.startpage.originalLogo = url; }); }} onImageSaveClick={file => { uploadQuizImage(quiz.id, file, (quiz, url) => { quiz.config.startpage.logo = url; }); }} onDeleteClick={() => { updateQuiz(quiz.id, quiz => { quiz.config.startpage.logo = null; }); }} /> Favicon {favIconDropZoneElement} )} {(!isSmallMonitor || (isSmallMonitor && formState === "content")) && ( <> Заголовок updateQuiz(quiz.id, quiz => { quiz.name = e.target.value; })} /> Текст updateQuiz(quiz.id, quiz => { quiz.config.startpage.description = e.target.value; })} /> Текст кнопки updateQuiz(quiz.id, quiz => { quiz.config.startpage.button = e.target.value; })} /> Телефон updateQuiz(quiz.id, quiz => { quiz.config.info.phonenumber = e.target.value; })} /> updateQuiz(quiz.id, quiz => { quiz.config.info.clickable = e.target.checked; })} /> Название или слоган компании updateQuiz(quiz.id, quiz => { quiz.config.info.orgname = e.target.value; })} /> Сайт updateQuiz(quiz.id, quiz => { quiz.config.info.site = e.target.value; })} /> Юридическая информация updateQuiz(quiz.id, quiz => { quiz.config.info.law = e.target.value; })} /> )} {isSmallMonitor && ( {formState === "content" && ( )} {formState === "design" && ( )} )} Отключить стартовую страницу } checkedIcon={ } sx={{ borderRadius: 0, padding: 0, }} onChange={e => updateQuiz(quiz.id, quiz => { quiz.config.noStartPage = e.target.checked; })} checked={quiz.config.noStartPage} /> } label="" sx={{ color: theme.palette.brightPurple.main, margin: "0", userSelect: "none", justifyContent: "flex-end", }} /> {createPortal(, document.body)} ); } function IconCheck() { return ( ); }