diff --git a/src/pages/QuizAnswersPage/CardAnswer.tsx b/src/pages/QuizAnswersPage/CardAnswer.tsx index d54c133b..918e852f 100644 --- a/src/pages/QuizAnswersPage/CardAnswer.tsx +++ b/src/pages/QuizAnswersPage/CardAnswer.tsx @@ -25,6 +25,7 @@ import { useQuestionsStore } from "@root/questions/store"; import AddressIcon from "@icons/ContactFormIcon/AddressIcon"; import type { AxiosError } from "axios"; +import { DeleteModal } from "./DeleteModal"; interface Props { isNew: boolean; @@ -277,49 +278,14 @@ export const CardAnswer = ({ )} - setOpenDelete(false)}> - - - Вы уверены, что хотите удалить этот результат? - - - - - - - + setOpenDelete(false)} + onClick={() => { + deleteResult(Number(idResult)); + setOpenDelete(false); + }} + /> diff --git a/src/pages/QuizAnswersPage/DeleteModal.tsx b/src/pages/QuizAnswersPage/DeleteModal.tsx index bb828823..c681921d 100644 --- a/src/pages/QuizAnswersPage/DeleteModal.tsx +++ b/src/pages/QuizAnswersPage/DeleteModal.tsx @@ -2,12 +2,13 @@ import { Box, Button, Modal, Typography } from "@mui/material"; interface Props { openDelete: boolean; - setOpenDelete: (open: boolean) => void; + handleClose: () => void; + onClick: () => void; } -export const DeleteModal = ({ openDelete, setOpenDelete }: Props) => { +export const DeleteModal = ({ openDelete, handleClose, onClick }: Props) => { return ( - setOpenDelete(false)}> + { diff --git a/src/pages/QuizAnswersPage/QuizAnswersPage.tsx b/src/pages/QuizAnswersPage/QuizAnswersPage.tsx index facfeed2..eea6574c 100644 --- a/src/pages/QuizAnswersPage/QuizAnswersPage.tsx +++ b/src/pages/QuizAnswersPage/QuizAnswersPage.tsx @@ -1,44 +1,32 @@ import { Box, - Button, - IconButton, Typography, - MenuItem, useTheme, useMediaQuery, Skeleton, - FormControl, - Pagination, } from "@mui/material"; -import { Select } from "../../pages/Questions/Select"; -import moment from "moment"; import HeaderFull from "@ui_kit/Header/HeaderFull"; import SectionWrapper from "@ui_kit/SectionWrapper"; import { FC, useEffect, useState } from "react"; -import { FileExportIcon } from "./icons/FileExporIcon"; -import { UpdateIcon } from "./icons/UpdateIcon"; -import { CheckboxSelect } from "../../ui_kit/CheckboxSelect"; import { CardAnswer } from "./CardAnswer"; -import { FilterIcon } from "./icons/FilterIcon"; import { PrePaymentModal } from "./PrePaymentModal"; import { FilterModal } from "@ui_kit/Modal/FilterModal/FilterModal"; -import { ExportContactsModal } from "@ui_kit/Modal/ExportContactsModal"; import { resultApi } from "@api/result"; import { useResultStore } from "@root/results/store"; -import { setResults } from "@root/results/actions"; +import { ExportResults, setResults } from "@root/results/actions"; import { quizApi } from "@api/quiz"; import { setQuizes } from "@root/quizes/actions"; -import { useCurrentQuiz, useQuizes } from "@root/quizes/hooks"; +import { useCurrentQuiz } from "@root/quizes/hooks"; import { useQuizStore } from "@root/quizes/store"; import { questionApi } from "@api/question"; import { setQuestions } from "@root/questions/actions"; import { useUserStore } from "@root/user"; -import type { AxiosError } from "axios"; import CustomPagination from "@ui_kit/CustomPagination"; import SettingResults from "./SettingResults"; +import { DateDefinition, parseFilters, TimeDefinition } from "./helper"; const itemsCities = [ { label: "Муром (1)", value: "option1" }, @@ -55,10 +43,6 @@ const itemsTime = [ ]; const itemsNews = ["Все заявки", "Новые"]; -const resetTime = () => { - return Math.round(Number(moment().format("X")) / 86400 - 1) * 86400 - 0; -}; - export const QuizAnswersPage: FC = () => { const theme = useTheme(); const isTablet = useMediaQuery(theme.breakpoints.down(1000)); @@ -81,7 +65,6 @@ export const QuizAnswersPage: FC = () => { setFilterDate(value); }; - const quizList = useQuizStore(); const quiz = useCurrentQuiz(); const { editQuizId } = useQuizStore(); const { results, total_count } = useResultStore(); @@ -111,54 +94,6 @@ export const QuizAnswersPage: FC = () => { setPrePaymentModalOpen(false); }, [userAccount]); - const DateDefinition = (result: string) => { - //определяем когда был получен результат - вчера, сегодня или число и месяц - let restime = new Date(result); - let timeCompleting = Date.parse(String(result)); - const timeNow = Date.now(); - let dayResult; - if (timeNow - timeCompleting < 86400000) { - dayResult = "Сегодня"; - } - if (172800000 > timeNow - timeCompleting > 86400000) { - dayResult = "Вчера"; - } else { - dayResult = restime.toLocaleDateString(); - } - return dayResult; - }; - const TimeDefinition = (result: string) => { - //достаём время - let timeResult = new Date(result).toLocaleTimeString().slice(0, -3); - return timeResult; - }; - const parseFilters = () => { - const filters: any = {}; - - if (filterNew === "Новые") filters.new = true; - if (filterDate.length !== 0 && filterDate !== "За всё время") { - console.log(filterDate); - - filters.to = new Date(); - - let resetedCurrentTime = Number(resetTime()); - if (filterDate === "Сегодня") - filters.from = moment.unix(resetedCurrentTime)._d; - if (filterDate === "Вчера") - filters.from = moment.unix(resetedCurrentTime - 86400)._d; - if (filterDate === "Последние 7 дней") - filters.from = moment.unix(resetedCurrentTime - 604800)._d; - if (filterDate === "Последние 30 дней") - filters.from = moment.unix(resetedCurrentTime - 2592000)._d; - if (filterDate === "Этот месяц") { - let date = new Date(), - y = date.getFullYear(), - m = date.getMonth(); - filters.from = new Date(y, m, 1); - } - } - return filters; - }; const getData = async () => { if (editQuizId !== null) { const quizes = await quizApi.getList(); @@ -167,7 +102,11 @@ export const QuizAnswersPage: FC = () => { const questions = await questionApi.getList({ quiz_id: editQuizId }); setQuestions(questions); - const result = await resultApi.getList(editQuizId, 0, parseFilters()); + const result = await resultApi.getList( + editQuizId, + 0, + parseFilters(filterNew, filterDate), + ); setResults(result); } }; @@ -177,7 +116,7 @@ export const QuizAnswersPage: FC = () => { const result = await resultApi.getList( editQuizId, value - 1, - parseFilters(), + parseFilters(filterNew, filterDate), ); setResults(result); }; @@ -235,34 +174,20 @@ export const QuizAnswersPage: FC = () => { }} > { - try { - const data = await resultApi.export( - editQuizId, - parseFilters(), - ); - console.log(typeof data); - - const blob = data; - const link = document.createElement("a"); - link.href = window.URL.createObjectURL(blob); - link.download = `report_${new Date().getTime()}.xlsx`; - link.click(); - } catch (nativeError) { - const error = nativeError as AxiosError; - - if (error.response?.statusText === "Payment Required") { - setPrePaymentModalOpen(true); - } - } - }} + onclickExport={() => + ExportResults( + filterNew, + filterDate, + () => setPrePaymentModalOpen(true), + editQuizId, + ) + } onclickUpdate={async () => { const result = await resultApi.getList( editQuizId, page - 1, - parseFilters(), + parseFilters(filterNew, filterDate), ); - console.log(result); setResults(result); }} onclickFilterTablet={() => setFilterModalOpen(true)} diff --git a/src/pages/QuizAnswersPage/helper.ts b/src/pages/QuizAnswersPage/helper.ts new file mode 100644 index 00000000..345e56d3 --- /dev/null +++ b/src/pages/QuizAnswersPage/helper.ts @@ -0,0 +1,55 @@ +import moment from "moment"; + +const resetTime = () => { + return Math.round(Number(moment().format("X")) / 86400 - 1) * 86400 - 0; +}; + +export const parseFilters = (filterNew: string, filterDate: string) => { + const filters: any = {}; + + if (filterNew === "Новые") filters.new = true; + if (filterDate.length !== 0 && filterDate !== "За всё время") { + console.log(filterDate); + + filters.to = new Date(); + + let resetedCurrentTime = Number(resetTime()); + if (filterDate === "Сегодня") + filters.from = moment.unix(resetedCurrentTime)._d; + if (filterDate === "Вчера") + filters.from = moment.unix(resetedCurrentTime - 86400)._d; + if (filterDate === "Последние 7 дней") + filters.from = moment.unix(resetedCurrentTime - 604800)._d; + if (filterDate === "Последние 30 дней") + filters.from = moment.unix(resetedCurrentTime - 2592000)._d; + if (filterDate === "Этот месяц") { + let date = new Date(), + y = date.getFullYear(), + m = date.getMonth(); + filters.from = new Date(y, m, 1); + } + } + return filters; +}; + +export const DateDefinition = (result: string) => { + //определяем когда был получен результат - вчера, сегодня или число и месяц + let restime = new Date(result); + let timeCompleting = Date.parse(String(result)); + const timeNow = Date.now(); + let dayResult; + if (timeNow - timeCompleting < 86400000) { + dayResult = "Сегодня"; + } + if (172800000 > timeNow - timeCompleting > 86400000) { + dayResult = "Вчера"; + } else { + dayResult = restime.toLocaleDateString(); + } + return dayResult; +}; +export const TimeDefinition = (result: string) => { + //достаём время + let timeResult = new Date(result).toLocaleTimeString().slice(0, -3); + return timeResult; +}; diff --git a/src/stores/results/actions.ts b/src/stores/results/actions.ts index 62e6fe61..72601a28 100644 --- a/src/stores/results/actions.ts +++ b/src/stores/results/actions.ts @@ -6,6 +6,8 @@ import { resultApi } from "@api/result"; import { devlog, getMessageFromFetchError } from "@frontend/kitui"; import { enqueueSnackbar } from "notistack"; import { useQuizStore } from "@root/quizes/store"; +import { AxiosError } from "axios"; +import { parseFilters } from "../../pages/QuizAnswersPage/helper"; const REQUEST_DEBOUNCE = 200; const requestQueue = new RequestQueue(); @@ -81,34 +83,31 @@ export const obsolescenceResult = async ( setResults(resultList); }); -export const answerResultListExport = async ( - editQuizId: number, - toDate: string, - fromDate: string, +export const ExportResults = async ( + filterNew: string, + filterDate: string, + openPrePaymentModal: () => void, + editQuizId: number | null, ) => { - const resAnswer = await resultApi.export(editQuizId, toDate, fromDate); - const download = function () { - // Creating a Blob for having a csv file format - // and passing the data with type - const blob = new Blob([resAnswer], { type: "application/json" }); + try { + const data = await resultApi.export( + editQuizId, + parseFilters(filterNew, filterDate), + ); + console.log(typeof data); - // Creating an object for downloading url - const url = window.URL.createObjectURL(blob); + const blob = data; + const link = document.createElement("a"); + link.href = window.URL.createObjectURL(blob); + link.download = `report_${new Date().getTime()}.xlsx`; + link.click(); + } catch (nativeError) { + const error = nativeError as AxiosError; - // Creating an anchor(a) tag of HTML - const a = document.createElement("a"); - - // Passing the blob downloading url - a.setAttribute("href", url); - - // Setting the anchor tag attribute for downloading - // and passing the download file name - a.setAttribute("download", "download.csv"); - - // Performing a download with click - a.click(); - }; - download(); + if (error.response?.statusText === "Payment Required") { + openPrePaymentModal(); + } + } }; function setProducedState( diff --git a/src/ui_kit/Modal/ExportContactsModal.tsx b/src/ui_kit/Modal/ExportContactsModal.tsx index 930a74e9..cd662fe6 100644 --- a/src/ui_kit/Modal/ExportContactsModal.tsx +++ b/src/ui_kit/Modal/ExportContactsModal.tsx @@ -188,9 +188,9 @@ export const ExportContactsModal: FC = ({