Merge branch 'add-quiz-copy-functionality' into dev
This commit is contained in:
commit
0831da8403
@ -7,12 +7,16 @@ import {
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from "@mui/material";
|
||||
import { createQuiz, updateQuiz } from "@root/quizes/actions";
|
||||
import {
|
||||
copyQuiz,
|
||||
createQuiz,
|
||||
resetEditConfig,
|
||||
updateQuiz,
|
||||
} from "@root/quizes/actions";
|
||||
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 FirstQuiz from "./FirstQuiz";
|
||||
import QuizCard from "./QuizCard";
|
||||
import HeaderFull from "@ui_kit/Header/HeaderFull";
|
||||
@ -32,6 +36,10 @@ export default function MyQuizzesFull({
|
||||
const theme = useTheme();
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(500));
|
||||
|
||||
const onClickCopy = (value: string) => {
|
||||
copyQuiz(value);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<HeaderFull isRequest={false} />
|
||||
@ -98,6 +106,7 @@ export default function MyQuizzesFull({
|
||||
).toFixed(1)
|
||||
: 0
|
||||
}
|
||||
onClickCopy={onClickCopy}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
import { useState, useRef, useLayoutEffect } from "react";
|
||||
import ChartIcon from "@icons/ChartIcon";
|
||||
import React, { useLayoutEffect, useRef, useState } from "react";
|
||||
import LinkIcon from "@icons/LinkIcon";
|
||||
import PencilIcon from "@icons/PencilIcon";
|
||||
import { Quiz } from "@model/quiz/quiz";
|
||||
@ -8,10 +7,10 @@ import {
|
||||
Box,
|
||||
Button,
|
||||
IconButton,
|
||||
Popover,
|
||||
Typography,
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
Popover,
|
||||
} from "@mui/material";
|
||||
import { deleteQuiz, setEditQuizId } from "@root/quizes/actions";
|
||||
import { Link, useNavigate } from "react-router-dom";
|
||||
@ -19,12 +18,14 @@ import { inCart } from "../../pages/Tariffs/Tariffs";
|
||||
import { makeRequest } from "@frontend/kitui";
|
||||
import { enqueueSnackbar } from "notistack";
|
||||
import { useDomainDefine } from "@utils/hooks/useDomainDefine";
|
||||
import CopyIcon from "@icons/CopyIcon";
|
||||
|
||||
interface Props {
|
||||
quiz: Quiz;
|
||||
openCount?: number;
|
||||
applicationCount?: number;
|
||||
conversionPercent?: number;
|
||||
onClickCopy: (value: string) => void;
|
||||
}
|
||||
|
||||
export default function QuizCard({
|
||||
@ -32,6 +33,7 @@ export default function QuizCard({
|
||||
openCount = 0,
|
||||
applicationCount = 0,
|
||||
conversionPercent = 0,
|
||||
onClickCopy,
|
||||
}: Props) {
|
||||
const theme = useTheme();
|
||||
const isMobile = useMediaQuery(theme.breakpoints.down(600));
|
||||
@ -196,6 +198,15 @@ export default function QuizCard({
|
||||
},
|
||||
}}
|
||||
/> */}
|
||||
<IconButton
|
||||
onClick={() => onClickCopy(quiz.id)}
|
||||
sx={{ borderRadius: "6px", padding: "0 4px" }}
|
||||
>
|
||||
<CopyIcon
|
||||
color={theme.palette.brightPurple.main}
|
||||
bgcolor={"#EEE4FC"}
|
||||
/>
|
||||
</IconButton>
|
||||
<IconButton
|
||||
ref={subMenuRef}
|
||||
sx={{
|
||||
|
||||
@ -2,7 +2,7 @@ import { quizApi } from "@api/quiz";
|
||||
import { devlog, getMessageFromFetchError } from "@frontend/kitui";
|
||||
import { quizToEditQuizRequest } from "@model/quiz/edit";
|
||||
import { Quiz, RawQuiz, rawQuizToQuiz } from "@model/quiz/quiz";
|
||||
import { QuizConfig, maxQuizSetupSteps } from "@model/quizSettings";
|
||||
import { maxQuizSetupSteps, QuizConfig } from "@model/quizSettings";
|
||||
import { createUntypedQuestion, updateQuestion } from "@root/questions/actions";
|
||||
import { useQuestionsStore } from "@root/questions/store";
|
||||
import { produce } from "immer";
|
||||
@ -243,7 +243,31 @@ export const updateRootContentId = (quizId: string, id: string) => {
|
||||
});
|
||||
};
|
||||
|
||||
// TODO copy quiz
|
||||
export const copyQuiz = async (quizId: string) =>
|
||||
requestQueue.enqueue(`copyQuiz`, async () => {
|
||||
const quiz = useQuizStore.getState().quizes.find((q) => q.id === quizId);
|
||||
if (!quiz) return;
|
||||
|
||||
try {
|
||||
const { updated } = await quizApi.copy(quiz.backendId);
|
||||
let newQuiz = { ...quiz, id: updated };
|
||||
|
||||
setProducedState(
|
||||
(state) => {
|
||||
state.quizes.unshift(quiz);
|
||||
},
|
||||
{
|
||||
type: "addQuiz",
|
||||
quiz,
|
||||
},
|
||||
);
|
||||
} catch (error) {
|
||||
devlog("Error copying quiz", error);
|
||||
|
||||
const message = getMessageFromFetchError(error) ?? "";
|
||||
enqueueSnackbar(`Не удалось скопировать quiz. ${message}`);
|
||||
}
|
||||
});
|
||||
|
||||
export const uploadQuizImage = async (
|
||||
quizId: string,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user