From 6140f4c31d94813f6523eb55cf03413f3c143f0a Mon Sep 17 00:00:00 2001 From: Nastya Date: Sun, 17 Dec 2023 00:34:54 +0300 Subject: [PATCH 1/5] =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5?= =?UTF-8?q?=D0=BA=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BE=D0=BA=20=D0=90=D1=80?= =?UTF-8?q?=D1=82=D1=91=D0=BC=D0=B0=20=D0=B2=20=D0=BC=D0=BE=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D0=BA=D0=B5=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8=D0=BD=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ui_kit/Modal/CropModal.tsx | 47 +++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/src/ui_kit/Modal/CropModal.tsx b/src/ui_kit/Modal/CropModal.tsx index 242235a4..4837f667 100644 --- a/src/ui_kit/Modal/CropModal.tsx +++ b/src/ui_kit/Modal/CropModal.tsx @@ -40,8 +40,8 @@ const styleSlider: SxProps = { "&:focus, &:hover, &.Mui-active, &.Mui-focusVisible": { boxShadow: `0px 0px 0px 3px white, 0px 4px 4px 3px #C3C8DD`, + }, }, - }, }; interface Props { @@ -249,20 +249,9 @@ export const CropModal: FC = ({ isOpen, imageBlob, originalImageUrl, setC marginTop: "40px", width: "100%", display: "flex", - }}> - + gap: "10px", + }} + > + + + From 8d4fab2cbc2786468985b92bc2dd24c2fb64c3a2 Mon Sep 17 00:00:00 2001 From: ArtChaos189 Date: Sun, 17 Dec 2023 02:10:24 +0300 Subject: [PATCH 2/5] =?UTF-8?q?=D0=BF=D0=BE=D0=BC=D0=B5=D0=BD=D1=8F=D0=BB?= =?UTF-8?q?=20=D0=BB=D0=BE=D0=B3=D0=BE=20,=20=D0=BE=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D0=BD=D0=B0=D0=B2=D0=B8=D0=B3=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8E=20=D1=81=D1=82=D1=80=D0=B5=D0=BB=D0=BE=D0=BA=20,?= =?UTF-8?q?=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0=D0=BB=D0=BA=D0=B8=20(=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BC=D0=BE=D0=B4=D0=B0=D0=BB=D0=BA=D1=83=20?= =?UTF-8?q?=D0=B2=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=B0=D1=80=D0=BE=D0=BB=D1=8F?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/icons/NameplateLogo.tsx | 18 + src/pages/ViewPublicationPage/Footer.tsx | 116 ++--- src/pages/auth/Signin.tsx | 11 +- src/pages/auth/Signup.tsx | 4 + src/pages/createQuize/QuizCard.tsx | 287 ++++++----- src/pages/startPage/EditPage.tsx | 586 +++++++++++------------ src/pages/startPage/Restore.tsx | 247 +++++----- src/ui_kit/Header/HeaderFull.tsx | 4 +- 8 files changed, 626 insertions(+), 647 deletions(-) create mode 100644 src/assets/icons/NameplateLogo.tsx diff --git a/src/assets/icons/NameplateLogo.tsx b/src/assets/icons/NameplateLogo.tsx new file mode 100644 index 00000000..a977b2fe --- /dev/null +++ b/src/assets/icons/NameplateLogo.tsx @@ -0,0 +1,18 @@ +import { FC, SVGProps } from "react"; + +export const NameplateLogo: FC> = (props) => ( + + + + + + +); diff --git a/src/pages/ViewPublicationPage/Footer.tsx b/src/pages/ViewPublicationPage/Footer.tsx index f036634a..8ff02abc 100644 --- a/src/pages/ViewPublicationPage/Footer.tsx +++ b/src/pages/ViewPublicationPage/Footer.tsx @@ -1,16 +1,14 @@ import { useState, useEffect } from "react"; -import { Box, Button, useTheme } from "@mui/material"; +import { Box, Button, Typography, useTheme } from "@mui/material"; import { useQuizViewStore } from "@root/quizView"; import { useCurrentQuiz } from "@root/quizes/hooks"; import { useQuestionsStore } from "@root/questions/store"; -import type { - AnyTypedQuizQuestion, - QuizQuestionBase, -} from "../../model/questionTypes/shared"; +import type { AnyTypedQuizQuestion, QuizQuestionBase } from "../../model/questionTypes/shared"; import { getQuestionByContentId } from "@root/questions/actions"; import { enqueueSnackbar } from "notistack"; +import { NameplateLogo } from "@icons/NameplateLogo"; type FooterProps = { setCurrentQuestion: (step: AnyTypedQuizQuestion) => void; @@ -19,22 +17,14 @@ type FooterProps = { setShowResultForm: (show: boolean) => void; }; -export const Footer = ({ - setCurrentQuestion, - question, - setShowContactForm, - setShowResultForm, -}: FooterProps) => { - const [disablePreviousButton, setDisablePreviousButton] = - useState(false); +export const Footer = ({ setCurrentQuestion, question, setShowContactForm, setShowResultForm }: FooterProps) => { + const [disablePreviousButton, setDisablePreviousButton] = useState(false); const [disableNextButton, setDisableNextButton] = useState(false); const quiz = useCurrentQuiz(); const { answers } = useQuizViewStore(); const questions = useQuestionsStore().questions as AnyTypedQuizQuestion[]; const theme = useTheme(); - const linear = !questions.find( - ({ content }) => content.rule.parentId === "root" - ); + const linear = !questions.find(({ content }) => content.rule.parentId === "root"); useEffect(() => { // Логика для аргумента disabled у кнопки "Назад" @@ -57,9 +47,7 @@ export const Footer = ({ } // Логика для аргумента disabled у кнопки "Далее" - const answer = answers.find( - ({ questionId }) => questionId === question.content.id - ); + const answer = answers.find(({ questionId }) => questionId === question.content.id); if ("required" in question.content && question.content.required && answer) { setDisableNextButton(false); @@ -67,11 +55,7 @@ export const Footer = ({ return; } - if ( - "required" in question.content && - question.content.required && - !answer - ) { + if ("required" in question.content && question.content.required && !answer) { setDisableNextButton(true); return; @@ -85,9 +69,7 @@ export const Footer = ({ if (nextQuestionId) { setDisableNextButton(false); } else { - const nextQuestion = getQuestionByContentId( - question.content.rule.default - ); + const nextQuestion = getQuestionByContentId(question.content.rule.default); if (nextQuestion?.type) { setDisableNextButton(false); @@ -95,9 +77,8 @@ export const Footer = ({ } }, [question, answers]); - const showResult = nextQuestion => { - - console.log(nextQuestion) + const showResult = (nextQuestion) => { + console.log(nextQuestion); if (nextQuestion && quiz?.config.resultInfo.when === "before") { setShowResultForm(true); @@ -108,44 +89,34 @@ export const Footer = ({ const getNextQuestionId = () => { if (answers.length) { - const answer = answers.find( - ({ questionId }) => questionId === question.content.id - ); + const answer = answers.find(({ questionId }) => questionId === question.content.id); let readyBeNextQuestion = ""; - (question as QuizQuestionBase).content.rule.main.forEach( - ({ next, rules }) => { - let longerArray = Math.max( - rules[0].answers.length, - answer?.answer && Array.isArray(answer?.answer) - ? answer?.answer.length - : [answer?.answer].length - ); + (question as QuizQuestionBase).content.rule.main.forEach(({ next, rules }) => { + let longerArray = Math.max( + rules[0].answers.length, + answer?.answer && Array.isArray(answer?.answer) ? answer?.answer.length : [answer?.answer].length + ); - for ( - var i = 0; - i < longerArray; - i++ // Цикл по всем эле­мен­там бОльшего массива - ) { - if (Array.isArray(answer?.answer)) { - if ( - answer?.answer.find((item) => - String(item === rules[0].answers[i]) - ) - ) { - readyBeNextQuestion = next; // Ес­ли хоть один эле­мент от­ли­ча­ет­ся, мас­си­вы не рав­ны - } - - return; - } - - if (String(rules[0].answers[i]) === answer?.answer) { + for ( + var i = 0; + i < longerArray; + i++ // Цикл по всем эле­мен­там бОльшего массива + ) { + if (Array.isArray(answer?.answer)) { + if (answer?.answer.find((item) => String(item === rules[0].answers[i]))) { readyBeNextQuestion = next; // Ес­ли хоть один эле­мент от­ли­ча­ет­ся, мас­си­вы не рав­ны } + + return; + } + + if (String(rules[0].answers[i]) === answer?.answer) { + readyBeNextQuestion = next; // Ес­ли хоть один эле­мент от­ли­ча­ет­ся, мас­си­вы не рав­ны } } - ); + }); return readyBeNextQuestion; } @@ -181,12 +152,12 @@ export const Footer = ({ const questionIndex = questions.findIndex(({ id }) => id === question.id); const nextQuestion = questions[questionIndex + 1]; - console.log(nextQuestion) + console.log(nextQuestion); if (nextQuestion && nextQuestion.type !== "result") { - console.log("следующий вопрос результирующий ", (nextQuestion.type === "result")) + console.log("следующий вопрос результирующий ", nextQuestion.type === "result"); setCurrentQuestion(nextQuestion); } else { - console.log("следующий вопрос результирующий ", (nextQuestion.type === "result")) + console.log("следующий вопрос результирующий ", nextQuestion.type === "result"); showResult(nextQuestion); } @@ -205,9 +176,7 @@ export const Footer = ({ enqueueSnackbar("не могу получить последующий вопрос"); } } else { - const nextQuestion = getQuestionByContentId( - question.content.rule.default - ); + const nextQuestion = getQuestionByContentId(question.content.rule.default); if (nextQuestion?.type && nextQuestion.type !== "result") { setCurrentQuestion(nextQuestion); } else { @@ -219,10 +188,25 @@ export const Footer = ({ return ( + + + Сделано на PenaQuiz + Вы еще не присоединились? - - Регистрация - + + + Регистрация + + + Забыли пароль + + diff --git a/src/pages/auth/Signup.tsx b/src/pages/auth/Signup.tsx index 0359a97d..c0e1f93b 100644 --- a/src/pages/auth/Signup.tsx +++ b/src/pages/auth/Signup.tsx @@ -200,6 +200,7 @@ export default function SignupDialog() { > Зарегистрироваться + Вход в личный кабинет + + Забыли пароль + ); diff --git a/src/pages/createQuize/QuizCard.tsx b/src/pages/createQuize/QuizCard.tsx index f0d4c7ff..5ef59b0e 100755 --- a/src/pages/createQuize/QuizCard.tsx +++ b/src/pages/createQuize/QuizCard.tsx @@ -4,159 +4,142 @@ import LinkIcon from "@icons/LinkIcon"; import PencilIcon from "@icons/PencilIcon"; import { Quiz } from "@model/quiz/quiz"; import MoreHorizIcon from "@mui/icons-material/MoreHoriz"; -import { - Box, - Button, - IconButton, - Typography, - useMediaQuery, - useTheme, - Popover, - -} from "@mui/material"; +import { Box, Button, IconButton, Typography, useMediaQuery, useTheme, Popover } from "@mui/material"; import { deleteQuiz, setEditQuizId } from "@root/quizes/actions"; import { useNavigate } from "react-router-dom"; - interface Props { - quiz: Quiz; - openCount?: number; - applicationCount?: number; - conversionPercent?: number; + quiz: Quiz; + openCount?: number; + applicationCount?: number; + conversionPercent?: number; } -export default function QuizCard({ - quiz, - openCount = 0, - applicationCount = 0, - conversionPercent = 0, -}: Props) { - const theme = useTheme(); - const isMobile = useMediaQuery(theme.breakpoints.down(600)); - const navigate = useNavigate(); +export default function QuizCard({ quiz, openCount = 0, applicationCount = 0, conversionPercent = 0 }: Props) { + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down(600)); + const navigate = useNavigate(); const [subMenuOpen, setSubMenuOpen] = useState(false); const subMenuRef = useRef(null); - function handleEditClick() { - setEditQuizId(quiz.backendId); - navigate("/edit"); - } + function handleEditClick() { + setEditQuizId(quiz.backendId); + navigate("/edit"); + } - return ( - + {quiz.name} + + + быстрая ссылка ... + + + + {openCount} + Открытий + + + {applicationCount} + Заявок + + + {conversionPercent} % + Конверсия + + + + - - + */} - - - - - - ); + + + + + + ); } diff --git a/src/pages/startPage/EditPage.tsx b/src/pages/startPage/EditPage.tsx index 35c7ef60..8948663f 100755 --- a/src/pages/startPage/EditPage.tsx +++ b/src/pages/startPage/EditPage.tsx @@ -5,14 +5,16 @@ import { Burger } from "@icons/Burger"; import EyeIcon from "@icons/EyeIcon"; import { PenaLogoIcon } from "@icons/PenaLogoIcon"; import { - Box, - Button, - Container, - FormControl, - IconButton, Switch, - TextField, Typography, - useMediaQuery, - useTheme, + Box, + Button, + Container, + FormControl, + IconButton, + Switch, + TextField, + Typography, + useMediaQuery, + useTheme, } from "@mui/material"; import { decrementCurrentStep, resetEditConfig, setQuizes } from "@root/quizes/actions"; import { useCurrentQuiz } from "@root/quizes/hooks"; @@ -37,307 +39,295 @@ import { useQuizes } from "@root/quizes/hooks"; import { questionApi } from "@api/question"; import { useUiTools } from "@root/uiTools/store"; - - +import Logotip from "../Landing/images/icons/QuizLogo"; export default function EditPage() { - const quiz = useCurrentQuiz(); - const { editQuizId } = useQuizStore(); + const quiz = useCurrentQuiz(); + const { editQuizId } = useQuizStore(); - useEffect(() => { - const getData = async () => { - const quizes = await quizApi.getList() - setQuizes(quizes) + useEffect(() => { + const getData = async () => { + const quizes = await quizApi.getList(); + setQuizes(quizes); - const questions = await questionApi.getList({ quiz_id: editQuizId }) - setQuestions(questions) + const questions = await questionApi.getList({ quiz_id: editQuizId }); + setQuestions(questions); + }; + getData(); + }, []); - } - getData() - }, []) + const { openBranchingPanel } = useUiTools(); + const theme = useTheme(); + const navigate = useNavigate(); + const currentStep = useQuizStore((state) => state.currentStep); + const isTablet = useMediaQuery(theme.breakpoints.down(1000)); + const isMobile = useMediaQuery(theme.breakpoints.down(660)); + const [mobileSidebar, setMobileSidebar] = useState(false); + const quizConfig = quiz?.config; - const { openBranchingPanel } = useUiTools() - const theme = useTheme(); - const navigate = useNavigate(); - const currentStep = useQuizStore(state => state.currentStep); - const isTablet = useMediaQuery(theme.breakpoints.down(1000)); - const isMobile = useMediaQuery(theme.breakpoints.down(660)); - const [mobileSidebar, setMobileSidebar] = useState(false); - const quizConfig = quiz?.config; + useEffect(() => { + if (editQuizId === null) navigate("/list"); + }, [navigate, editQuizId]); - useEffect(() => { - if (editQuizId === null) navigate("/list"); - }, [navigate, editQuizId]); + useEffect( + () => () => { + resetEditConfig(); + cleanQuestions(); + }, + [] + ); - useEffect(() => () => { - resetEditConfig(); - cleanQuestions(); - }, []); - - - return ( - <> - {/*хедер*/} - + {/*хедер*/} + + + {isMobile ? : } + + + + + + + + + + + + {isTablet ? ( + + {isMobile ? ( + setMobileSidebar(!mobileSidebar)} + style={{ fontSize: "30px", color: "white", cursor: "pointer" }} + /> + ) : ( + - - {isMobile ? ( - - ) : ( - - )} - - - - - - - - - - {isTablet ? ( - - {isMobile ? ( - setMobileSidebar(!mobileSidebar)} - style={{ fontSize: "30px", color: "white", cursor: "pointer" }} - /> - ) : ( - - )} - - ) : ( - <> - - - - - - - - - - - - - - - )} - - + /> + )} + + ) : ( + <> - {isMobile ? : } - - {/* Выбор текущей страницы редактирования чего-либо находится здесь */} - {quizConfig && - <> - - - - } - - {isTablet && - - {[1, 2].includes(currentStep) && !openBranchingPanel && ( - - updateOpenBranchingPanel(e.target.checked) - } - sx={{ - width: 50, - height: 30, - padding: 0, - "& .MuiSwitch-switchBase": { - padding: 0, - margin: "2px", - transitionDuration: "300ms", - "&.Mui-checked": { - transform: "translateX(20px)", - color: theme.palette.brightPurple.main, - "& + .MuiSwitch-track": { - backgroundColor: "#E8DCF9", - opacity: 1, - border: 0, - }, - "&.Mui-disabled + .MuiSwitch-track": { opacity: 0.5 }, - }, - "&.Mui-disabled .MuiSwitch-thumb": { - color: - theme.palette.mode === "light" - ? theme.palette.grey[100] - : theme.palette.grey[600], - }, - "&.Mui-disabled + .MuiSwitch-track": { - opacity: theme.palette.mode === "light" ? 0.7 : 0.3, - }, - }, - "& .MuiSwitch-thumb": { - boxSizing: "border-box", - width: 25, - height: 25, - }, - "& .MuiSwitch-track": { - borderRadius: 13, - backgroundColor: - theme.palette.mode === "light" ? "#E9E9EA" : "#39393D", - opacity: 1, - transition: theme.transitions.create(["background-color"], { - duration: 500, - }), - }, - }} - /> - - - Логика ветвления - - - - )} - - - - - - } - + + + + + - - ); + + + + + + + + )} + + + + {isMobile ? : } + + {/* Выбор текущей страницы редактирования чего-либо находится здесь */} + {quizConfig && ( + <> + + + + )} + + {isTablet && ( + + {[1, 2].includes(currentStep) && !openBranchingPanel && ( + + updateOpenBranchingPanel(e.target.checked)} + sx={{ + width: 50, + height: 30, + padding: 0, + "& .MuiSwitch-switchBase": { + padding: 0, + margin: "2px", + transitionDuration: "300ms", + "&.Mui-checked": { + transform: "translateX(20px)", + color: theme.palette.brightPurple.main, + "& + .MuiSwitch-track": { + backgroundColor: "#E8DCF9", + opacity: 1, + border: 0, + }, + "&.Mui-disabled + .MuiSwitch-track": { opacity: 0.5 }, + }, + "&.Mui-disabled .MuiSwitch-thumb": { + color: theme.palette.mode === "light" ? theme.palette.grey[100] : theme.palette.grey[600], + }, + "&.Mui-disabled + .MuiSwitch-track": { + opacity: theme.palette.mode === "light" ? 0.7 : 0.3, + }, + }, + "& .MuiSwitch-thumb": { + boxSizing: "border-box", + width: 25, + height: 25, + }, + "& .MuiSwitch-track": { + borderRadius: 13, + backgroundColor: theme.palette.mode === "light" ? "#E9E9EA" : "#39393D", + opacity: 1, + transition: theme.transitions.create(["background-color"], { + duration: 500, + }), + }, + }} + /> + + Логика ветвления + + + )} + + + + + )} + + + ); } diff --git a/src/pages/startPage/Restore.tsx b/src/pages/startPage/Restore.tsx index 01f00a8f..0940e14b 100644 --- a/src/pages/startPage/Restore.tsx +++ b/src/pages/startPage/Restore.tsx @@ -51,139 +51,134 @@ export const Restore: FC = () => { } return ( - - - + - - - - - - - - - Восстановление пароля - - - - - + + + + - - + + Восстановление пароля + + + + + + + ); }; diff --git a/src/ui_kit/Header/HeaderFull.tsx b/src/ui_kit/Header/HeaderFull.tsx index d089c5fe..a9554e2b 100644 --- a/src/ui_kit/Header/HeaderFull.tsx +++ b/src/ui_kit/Header/HeaderFull.tsx @@ -1,6 +1,6 @@ import { Box, Container, IconButton, Typography, useTheme, useMediaQuery } from "@mui/material"; import NavMenuItem from "./NavMenuItem"; -import PenaLogo from "../PenaLogo"; +import Logotip from "../../pages/Landing/images/icons/QuizLogo"; import WalletIcon from "@icons/WalletIcon"; import CustomAvatar from "./Avatar"; import { Burger } from "@icons/Burger"; @@ -53,7 +53,7 @@ export default function HeaderFull() { /> )} - + {!isTablet && ( Date: Sun, 17 Dec 2023 17:10:53 +0300 Subject: [PATCH 3/5] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=B2=D0=B8=D0=B7=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/quizRelase.ts | 45 + src/pages/InstallQuiz/InstallQuiz.tsx | 997 +++++++++++++-------- src/pages/ViewPublicationPage/Question.tsx | 2 +- 3 files changed, 648 insertions(+), 396 deletions(-) create mode 100644 src/api/quizRelase.ts diff --git a/src/api/quizRelase.ts b/src/api/quizRelase.ts new file mode 100644 index 00000000..6e78ee3a --- /dev/null +++ b/src/api/quizRelase.ts @@ -0,0 +1,45 @@ +import { makeRequest } from "@frontend/kitui"; +import { CreateQuestionRequest } from "model/question/create"; +import { RawQuestion } from "model/question/question"; +import { GetQuestionListRequest, GetQuestionListResponse } from "@model/question/getList"; +import { EditQuestionRequest, EditQuestionResponse } from "@model/question/edit"; +import { DeleteQuestionRequest, DeleteQuestionResponse } from "@model/question/delete"; +import { CopyQuestionRequest, CopyQuestionResponse } from "@model/question/copy"; + + +const baseUrl = process.env.NODE_ENV === "production" ? "/squiz" : "https://squiz.pena.digital"; + +function get(quizId: string) { + return makeRequest({ + url: `${baseUrl}/question/copy`, + body: { id: questionId, quiz_id: quizId }, + method: "POST", + }); +} + + +function quizRelase(quizId: string, status: "start"|"stop") { + return makeRequest({ + url: `https://squiz.pena.digital/answer/quiz/get`, + body: { + quiz_id: quizId, + limit: 100, + page: 0, + need_config: true, + + }, + method: "POST", + }); +} + +export const relaseApi = { + relase: quizRelase, + get: quizRelase, +}; + + +const defaultGetQuestionListBody: GetQuestionListRequest = { + "limit": 100, + "offset": 0, + "type": "", +}; diff --git a/src/pages/InstallQuiz/InstallQuiz.tsx b/src/pages/InstallQuiz/InstallQuiz.tsx index c70c158b..9daaad9c 100644 --- a/src/pages/InstallQuiz/InstallQuiz.tsx +++ b/src/pages/InstallQuiz/InstallQuiz.tsx @@ -41,34 +41,14 @@ import InBodyInstall from "./InBodyInstall"; import AutoOpenInstall from "./AutoOpenInstall"; import VidjetInstall from "./VidjetInstall"; import InstallQzCode from "./InstallQzCode"; -import { incrementCurrentStep } from "@root/quizes/actions"; +import { incrementCurrentStep, updateQuiz } from "@root/quizes/actions"; +import { useCurrentQuiz } from "@root/quizes/hooks"; type BackgroundType = "text" | "video"; export default function InstallQuiz() { - const buttonInstall: { icon: string; title: string; text: string }[] = [ - { - icon: OnButton, - title: "По кнопке", - text: "Конструктор кнопки или собственная кнопка", - }, - { icon: Bunner, title: "Баннером", text: "Сбоку или на всю ширину экрана" }, - { - icon: InBidySite, - title: "В тело сайта", - text: "Задайте свои размеры и встройте в сайт", - }, - { - icon: AutoOpen, - title: "Автооткрытие", - text: "Автооткрытие поп-ап на сайте", - }, - { - icon: WidgetImg, - title: "Виджет", - text: "Сбоку страницы как консультант", - }, - ]; + const quiz = useCurrentQuiz() + console.log(quiz) const [display, setDisplay] = React.useState("1"); const handleChange = (event: SelectChangeEvent) => { @@ -253,378 +233,605 @@ export default function InstallQuiz() { Не опубликован - Тестовый просмотр + - - - - Установка квизов на сайте - - - Способ установки - - - - {buttonInstall.map((e, i) => ( - {}} - sx={{ - display: "flex", - flexDirection: "column", - justifyContent: "start", - alignItems: "start", - maxWidth: "205px", - gap: "15px", - }} - > - - {e.title} - - {e.text} - - - ))} - - - - - - - - - - - - - - - - - Добавить квиз в группу ВК - - - - 1. Добавьте приложение в сообщество - - - Для публикации сниппета на стене, призывающего пройти тест, вставьте в новую запись ссылку на приложение - - - - где XXXXXXXXXXX - id вашего сообщества (полный адрес ссылки можно узнать в браузерной строке, открыв - приложение в вашей группе - - - - - 2. Откройте квиз в группе (вы должны быть администратором группы) - - Справа снизу нажмите на значок "редактировать" В появившемся окне введите id квиза и нажмите - "Привязать". Готово! Квиз привязан к группе - - ID этого квиза - - - - - - - - - - - - - - - Подключить свой домен - - - - - Подключите домен к проекту, чтобы создать несколько квизов на одном домене - - 1. Настройте записи в регистраторе домена - - setBackgroundType("text")}> - Для поддоменов - - setBackgroundType("video")}> - Для доменов - - - - - Создайте для нужного поддомена две cname-записи - - - - - - Как подключить свой домен/поддомен к квизу? Ошибки при подключении домена - - - - - 2. Укажите домен и сохраните квиз - - - - - - - - } - label="Password" - /> - - - - - - Привязка домена и обновление DNS записей может занять до 48 часов - - - - - - - - ); + ) } + + + + +// export default function InstallQuiz() { + +// const [display, setDisplay] = React.useState("1"); +// const handleChange = (event: SelectChangeEvent) => { +// setDisplay(event.target.value); +// }; + +// const [openVk, setOpenVk] = React.useState(false); +// const handleOpenVk = () => setOpenVk(true); +// const handleCloseVk = () => setOpenVk(false); + +// const [openDom, setOpenDom] = React.useState(false); +// const handleOpenDom = () => setOpenDom(true); +// const handleCloseDom = () => setOpenDom(false); + +// const [backgroundType, setBackgroundType] = useState("text"); + +// const theme = useTheme(); + +// return ( +// <> +// +// +// +// +// Ссылка на квиз + +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + +// Не опубликован +// +// +// +// +// +// Вконтакте +// + +// Для публикации сниппета на стене группы, призывающего пройти тест. +// +// Подключить +// +// +// +// +// +// Свой домен +// +// Подключите свой домен, если хотите, чтобы квиз открывался по вашей ссылке. +// +// Подключить +// +// +// +// +// +// +// Установка квизов на сайте +// +// +// Способ установки +// + +// +// {buttonInstall.map((e, i) => ( +// {}} +// sx={{ +// display: "flex", +// flexDirection: "column", +// justifyContent: "start", +// alignItems: "start", +// maxWidth: "205px", +// gap: "15px", +// }} +// > +// +// {e.title} +// +// {e.text} +// +// +// ))} +// +// +// +// +// +// +// +// +// +// +// +// + +// +// +// +// Добавить квиз в группу ВК +// +// +// +// 1. Добавьте приложение в сообщество +// +// +// Для публикации сниппета на стене, призывающего пройти тест, вставьте в новую запись ссылку на приложение +// +// +// +// где XXXXXXXXXXX - id вашего сообщества (полный адрес ссылки можно узнать в браузерной строке, открыв +// приложение в вашей группе +// +// + +// +// 2. Откройте квиз в группе (вы должны быть администратором группы) +// +// Справа снизу нажмите на значок "редактировать" В появившемся окне введите id квиза и нажмите +// "Привязать". Готово! Квиз привязан к группе +// +// ID этого квиза +// +// + +// +// +// +// +// +// +// + +// +// +// +// Подключить свой домен +// +// +// +// +// Подключите домен к проекту, чтобы создать несколько квизов на одном домене +// +// 1. Настройте записи в регистраторе домена +// +// setBackgroundType("text")}> +// Для поддоменов +// +// setBackgroundType("video")}> +// Для доменов +// +// + +// +// Создайте для нужного поддомена две cname-записи +// +// + +// +// +// Как подключить свой домен/поддомен к квизу? Ошибки при подключении домена +// +// + +// +// 2. Укажите домен и сохраните квиз + +// +// +// +// +// +// +// } +// label="Password" +// /> +// +// + +// +// +// Привязка домена и обновление DNS записей может занять до 48 часов +// +// +// +// +// +// +// +// +// ); +// } + +const buttonInstall: { icon: string; title: string; text: string }[] = [ + { + icon: OnButton, + title: "По кнопке", + text: "Конструктор кнопки или собственная кнопка", + }, + { icon: Bunner, title: "Баннером", text: "Сбоку или на всю ширину экрана" }, + { + icon: InBidySite, + title: "В тело сайта", + text: "Задайте свои размеры и встройте в сайт", + }, + { + icon: AutoOpen, + title: "Автооткрытие", + text: "Автооткрытие поп-ап на сайте", + }, + { + icon: WidgetImg, + title: "Виджет", + text: "Сбоку страницы как консультант", + }, +]; \ No newline at end of file diff --git a/src/pages/ViewPublicationPage/Question.tsx b/src/pages/ViewPublicationPage/Question.tsx index a0e9128a..d46d7760 100644 --- a/src/pages/ViewPublicationPage/Question.tsx +++ b/src/pages/ViewPublicationPage/Question.tsx @@ -98,7 +98,7 @@ export const Question = ({ questions }: QuestionProps) => { /> )} {showResultForm && quiz?.config.resultInfo.when === "after" && ( - Date: Mon, 18 Dec 2023 01:34:22 +0300 Subject: [PATCH 4/5] =?UTF-8?q?=D0=BA=D0=BE=D0=BF=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=BA=D0=B2=D0=B8=D0=B7=20=D0=B2=20=D0=B1?= =?UTF-8?q?=D1=83=D1=84=D0=B5=D1=80,=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA?= =?UTF-8?q?=D0=B8=20=D1=82=D0=B5=D1=81=D1=82=D0=B0=20=D0=B8=20=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D1=80=D1=82=20=D1=81=D1=82=D0=BE=D0=BF=20=D0=B8=20=D0=BC?= =?UTF-8?q?=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=20=D0=B4=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/InstallQuiz/InstallQuiz.tsx | 18 +++- .../BranchingQuestionsModal/index.tsx | 3 +- src/pages/Questions/ButtonsOptions.tsx | 1 + src/pages/Questions/ButtonsOptionsAndPict.tsx | 1 + src/pages/Questions/QuestionsPage.tsx | 2 +- src/pages/startPage/EditPage.tsx | 86 ++++++++++++------- src/ui_kit/Header/Header.tsx | 10 --- src/ui_kit/MenuItem.tsx | 4 +- src/ui_kit/Sidebar.tsx | 4 + 9 files changed, 82 insertions(+), 47 deletions(-) diff --git a/src/pages/InstallQuiz/InstallQuiz.tsx b/src/pages/InstallQuiz/InstallQuiz.tsx index 9daaad9c..b2a9a984 100644 --- a/src/pages/InstallQuiz/InstallQuiz.tsx +++ b/src/pages/InstallQuiz/InstallQuiz.tsx @@ -67,6 +67,13 @@ export default function InstallQuiz() { const theme = useTheme(); + + const CopyLink = () => { + let text = document.getElementById("inputLink"); + text.select(); + document.execCommand("copy"); + } + return ( <> @@ -199,7 +206,8 @@ export default function InstallQuiz() { - + + + + diff --git a/src/pages/Questions/ButtonsOptions.tsx b/src/pages/Questions/ButtonsOptions.tsx index 3e4cd088..a3d015db 100644 --- a/src/pages/Questions/ButtonsOptions.tsx +++ b/src/pages/Questions/ButtonsOptions.tsx @@ -232,6 +232,7 @@ export default function ButtonsOptions({ // myFunc(question); }} sx={{ + display: quiz.config.type === "form" ? "none" : "flex", backgroundColor: switchState === value ? theme.palette.brightPurple.main diff --git a/src/pages/Questions/ButtonsOptionsAndPict.tsx b/src/pages/Questions/ButtonsOptionsAndPict.tsx index a486a170..4b5528c4 100644 --- a/src/pages/Questions/ButtonsOptionsAndPict.tsx +++ b/src/pages/Questions/ButtonsOptionsAndPict.tsx @@ -259,6 +259,7 @@ export default function ButtonsOptionsAndPict({ updateDesireToOpenABranchingModal(question.content.id); }} sx={{ + display: quiz.config.type === "form" ? "none" : "flex", height: "30px", maxWidth: "103px", minWidth: isIconMobile ? "30px" : "64px", diff --git a/src/pages/Questions/QuestionsPage.tsx b/src/pages/Questions/QuestionsPage.tsx index e1593a9f..61839166 100755 --- a/src/pages/Questions/QuestionsPage.tsx +++ b/src/pages/Questions/QuestionsPage.tsx @@ -70,7 +70,7 @@ export default function QuestionsPage() { sx={{ position: "fixed", left: isMobile ? "20px" : "250px", - bottom: isMobile ? "140px" : "20px", + bottom: "140px", }} data-cy="create-question" > diff --git a/src/pages/startPage/EditPage.tsx b/src/pages/startPage/EditPage.tsx index 8948663f..ca8835f7 100755 --- a/src/pages/startPage/EditPage.tsx +++ b/src/pages/startPage/EditPage.tsx @@ -16,7 +16,7 @@ import { useMediaQuery, useTheme, } from "@mui/material"; -import { decrementCurrentStep, resetEditConfig, setQuizes } from "@root/quizes/actions"; +import {decrementCurrentStep, resetEditConfig, setQuizes, updateQuiz} from "@root/quizes/actions"; import { useCurrentQuiz } from "@root/quizes/hooks"; import { useQuizStore } from "@root/quizes/store"; import CustomAvatar from "@ui_kit/Header/Avatar"; @@ -27,7 +27,7 @@ import Stepper from "@ui_kit/Stepper"; import SwitchStepPages from "@ui_kit/switchStepPages"; import { isAxiosError } from "axios"; import { enqueueSnackbar } from "notistack"; -import { useEffect, useState } from "react"; +import React, { useEffect, useState } from "react"; import { Link, useNavigate } from "react-router-dom"; import useSWR from "swr"; import { SidebarMobile } from "./Sidebar/SidebarMobile"; @@ -64,6 +64,7 @@ export default function EditPage() { const isMobile = useMediaQuery(theme.breakpoints.down(660)); const [mobileSidebar, setMobileSidebar] = useState(false); const quizConfig = quiz?.config; + const disableTest = quiz === undefined ? true : (quiz.config.type === null) useEffect(() => { if (editQuizId === null) navigate("/list"); @@ -184,18 +185,6 @@ export default function EditPage() { gap: "15px", }} > - - - )} - {isTablet && ( - {[1, 2].includes(currentStep) && !openBranchingPanel && ( + {[1].includes(currentStep) && !openBranchingPanel && quizConfig.type !== "form" && ( )} - + {disableTest ? ( + + ) : ( + + + + )} + - + variant="outlined" + sx={{ + fontSize: "14px", + lineHeight: "18px", + height: "34px", + border: `1px solid ${theme.palette.brightPurple.main}`, + backgroundColor: quiz?.status === "start" ? theme.palette.brightPurple.main : "transparent", + color: quiz?.status === "start" ? "#FFFFFF" : theme.palette.brightPurple.main, + }} + onClick={() => { + updateQuiz( + quiz?.id, (state) => { + state.status = quiz?.status === "start" ? "stop" : "start" + } + ) + }} + >{quiz?.status === "start" ? "Стоп" : "Старт"} - )} ); diff --git a/src/ui_kit/Header/Header.tsx b/src/ui_kit/Header/Header.tsx index 8a983181..66163389 100755 --- a/src/ui_kit/Header/Header.tsx +++ b/src/ui_kit/Header/Header.tsx @@ -92,16 +92,6 @@ export default function Header() { gap: "15px", }} > - diff --git a/src/ui_kit/MenuItem.tsx b/src/ui_kit/MenuItem.tsx index 3aec7c9c..46d8c2e7 100755 --- a/src/ui_kit/MenuItem.tsx +++ b/src/ui_kit/MenuItem.tsx @@ -5,11 +5,12 @@ interface Props { icon: any; text: string; isActive?: boolean; + disabled?: boolean; isCollapsed: boolean; onClick: () => void; } -export default function MenuItem({ icon, text, isActive = false, isCollapsed, onClick }: Props) { +export default function MenuItem({ icon, text, isActive = false, isCollapsed, onClick, disabled = false }: Props) { const theme = useTheme(); return ( @@ -22,6 +23,7 @@ export default function MenuItem({ icon, text, isActive = false, isCollapsed, on > state.currentStep); + const quiz = useCurrentQuiz(); + const handleMenuCollapseToggle = () => setIsMenuCollapsed((prev) => !prev); @@ -94,6 +97,7 @@ export default function Sidebar() { text={menuItem.sidebarText} isCollapsed={isMenuCollapsed} isActive={currentStep === index} + disabled={index===0 ? false : quiz===undefined ? true : (quiz?.config.type === null)} icon={ Date: Mon, 18 Dec 2023 02:29:31 +0300 Subject: [PATCH 5/5] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B8-=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B9=D0=BA=D0=B8=20=D0=B8=D0=B7=20=D0=B8=D0=BD=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=BB=D0=BB=D0=B0=20=D0=BE=D0=BF=D1=80=D0=BE=D1=81?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=B0,=20=D1=84=D1=83=D1=82=D0=B5=D1=80=20?= =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D1=8F=D0=B5=D1=82=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B7=D1=83=D0=BB=D1=82=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/InstallQuiz/InstallQuiz.tsx | 10 ---------- src/pages/ViewPublicationPage/ApologyPage.tsx | 5 +++-- src/pages/ViewPublicationPage/Footer.tsx | 2 ++ src/pages/ViewPublicationPage/Question.tsx | 2 +- src/pages/createQuize/FirstQuiz.tsx | 6 +++++- src/pages/createQuize/MyQuizzesFull.tsx | 6 +++++- src/pages/startPage/EditPage.tsx | 3 ++- 7 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/pages/InstallQuiz/InstallQuiz.tsx b/src/pages/InstallQuiz/InstallQuiz.tsx index b2a9a984..fe8d086f 100644 --- a/src/pages/InstallQuiz/InstallQuiz.tsx +++ b/src/pages/InstallQuiz/InstallQuiz.tsx @@ -247,16 +247,6 @@ export default function InstallQuiz() { Не опубликован - - ) diff --git a/src/pages/ViewPublicationPage/ApologyPage.tsx b/src/pages/ViewPublicationPage/ApologyPage.tsx index 658abd54..ac275375 100644 --- a/src/pages/ViewPublicationPage/ApologyPage.tsx +++ b/src/pages/ViewPublicationPage/ApologyPage.tsx @@ -1,12 +1,13 @@ import { Box, Typography } from "@mui/material"; -export const ApologyPage = (message: string) => { +export const ApologyPage = ({message}:{message: string}) => { return ( id === question.id); const nextQuestion = questions[questionIndex + 1]; + console.log("questionIndex ", questionIndex); console.log(nextQuestion); + console.log(questions); if (nextQuestion && nextQuestion.type !== "result") { console.log("следующий вопрос результирующий ", nextQuestion.type === "result"); setCurrentQuestion(nextQuestion); diff --git a/src/pages/ViewPublicationPage/Question.tsx b/src/pages/ViewPublicationPage/Question.tsx index d46d7760..a0e9128a 100644 --- a/src/pages/ViewPublicationPage/Question.tsx +++ b/src/pages/ViewPublicationPage/Question.tsx @@ -98,7 +98,7 @@ export const Question = ({ questions }: QuestionProps) => { /> )} {showResultForm && quiz?.config.resultInfo.when === "after" && ( - createQuiz(navigate)} + onClick={() => { + resetEditConfig() + createQuiz(navigate) + }} > Создать + diff --git a/src/pages/createQuize/MyQuizzesFull.tsx b/src/pages/createQuize/MyQuizzesFull.tsx index 2254f08e..1ccf6a6e 100644 --- a/src/pages/createQuize/MyQuizzesFull.tsx +++ b/src/pages/createQuize/MyQuizzesFull.tsx @@ -4,6 +4,7 @@ import { useQuizes } from "@root/quizes/hooks"; import SectionWrapper from "@ui_kit/SectionWrapper"; import React from "react"; import { useNavigate } from "react-router-dom"; +import { resetEditConfig } from "@root/quizes/actions"; import ComplexNavText from "./ComplexNavText"; import FirstQuiz from "./FirstQuiz"; import QuizCard from "./QuizCard"; @@ -42,7 +43,10 @@ export default function MyQuizzesFull({ outerContainerSx: sx, children }: Props) padding: isMobile ? "10px" : "10px 47px", minWidth: "44px", }} - onClick={() => createQuiz(navigate)} + onClick={() => { + resetEditConfig(); + createQuiz(navigate) + }} data-cy="create-quiz" > {isMobile ? "+" : "Создать +"} diff --git a/src/pages/startPage/EditPage.tsx b/src/pages/startPage/EditPage.tsx index ca8835f7..a737756b 100755 --- a/src/pages/startPage/EditPage.tsx +++ b/src/pages/startPage/EditPage.tsx @@ -27,7 +27,7 @@ import Stepper from "@ui_kit/Stepper"; import SwitchStepPages from "@ui_kit/switchStepPages"; import { isAxiosError } from "axios"; import { enqueueSnackbar } from "notistack"; -import React, { useEffect, useState } from "react"; +import React, { useEffect, useLayoutEffect, useState } from "react"; import { Link, useNavigate } from "react-router-dom"; import useSWR from "swr"; import { SidebarMobile } from "./Sidebar/SidebarMobile"; @@ -77,6 +77,7 @@ export default function EditPage() { }, [] ); + console.log(currentStep) return ( <>