2024-01-30 16:49:33 +00:00
|
|
|
import { AnyTypedQuizQuestion } from "@model/questionTypes/shared";
|
|
|
|
import { QuizSettings } from "@model/settingsData";
|
|
|
|
|
|
|
|
export interface GetQuizDataResponse {
|
2024-05-31 16:41:18 +00:00
|
|
|
cnt: number;
|
2025-06-18 08:01:08 +00:00
|
|
|
settings?: {
|
2024-05-31 16:41:18 +00:00
|
|
|
fp: boolean;
|
|
|
|
rep: boolean;
|
|
|
|
name: string;
|
|
|
|
cfg: string;
|
|
|
|
lim: number;
|
|
|
|
due: number;
|
|
|
|
delay: number;
|
|
|
|
pausable: boolean;
|
2025-04-22 19:29:34 +00:00
|
|
|
status: "start" | "stop" | "ai";
|
2024-05-31 16:41:18 +00:00
|
|
|
};
|
|
|
|
items: {
|
|
|
|
id: number;
|
|
|
|
title: string;
|
|
|
|
desc: string;
|
|
|
|
typ: string;
|
|
|
|
req: boolean;
|
|
|
|
p: number;
|
|
|
|
c: string;
|
|
|
|
}[];
|
|
|
|
show_badge: boolean;
|
2024-01-30 16:49:33 +00:00
|
|
|
}
|
|
|
|
|
2024-02-08 13:42:31 +00:00
|
|
|
export function parseQuizData(quizDataResponse: GetQuizDataResponse): Omit<QuizSettings, "recentlyCompleted"> {
|
2025-07-07 00:28:51 +00:00
|
|
|
console.log(quizDataResponse);
|
2025-06-18 08:01:08 +00:00
|
|
|
const readyData = {
|
|
|
|
cnt: quizDataResponse.cnt,
|
|
|
|
show_badge: quizDataResponse.show_badge,
|
|
|
|
settings: {} as QuizSettings["settings"],
|
|
|
|
questions: [] as QuizSettings["questions"],
|
|
|
|
} as QuizSettings;
|
|
|
|
|
2024-05-31 16:41:18 +00:00
|
|
|
const items: QuizSettings["questions"] = quizDataResponse.items.map((item) => {
|
2025-07-07 00:28:51 +00:00
|
|
|
const content = item.c
|
|
|
|
? JSON.parse(item.c)
|
|
|
|
: {
|
|
|
|
hint: { text: "", video: "" },
|
|
|
|
rule: { children: [], main: [], parentId: "", default: "" },
|
|
|
|
back: "",
|
|
|
|
originalBack: "",
|
|
|
|
autofill: false,
|
|
|
|
placeholder: "",
|
|
|
|
innerNameCheck: false,
|
|
|
|
innerName: "",
|
|
|
|
required: false,
|
|
|
|
answerType: "single",
|
|
|
|
onlyNumbers: false,
|
|
|
|
};
|
|
|
|
if (item.c) content.id = Math.floor(Math.random() * 9999999999) + 1;
|
2024-05-31 16:41:18 +00:00
|
|
|
return {
|
|
|
|
description: item.desc,
|
|
|
|
id: item.id,
|
|
|
|
page: item.p,
|
|
|
|
required: item.req,
|
|
|
|
title: item.title,
|
|
|
|
type: item.typ,
|
|
|
|
content,
|
|
|
|
} as unknown as AnyTypedQuizQuestion;
|
|
|
|
});
|
2024-01-30 16:49:33 +00:00
|
|
|
|
2025-06-18 08:01:08 +00:00
|
|
|
readyData.questions = items;
|
|
|
|
|
|
|
|
if (quizDataResponse?.settings !== undefined) {
|
2025-07-07 00:28:51 +00:00
|
|
|
console.log("попытка парсануть сеттингс", quizDataResponse.settings);
|
2025-06-18 08:01:08 +00:00
|
|
|
readyData.settings = {
|
|
|
|
fp: quizDataResponse.settings.fp,
|
|
|
|
rep: quizDataResponse.settings.rep,
|
|
|
|
name: quizDataResponse.settings.name,
|
|
|
|
cfg: JSON.parse(quizDataResponse?.settings.cfg),
|
|
|
|
lim: quizDataResponse.settings.lim,
|
|
|
|
due: quizDataResponse.settings.due,
|
|
|
|
delay: quizDataResponse.settings.delay,
|
|
|
|
pausable: quizDataResponse.settings.pausable,
|
|
|
|
status: quizDataResponse.settings.status,
|
|
|
|
};
|
|
|
|
}
|
2024-01-30 16:49:33 +00:00
|
|
|
|
2025-06-18 08:01:08 +00:00
|
|
|
return readyData;
|
2024-01-30 16:49:33 +00:00
|
|
|
}
|