diff --git a/src/api/result.ts b/src/api/result.ts index 43beec42..d4c9c121 100644 --- a/src/api/result.ts +++ b/src/api/result.ts @@ -27,7 +27,7 @@ export const deleteResult = async (resultId: number) => { } }; -export const obsolescenceResult = async (idResultArray: []) => { +export const obsolescenceResult = async (idResultArray: string[]) => { try { const response = await makeRequest({ url: process.env.REACT_APP_DOMAIN + `/squiz/result/seen`, diff --git a/src/pages/QuizAnswersPage/CardAnswer.tsx b/src/pages/QuizAnswersPage/CardAnswer.tsx index b72cb432..1c6ed938 100644 --- a/src/pages/QuizAnswersPage/CardAnswer.tsx +++ b/src/pages/QuizAnswersPage/CardAnswer.tsx @@ -29,9 +29,10 @@ interface Props { name?: string; phone?: string; email?: string; + onLossNew: (id:string) => void } -export const CardAnswer: FC = ({ +export const CardAnswer = ({ name, phone, email, @@ -39,24 +40,17 @@ export const CardAnswer: FC = ({ idResult, timeResult, dayResult, + onLossNew }: Props) => { const [isOpen, setIsOpen] = useState(false); const [openDelete, setOpenDelete] = useState(false); const theme = useTheme(); const isTablet = useMediaQuery(theme.breakpoints.down(1000)); - const {idResultArray, addIdResult, clearIdResultArray} = useObsolescenceIdResult() - console.log(idResultArray) return ( { - addIdResult(idResult); - setTimeout(() => { - obsolescenceResult(idResultArray); - // clearIdResultArray() - }, 3000); - - console.log(idResultArray) + if (isNew) onLossNew(idResult) }} sx={{ borderRadius: "12px", @@ -121,7 +115,7 @@ export const CardAnswer: FC = ({ { setIsOpen(!isOpen); - getAnswerResultList(idResult) + getAnswerResultList(Number(idResult)) }}> { - deleteResult(idResult); + deleteResult(Number(idResult)); setOpenDelete(false) }} > diff --git a/src/pages/QuizAnswersPage/QuizAnswersPage.tsx b/src/pages/QuizAnswersPage/QuizAnswersPage.tsx index 0678de6d..7f4c2c44 100644 --- a/src/pages/QuizAnswersPage/QuizAnswersPage.tsx +++ b/src/pages/QuizAnswersPage/QuizAnswersPage.tsx @@ -18,53 +18,69 @@ 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 { AnswerResultListEx, getResultsList, obsolescenceResult } from "@api/result"; +import { useObsolescenceIdResult, 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 {AnswerResultListEx, getResultsList} from "@api/result"; -import {useObsolescenceIdResult, useResultStore} from "@root/results/store"; -import { quizApi } from "@api/quiz"; -import { setResults } from "@root/results/actions"; -import { setQuizes } from "@root/quizes/actions"; -import { questionApi } from "@api/question"; -import { setQuestions } from "@root/questions/actions"; -import { useQuestionsStore } from "@root/questions/store"; -import {useUiTools} from "@root/uiTools/store"; const options = [ { label: "Муром (1)", value: "option1" }, { label: "Москва (1)", value: "option2" }, ]; +let lossDebouncer: null | ReturnType = null +let lossId: string[] = [] as string[] + +const onLossNew = (id: string) => { + //Если в массиве ещё нет такого id - добавляем + if (!lossId.includes(id)) lossId.push(id) + //Если таймер есть - сбрасываем + if (typeof lossDebouncer === "number") clearTimeout(lossDebouncer); + //Назначем новый таймер + lossDebouncer = setTimeout(async() => { + //стреляем на лишение новизны + await obsolescenceResult(lossId) + //сбрасываем массив + lossId = [] + }, 3000) +} + + + 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 [exportContactsModalOpen, setExportContactsModalOpen] = - useState(false); + const [exportContactsModalOpen, setExportContactsModalOpen] = useState(false); const [filterNew, setFilterNew] = useState("За всё время") - const { editQuizId } = useQuizStore(); - const { questions } = useQuestionsStore(); + const quizList = useQuizStore(); const quiz = useCurrentQuiz(); + const { editQuizId } = useQuizStore(); const { results } = useResultStore(); const { total_count } = useResultStore(); - const {idResultArray, addIdResult, clearIdResultArray} = useObsolescenceIdResult() + // const {idResultArray, addIdResult, clearIdResultArray} = useObsolescenceIdResult() useEffect(() => { const getData = async () => { - const quizes = await quizApi.getList(); - setQuizes(quizes); + if (editQuizId !== null) { + const quizes = await quizApi.getList(); + setQuizes(quizes); - const questions = await questionApi.getList({ quiz_id: editQuizId }); - setQuestions(questions); + const result = await getResultsList(editQuizId); + console.log("Это данные с сервера", result); + setResults(result); - const result = await getResultsList(quizList.editQuizId); - console.log("Это данные с сервера", result); - setResults(result); - - const resAnswer = await AnswerResultListEx(quizList.editQuizId) + const resAnswer = await AnswerResultListEx(editQuizId) console.log("щтветы респондентов на экспорт в юз эффекте", resAnswer) + } }; getData(); }, []); @@ -104,7 +120,6 @@ export const QuizAnswersPage: FC = () => { maxWidth="lg" > clearIdResultArray()} sx={{ fontSize: "36px", fontWeight: "500", mb: "50px", mt: "60px" }} > {quiz.name} @@ -141,9 +156,9 @@ export const QuizAnswersPage: FC = () => { { - //setExportContactsModalOpen(true) - const resAnswer = AnswerResultListEx(quizList.editQuizId) - console.log("ответы респондентов на экспорт по клику", resAnswer) + //setExportContactsModalOpen(true) + const resAnswer = AnswerResultListEx(quizList.editQuizId) + console.log("ответы респондентов на экспорт по клику", resAnswer) }} sx={{ width: "44px", @@ -204,7 +219,7 @@ export const QuizAnswersPage: FC = () => { "Последние 30 дней", "Этот месяц", ]} - onChange={(e)=> setFilterNew(e.value)} + onChange={(e) => setFilterNew(e.value)} />