diff --git a/src/pages/ViewPublicationPage/StartPageViewPublication.tsx b/src/pages/ViewPublicationPage/StartPageViewPublication.tsx index 9c84da9f..9c6a731e 100644 --- a/src/pages/ViewPublicationPage/StartPageViewPublication.tsx +++ b/src/pages/ViewPublicationPage/StartPageViewPublication.tsx @@ -1,21 +1,14 @@ -import { useParams } from "react-router-dom"; import { - Box, - Button, - Typography, - useTheme, - useMediaQuery, + Box, + Button, + Typography, + useMediaQuery, + useTheme, } from "@mui/material"; -import useSWR from "swr"; -import { isAxiosError } from "axios"; -import { enqueueSnackbar } from "notistack"; -import { devlog } from "@frontend/kitui"; +import { useParams } from "react-router-dom"; -import { quizApi } from "@api/quiz"; -import { useQuizStore } from "@root/quizes/store"; -import { useQuestions } from "@root/questions/hooks"; -import { setQuizes } from "@root/quizes/actions"; +import { useQuizes } from "@root/quizes/hooks"; type StartPageViewPublicationProps = { setVisualStartPage: (bool: boolean) => void; @@ -27,8 +20,7 @@ export const StartPageViewPublication = ({ showNextButton }: StartPageViewPublicationProps) => { const quizId = Number(useParams().quizId); - const { quizes } = useQuizStore(); - const { questions } = useQuestions(); + const { quizes } = useQuizes(); const theme = useTheme(); const isTablet = useMediaQuery(theme.breakpoints.down(630)); const quiz = quizes.find(({ backendId }) => quizId === backendId); @@ -36,18 +28,6 @@ export const StartPageViewPublication = ({ quiz?.config.startpage.background.desktop || quiz?.config.startpage.background.video; - useSWR("quizes", () => quizApi.getList(), { - onSuccess: setQuizes, - onError: (error: unknown) => { - const message = isAxiosError(error) - ? error.response?.data ?? "" - : ""; - - devlog("Error getting quiz list", error); - enqueueSnackbar(`Не удалось получить квизы. ${message}`); - }, - }); - return ( quizApi.getList(), { - onSuccess: setQuizes, - onError: error => { - const message = isAxiosError(error) ? (error.response?.data ?? "") : ""; - - devlog("Error getting quiz list", error); - enqueueSnackbar(`Не удалось получить квизы. ${message}`); - }, - }); - const quizArray = useQuizStore(state => state.quizes); + const { quizes } = useQuizes(); const navigate = useNavigate(); const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down(500)); return ( <> - {quizArray.length === 0 ? ( + {quizes.length === 0 ? ( ) : ( @@ -83,7 +69,7 @@ export default function MyQuizzesFull({ mb: "60px", }} > - {quizArray.map(quiz => ( + {quizes.map(quiz => ( quizApi.getList(), { - onSuccess: setQuizes, - onError: error => { - const message = isAxiosError(error) ? (error.response?.data ?? "") : ""; - - devlog("Error getting quiz list", error); - enqueueSnackbar(`Не удалось получить квизы. ${message}`); - }, - }); - - // if (isLoading && !questions) return Загрузка вопросов...; const theme = useTheme(); const navigate = useNavigate(); @@ -58,7 +39,6 @@ export default function EditPage() { const [mobileSidebar, setMobileSidebar] = useState(false); const {openBranchingPanel} = useQuestionsStore.getState() const quizConfig = quiz?.config; - const { questions, isLoading } = useQuestions(); useEffect(() => { if (editQuizId === null) navigate("/list"); diff --git a/src/stores/quizes/hooks.ts b/src/stores/quizes/hooks.ts index e357e20f..8df20dd4 100644 --- a/src/stores/quizes/hooks.ts +++ b/src/stores/quizes/hooks.ts @@ -1,9 +1,32 @@ +import useSWR from "swr"; import { useQuizStore } from "./store"; +import { quizApi } from "@api/quiz"; +import { setQuizes } from "./actions"; +import { isAxiosError } from "axios"; +import { devlog } from "@frontend/kitui"; +import { enqueueSnackbar } from "notistack"; +export function useQuizes() { + const { isLoading, error, isValidating } = useSWR("quizes", () => quizApi.getList(), { + onSuccess: setQuizes, + onError: (error: unknown) => { + const message = isAxiosError(error) + ? error.response?.data ?? "" + : ""; + + devlog("Error getting quiz list", error); + enqueueSnackbar("Не удалось получить квизы"); + }, + }); + const quizes = useQuizStore(state => state.quizes); + + return { quizes, isLoading, error, isValidating }; +} + export function useCurrentQuiz() { const quizId = useQuizStore(state => state.editQuizId); - const quizes = useQuizStore(state => state.quizes); + const { quizes } = useQuizes(); const quiz = quizes.find(q => q.backendId === quizId);