Merge branch 'copy-quiz' into 'dev'

Copy quiz

See merge request frontend/squiz!304
This commit is contained in:
Nastya 2024-05-07 18:56:10 +00:00
commit f7b295551f
6 changed files with 31 additions and 28 deletions

@ -114,13 +114,13 @@ export interface QuizConfig {
law?: string;
};
meta: string;
yandexMetricNumber: number | undefined;
vkMetricNumber: number | undefined;
yandexMetricsNumber: number | undefined;
vkMetricsNumber: number | undefined;
}
export enum QuizMetricType {
yandex = "yandexMetricNumber",
vk = "vkMetricNumber",
yandex = "yandexMetricsNumber",
vk = "vkMetricsNumber",
}
export type FormContactFieldName =
@ -228,6 +228,6 @@ export const defaultQuizConfig: QuizConfig = {
button: "",
},
meta: "",
yandexMetricNumber: undefined,
vkMetricNumber: undefined,
yandexMetricsNumber: undefined,
vkMetricsNumber: undefined,
};

@ -142,7 +142,7 @@ export default function QuizInstallationCard() {
id="outlined-multiline-static"
multiline
rows={9}
value={`<div id="idpena"></div> <script type="module"> import widget from "https://${isTestServer ? "s." : ""}hbpn.link/export/pub.js"; widget.create({ selector: "idpena", quizId: ${quiz.qid} }) </script>`}
value={`<div id="idpena"></div> <script type="module"> import widget from "https://${isTestServer ? "s." : ""}hbpn.link/export/pub.js"; widget.create({ selector: "idpena", quizId: "${quiz.qid}" }) </script>`}
sx={{
"& .MuiInputBase-root": {
maxWidth: "520px",
@ -158,11 +158,11 @@ export default function QuizInstallationCard() {
<IconButton
edge="end"
sx={{ marginTop: "22px" }}
// onClick={() => navigator.clipboard.writeText( // TODO
// document.getElementById(
// "outlined-multiline-static"
// ).value
// )}
onClick={() => navigator.clipboard.writeText( // TODO
document.getElementById(
"outlined-multiline-static"
).value
)}
>
<CopyIcon
color={"#ffffff"}

@ -21,9 +21,9 @@ export default function ViewPublicationPage() {
if (!quizId) return null;
const quiz = quizes?.find((quiz) => quiz.qid === quizId);
const yandexMetricNumber = quiz?.config.yandexMetricNumber;
const yandexMetricsNumber = quiz?.config.yandexMetricsNumber;
useYandexMetrics(yandexMetricNumber);
useYandexMetrics(yandexMetricsNumber);
const {
data: rawQuestions,

@ -13,6 +13,7 @@ import {
resetEditConfig,
updateQuiz,
} from "@root/quizes/actions";
import { mutate } from "swr";
import { useQuizes } from "@root/quizes/hooks";
import SectionWrapper from "@ui_kit/SectionWrapper";
import React from "react";
@ -32,19 +33,16 @@ export default function MyQuizzesFull({
outerContainerSx: sx,
children,
}: Props) {
const { quizes, isValidating } = useQuizes();
const { quizes } = useQuizes();
const navigate = useNavigate();
const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down(500));
const onClickCopy = (value: string) => {
copyQuiz(value);
mutate("quizes");
};
if (isValidating) {
return <HeaderFull isRequest={false} />;
}
return (
<>
<HeaderFull isRequest={false} />

@ -250,11 +250,16 @@ export const copyQuiz = async (quizId: string) =>
try {
const { updated } = await quizApi.copy(quiz.backendId);
let newQuiz = { ...quiz, id: updated };
let newQuiz: Quiz = {
...quiz,
id: String(updated),
session_count: 0,
passed_count: 0,
};
setProducedState(
(state) => {
state.quizes.unshift(quiz);
state.quizes.unshift(newQuiz);
},
{
type: "addQuiz",

@ -1,11 +1,11 @@
import { useEffect } from "react";
export const useYandexMetrics = (yandexMetricNumber: number | undefined) => {
export const useYandexMetrics = (yandexMetricsNumber: number | undefined) => {
useEffect(() => {
if (
yandexMetricNumber &&
typeof yandexMetricNumber === "number" &&
!Number.isNaN(yandexMetricNumber)
yandexMetricsNumber &&
typeof yandexMetricsNumber === "number" &&
!Number.isNaN(yandexMetricsNumber)
) {
const script = document.createElement("script");
script.type = "text/javascript";
@ -16,7 +16,7 @@ export const useYandexMetrics = (yandexMetricNumber: number | undefined) => {
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(${yandexMetricNumber}, "init", {
ym(${yandexMetricsNumber}, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
@ -26,8 +26,8 @@ export const useYandexMetrics = (yandexMetricNumber: number | undefined) => {
document.body.appendChild(script);
const noscript = document.createElement("noscript");
noscript.innerHTML = `<div><img src="https://mc.yandex.ru/watch/${yandexMetricNumber}" style="position:absolute; left:-9999px;" alt="" /></div>`;
noscript.innerHTML = `<div><img src="https://mc.yandex.ru/watch/${yandexMetricsNumber}" style="position:absolute; left:-9999px;" alt="" /></div>`;
document.body.appendChild(noscript);
}
}, [yandexMetricNumber]);
}, [yandexMetricsNumber]);
};