frontPanel/src/pages/ViewPublicationPage.tsx

89 lines
2.3 KiB
TypeScript
Raw Normal View History

import { questionApi } from "@api/question";
import { devlog } from "@frontend/kitui";
import { QuizAnswerer } from "@frontend/squzanswerer";
import { rawQuestionToQuestion } from "@model/question/question";
import { Box } from "@mui/material";
import { useQuizes } from "@root/quizes/hooks";
import { isAxiosError } from "axios";
import { enqueueSnackbar } from "notistack";
import { useParams } from "react-router-dom";
import useSWR from "swr";
export default function ViewPublicationPage() {
const quizId = useParams().quizId;
const {
quizes,
error: quizesError,
isLoading: quizesIsLoading,
} = useQuizes();
if (!quizId) return null;
const quiz = quizes?.find((quiz) => quiz.qid === quizId);
const {
data: rawQuestions,
isLoading: questionsIsLoading,
error: questionsError,
} = useSWR(
["questions", quiz?.backendId],
([, id]) => questionApi.getList({ quiz_id: id }),
{
onError: (error) => {
const message = isAxiosError<string>(error)
? error.response?.data ?? ""
: "";
devlog("Error getting question list", error);
enqueueSnackbar(`Не удалось получить вопросы. ${message}`);
},
},
);
if (quizesError) {
2024-04-16 20:23:42 +00:00
console.error(`Error fetching quiz ${quizId}`, quizesError);
return null;
}
2024-02-16 16:40:08 +00:00
if (questionsError) {
2024-04-16 20:23:42 +00:00
console.error(`Error fetching questions ${quizId}`, questionsError);
2024-02-16 16:40:08 +00:00
return null;
}
if (quizesIsLoading) return null;
if (questionsIsLoading) return null;
if (!quiz) throw new Error("Quiz not found");
if (!rawQuestions) throw new Error("Questions not found");
const questions = rawQuestions.map(rawQuestionToQuestion);
return (
<Box
sx={{
height: "100dvh",
}}
>
<QuizAnswerer
quizSettings={{
cnt: rawQuestions?.length,
questions,
recentlyCompleted: false,
settings: {
fp: quiz.fingerprinting,
delay: 0,
due: quiz.due_to,
lim: quiz.limit,
name: quiz.name,
pausable: quiz.pausable,
rep: quiz.repeatable,
cfg: quiz.config,
},
2024-04-16 19:31:51 +00:00
show_badge: true,
}}
quizId={quizId}
2024-04-06 17:23:01 +00:00
preview
/>
</Box>
);
}