frontPanel/src/pages/QuizAnswersPage/QuizAnswersPage.tsx

147 lines
4.2 KiB
TypeScript
Raw Normal View History

import { Box, Skeleton, useMediaQuery, useTheme } from "@mui/material";
2024-01-20 10:27:21 +00:00
import HeaderFull from "@ui_kit/Header/HeaderFull";
import SectionWrapper from "@ui_kit/SectionWrapper";
import { FC, useEffect, useState } from "react";
2024-02-20 11:54:08 +00:00
import { PrePaymentModal } from "./PrePaymentModal";
2024-01-21 22:09:26 +00:00
import { FilterModal } from "@ui_kit/Modal/FilterModal/FilterModal";
import { resultApi } from "@api/result";
import { useResultStore } from "@root/results/store";
import { setResults } from "@root/results/actions";
import { useCurrentQuiz } from "@root/quizes/hooks";
import { useQuizStore } from "@root/quizes/store";
2024-02-20 11:54:08 +00:00
import { useUserStore } from "@root/user";
import CustomPagination from "@ui_kit/CustomPagination";
import { parseFilters } from "./helper";
import { QuizSettingsMenu } from "./QuizSettingsMenu";
import { AnswerList } from "./AnswerList";
import { useGetData } from "./useGetData";
2024-01-20 10:27:21 +00:00
const itemsTime = [
"За всё время",
"Сегодня",
"Вчера",
"Последние 7 дней",
"Последние 30 дней",
"Этот месяц",
];
const itemsNews = ["Все заявки", "Новые"];
2024-01-20 10:27:21 +00:00
export const QuizAnswersPage: FC = () => {
const theme = useTheme();
const isTablet = useMediaQuery(theme.breakpoints.down(1000));
2024-01-21 22:09:26 +00:00
const isMobile = useMediaQuery(theme.breakpoints.down(600));
2024-01-21 22:09:26 +00:00
const [filterModalOpen, setFilterModalOpen] = useState<boolean>(false);
const [page, setPage] = useState(1);
const [filterNew, setFilterNew] = useState<string>("Все заявки");
const [filterDate, setFilterDate] = useState<string>("За всё время");
2024-02-20 11:54:08 +00:00
const [prePaymentModalOpen, setPrePaymentModalOpen] =
useState<boolean>(false);
const { userAccount } = useUserStore();
const filterNewHC = (value: string) => {
setFilterNew(value);
};
const filterDateHC = (value: string) => {
setFilterDate(value);
};
const quiz = useCurrentQuiz();
const { editQuizId } = useQuizStore();
2024-02-16 21:19:35 +00:00
const { results, total_count } = useResultStore();
const countPagination = Math.ceil(total_count / 10);
useGetData(filterNew, filterDate);
useEffect(() => {
return setResults([]);
}, []);
2024-02-20 11:54:08 +00:00
useEffect(() => {
2024-02-21 10:26:06 +00:00
if (!userAccount) {
return;
}
if (
!Object.keys(userAccount.privileges || {}).length ||
userAccount.privileges?.[""]?.amount === 0
) {
2024-02-20 11:54:08 +00:00
setPrePaymentModalOpen(true);
2024-02-21 10:26:06 +00:00
return;
2024-02-20 11:54:08 +00:00
}
2024-02-21 10:26:06 +00:00
setPrePaymentModalOpen(false);
2024-02-20 11:54:08 +00:00
}, [userAccount]);
const PaginationHC = async (e, value) => {
setPage(value);
const result = await resultApi.getList(
editQuizId,
value - 1,
parseFilters(filterNew, filterDate),
);
setResults(result);
};
if (quiz === undefined)
return (
<Skeleton sx={{ width: "100vw", height: "100vh", transform: "none" }} />
);
2024-01-20 10:27:21 +00:00
return (
<Box>
<HeaderFull isRequest={true} sx={{ position: "fixed", zIndex: 9 }} />
2024-01-21 22:09:26 +00:00
<SectionWrapper
sx={{ padding: isMobile ? "115px 16px" : "115px 20px 20px" }}
2024-01-21 22:09:26 +00:00
maxWidth="lg"
>
<QuizSettingsMenu
quiz={quiz}
total_count={total_count}
isTablet={isTablet}
filterNew={filterNew}
filterDate={filterDate}
setPrePaymentModalOpen={setPrePaymentModalOpen}
editQuizId={editQuizId}
page={page}
setFilterModalOpen={setFilterModalOpen}
setFilterNew={setFilterNew}
setFilterDate={setFilterDate}
filterNewHC={filterNewHC}
filterDateHC={filterDateHC}
itemsTime={itemsTime}
itemsNews={itemsNews}
/>
<CustomPagination
countPagination={countPagination}
page={page}
onChange={PaginationHC}
/>
<AnswerList
isTablet={isTablet}
results={results}
setPrePaymentModalOpen={setPrePaymentModalOpen}
/>
2024-01-20 10:27:21 +00:00
</SectionWrapper>
2024-01-21 22:09:26 +00:00
<FilterModal
open={filterModalOpen}
handleClose={() => setFilterModalOpen(false)}
filterNew={filterNew}
filterDate={filterDate}
setFilterNew={filterNewHC}
setFilterDate={filterDateHC}
itemsTime={itemsTime}
itemsNews={itemsNews}
2024-01-21 22:09:26 +00:00
/>
2024-02-20 11:54:08 +00:00
<PrePaymentModal
open={prePaymentModalOpen}
setOpen={setPrePaymentModalOpen}
/>
2024-01-20 10:27:21 +00:00
</Box>
);
};