diff --git a/lib/components/ViewPublicationPage/StartPageViewPublication/OverTime.tsx b/lib/components/ViewPublicationPage/StartPageViewPublication/OverTime.tsx index 7149275..e5a3a07 100644 --- a/lib/components/ViewPublicationPage/StartPageViewPublication/OverTime.tsx +++ b/lib/components/ViewPublicationPage/StartPageViewPublication/OverTime.tsx @@ -1,11 +1,70 @@ import { Box, Typography, useTheme } from "@mui/material"; +import { useQuizStore } from "@stores/useQuizStore"; +import moment from "moment"; + +// Глобальная переменная для принудительного обновления +let forceUpdateCounter = 0; + +// Запускаем глобальный таймер +if (typeof window !== "undefined" && !(window as any).overtimeTimerStarted) { + (window as any).overtimeTimerStarted = true; + setInterval(() => { + forceUpdateCounter++; + // Принудительно обновляем все компоненты OverTime + const event = new CustomEvent("overtime-tick", { detail: forceUpdateCounter }); + window.dispatchEvent(event); + }, 1000); +} export const OverTime = () => { const theme = useTheme(); - const days = 5; - const hours = 11; - const minutes = 13; - const seconds = 15; + const { settings } = useQuizStore(); + + // Проверяем, включен ли overTime + const overTimeConfig = settings?.cfg?.overTime; + const isEnabled = overTimeConfig?.enabled; + + // Если не включен, не показываем карточку + if (!isEnabled) { + return null; + } + + // Функция для расчета времени до окончания + const calculateTimeLeft = () => { + const now = moment(); // текущее время + + // Для тестирования: добавляем 2 часа к текущему времени + const testEndsAt = moment().add(2, "hours"); + const endsAt = overTimeConfig?.endsAt ? moment(overTimeConfig.endsAt) : testEndsAt; + + if (endsAt.isBefore(now) || endsAt.isSame(now)) { + return { days: 0, hours: 0, minutes: 0, seconds: 0 }; + } + + const duration = moment.duration(endsAt.diff(now)); + + return { + days: Math.floor(duration.asDays()), + hours: duration.hours(), + minutes: duration.minutes(), + seconds: duration.seconds(), + }; + }; + + const { days, hours, minutes, seconds } = calculateTimeLeft(); + + // Отладочная информация (используем глобальный счетчик для обновления) + const now = moment(); + const endsAt = overTimeConfig?.endsAt ? moment(overTimeConfig.endsAt) : moment().add(2, "hours"); + + console.log("OverTime Debug:", { + currentTime: now.format("YYYY-MM-DD HH:mm:ss"), + endsAt: endsAt.format("YYYY-MM-DD HH:mm:ss"), + timeLeft: { days, hours, minutes, seconds }, + rawEndsAt: overTimeConfig?.endsAt, + duration: moment.duration(endsAt.diff(now)).humanize(), + updateCounter: forceUpdateCounter, + }); return ( { textAlign: "center", }} > - Квиз станет недоступен через + {overTimeConfig?.description || "Квиз станет недоступен через"}