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 { 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 { quizApi } from "@api/quiz"; import { setQuizes } from "@root/quizes/actions"; import { useCurrentQuiz, useQuizes } from "@root/quizes/hooks"; import { useQuizStore } from "@root/quizes/store"; import { questionApi } from "@api/question"; import { setQuestions } from "@root/questions/actions"; const itemsCities = [ { label: "Муром (1)", value: "option1" }, { label: "Москва (1)", value: "option2" }, ]; const itemsTime = [ "За всё время", "Сегодня", "Вчера", "Последние 7 дней", "Последние 30 дней", "Этот месяц", ]; 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)); const isMobile = useMediaQuery(theme.breakpoints.down(600)); const [filterModalOpen, setFilterModalOpen] = useState(false); const [page, setPage] = useState(1); const [exportContactsModalOpen, setExportContactsModalOpen] = useState(false); const [filterNew, setFilterNew] = useState("Все заявки"); const [filterDate, setFilterDate] = useState("За всё время"); const filterNewHC = (value: string) => { setFilterNew(value); }; const filterDateHC = (value: string) => { setFilterDate(value); }; const quizList = useQuizStore(); const quiz = useCurrentQuiz(); const { editQuizId } = useQuizStore(); const { results, total_count } = useResultStore(); console.log("Перерендер компонента ", results) const countPagination = Math.ceil(total_count / 10); // const {idResultArray, addIdResult, clearIdResultArray} = useObsolescenceIdResult() useEffect(() => { getData(); }, [filterNew, filterDate]); 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(); setQuizes(quizes); const questions = await questionApi.getList({ quiz_id: editQuizId }); setQuestions(questions); const result = await resultApi.getList(editQuizId, 0, parseFilters()); setResults(result); } }; if (quiz === undefined) return ( ); return ( {quiz.name} Ответы на квиз ({total_count}) { 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(); }} sx={{ width: "44px", height: "44px", borderRadius: "8px", border: "1px solid #7E2AEA", }} > { const result = await resultApi.getList( editQuizId, page -1, parseFilters(), ); console.log(result); setResults(result); }} > {isTablet && ( setFilterModalOpen(true)} sx={{ background: "#fff", width: "44px", height: "44px", borderRadius: "8px", border: "1px solid #7E2AEA", }} > )} {!isTablet && ( )} { setPage(value); const result = await resultApi.getList( editQuizId, value -1, parseFilters(), ); setResults(result); }} /> {!isTablet && ( № заявки Дата Контакты )} {results.map((result) => { const dataResult = new Date(result.created_at); let dayResult = DateDefinition(result.created_at); let timeResult = TimeDefinition(result.created_at); return ( ); })} setFilterModalOpen(false)} filterNew={filterNew} filterDate={filterDate} setFilterNew={filterNewHC} setFilterDate={filterDateHC} itemsTime={itemsTime} itemsNews={itemsNews} /> ); };