diff --git a/src/model/quizSettings.ts b/src/model/quizSettings.ts index 5c8b9aca..c2a84ffa 100644 --- a/src/model/quizSettings.ts +++ b/src/model/quizSettings.ts @@ -29,8 +29,6 @@ export type QuizResultsType = true | null; export interface QuizConfig { type: QuizType; - logo: string | null; - originalLogo: string | null; noStartPage: boolean; startpageType: QuizStartpageType; results: QuizResultsType; @@ -41,6 +39,8 @@ export interface QuizConfig { position: QuizStartpageAlignType; favIcon: string | null; originalFavIcon: string | null; + logo: string | null; + originalLogo: string | null; background: { type: null | "image" | "video"; desktop: string | null; @@ -63,8 +63,6 @@ export interface QuizConfig { export const defaultQuizConfig: QuizConfig = { type: null, - logo: null, - originalLogo: null, noStartPage: false, startpageType: null, results: null, @@ -75,6 +73,8 @@ export const defaultQuizConfig: QuizConfig = { position: "left", favIcon: null, originalFavIcon: null, + logo: null, + originalLogo: null, background: { type: null, desktop: null, diff --git a/src/pages/startPage/StartPageSettings.tsx b/src/pages/startPage/StartPageSettings.tsx index c1665b5d..e51ae8a0 100755 --- a/src/pages/startPage/StartPageSettings.tsx +++ b/src/pages/startPage/StartPageSettings.tsx @@ -582,22 +582,22 @@ export default function StartPageSettings() { { uploadQuizImage(quiz.id, file, (quiz, url) => { - quiz.config.logo = url; - quiz.config.originalLogo = url; + quiz.config.startpage.logo = url; + quiz.config.startpage.originalLogo = url; }); }} onImageSaveClick={file => { uploadQuizImage(quiz.id, file, (quiz, url) => { - quiz.config.logo = url; + quiz.config.startpage.logo = url; }); }} onDeleteClick={() => { updateQuiz(quiz.id, quiz => { - quiz.config.logo = null; + quiz.config.startpage.logo = null; }); }} /> @@ -664,22 +664,22 @@ export default function StartPageSettings() { { uploadQuizImage(quiz.id, file, (quiz, url) => { - quiz.config.logo = url; - quiz.config.originalLogo = url; + quiz.config.startpage.logo = url; + quiz.config.startpage.originalLogo = url; }); }} onImageSaveClick={file => { uploadQuizImage(quiz.id, file, (quiz, url) => { - quiz.config.logo = url; + quiz.config.startpage.logo = url; }); }} onDeleteClick={() => { updateQuiz(quiz.id, quiz => { - quiz.config.logo = null; + quiz.config.startpage.logo = null; }); }} /> diff --git a/src/ui_kit/QuizPreview/QuizPreviewLayout.tsx b/src/ui_kit/QuizPreview/QuizPreviewLayout.tsx index 7e68964d..4dd6c009 100644 --- a/src/ui_kit/QuizPreview/QuizPreviewLayout.tsx +++ b/src/ui_kit/QuizPreview/QuizPreviewLayout.tsx @@ -219,9 +219,9 @@ export default function QuizPreviewLayout() { } function QuestionPreviewComponent({ question }: { - question: AnyTypedQuizQuestion | UntypedQuizQuestion; + question: AnyTypedQuizQuestion | UntypedQuizQuestion | undefined; }) { - if (question.type === null) return null; + if (!question || question.type === null) return null; switch (question.type) { case "variant": return ; diff --git a/src/ui_kit/QuizPreview/QuizPreviewQuestionTypes/Variant.tsx b/src/ui_kit/QuizPreview/QuizPreviewQuestionTypes/Variant.tsx index 3b975186..762a6159 100644 --- a/src/ui_kit/QuizPreview/QuizPreviewQuestionTypes/Variant.tsx +++ b/src/ui_kit/QuizPreview/QuizPreviewQuestionTypes/Variant.tsx @@ -1,13 +1,13 @@ import { ChangeEvent, useState } from "react"; import { - Box, - FormControl, - FormControlLabel, - FormLabel, - Radio, - RadioGroup, - Tooltip, - Typography, + Box, + FormControl, + FormControlLabel, + FormLabel, + Radio, + RadioGroup, + Tooltip, + Typography, } from "@mui/material"; import InfoIcon from "@icons/InfoIcon"; @@ -15,57 +15,68 @@ import InfoIcon from "@icons/InfoIcon"; import type { QuizQuestionVariant } from "model/questionTypes/variant"; interface Props { - question: QuizQuestionVariant; + question: QuizQuestionVariant; } export default function Variant({ question }: Props) { - const [value, setValue] = useState(null); + const [value, setValue] = useState(null); - const handleChange = (event: ChangeEvent) => { - setValue((event.target as HTMLInputElement).value); - }; + const handleChange = (event: ChangeEvent) => { + setValue((event.target as HTMLInputElement).value); + }; - return ( - - - {question.title} - - - {question.content.variants - .filter(({ answer }) => answer) - .map((variant, index) => ( - - } - label={ - - - {variant.answer} - - {variant.hints && ( - - - - - - )} - - } + return ( + + {question.title} + + {question.content.variants + .filter(({ answer }) => answer) + .map((variant, index) => ( + + } + label={ + + + {variant.answer} + + {variant.hints && ( + + + + + + )} + + } + /> + ))} + + - ))} - - - ); + + ); } diff --git a/src/ui_kit/QuizPreview/QuizPreviewQuestionTypes/Varimg.tsx b/src/ui_kit/QuizPreview/QuizPreviewQuestionTypes/Varimg.tsx index fdfa6b50..091d05c5 100644 --- a/src/ui_kit/QuizPreview/QuizPreviewQuestionTypes/Varimg.tsx +++ b/src/ui_kit/QuizPreview/QuizPreviewQuestionTypes/Varimg.tsx @@ -1,13 +1,13 @@ -import { useState, ChangeEvent } from "react"; +import { useState, ChangeEvent, useEffect } from "react"; import { - Box, - FormControl, - FormControlLabel, - FormLabel, - Radio, - RadioGroup, - Tooltip, - Typography, + Box, + FormControl, + FormControlLabel, + FormLabel, + Radio, + RadioGroup, + Tooltip, + Typography, } from "@mui/material"; import InfoIcon from "@icons/InfoIcon"; @@ -16,103 +16,113 @@ import type { QuestionVariant } from "model/questionTypes/shared"; import type { QuizQuestionVarImg } from "model/questionTypes/varimg"; interface Props { - question: QuizQuestionVarImg; + question: QuizQuestionVarImg; } export default function Varimg({ question }: Props) { - const [selectedVariantIndex, setSelectedVariantIndex] = useState(-1); + const [selectedVariantIndex, setSelectedVariantIndex] = useState(-1); - const handleChange = (event: ChangeEvent) => { - setSelectedVariantIndex( - question.content.variants.findIndex( - (variant) => variant.answer === event.target.value - ) - ); - }; + const handleChange = (event: ChangeEvent) => { + setSelectedVariantIndex( + question.content.variants.findIndex( + (variant) => variant.answer === event.target.value + ) + ); + }; - const currentVariant: QuestionVariant | undefined = - question.content.variants[selectedVariantIndex]; + const currentVariant: QuestionVariant | undefined = + question.content.variants[selectedVariantIndex]; - return ( - - - - {question.title} - - - {question.content.variants - .filter(({ answer }) => answer) - .map((variant, index) => ( - - } - label={ - - {variant.answer} - {variant.hints && ( - - - - - - )} - - } - /> - ))} - - - - {currentVariant?.extendedText ? ( - question variant - ) : ( - - {selectedVariantIndex === -1 - ? "Выберите вариант" - : "Картинка отсутствует"} - - )} - - - ); + > + + + {question.title} + + + {question.content.variants + .filter(({ answer }) => answer) + .map((variant, index) => ( + + } + label={ + + {variant.answer} + {variant.hints && ( + + + + + + )} + + } + /> + ))} + + + + {currentVariant ? + currentVariant.extendedText ? ( + question variant + ) : ( + Картинка отсутствует + ) : question.content.back ? ( + question variant + ) : ( + Выберите вариант + ) + } + + + ); } diff --git a/src/ui_kit/StartPagePreview/QuizPreviewLayout.tsx b/src/ui_kit/StartPagePreview/QuizPreviewLayout.tsx index 7b7ddb20..cc1eb167 100644 --- a/src/ui_kit/StartPagePreview/QuizPreviewLayout.tsx +++ b/src/ui_kit/StartPagePreview/QuizPreviewLayout.tsx @@ -53,9 +53,9 @@ export default function QuizPreviewLayout() { }} > {quiz.config.startpage.background.type === "image" && - quiz.config.startpage.background.desktop && ( + quiz.config.startpage.logo && (