import { Box, Typography, useTheme, SxProps, Theme } from "@mui/material"; import { useQuizStore } from "@stores/useQuizStore"; import moment from "moment"; import React from "react"; import { useTranslation } from "react-i18next"; type OverTimeProps = { sx?: SxProps; }; export const OverTime = ({ sx }: OverTimeProps) => { const theme = useTheme(); const { settings } = useQuizStore(); const { t } = useTranslation(); const [currentTime, setCurrentTime] = React.useState(moment()); // Реактивный таймер с useEffect React.useEffect(() => { const interval = setInterval(() => { setCurrentTime(moment()); }, 1000); return () => clearInterval(interval); }, []); // Проверяем, включен ли overTime const overTimeConfig = settings?.cfg?.overTime; const isEnabled = overTimeConfig?.enabled; // Если не включен, не показываем карточку if (!isEnabled) { return null; } // Функция для расчета времени до окончания const calculateTimeLeft = (now: moment.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(currentTime); return ( {overTimeConfig?.description || t("Quiz will become unavailable in")} {days} {t("days")} : {hours} {t("hours")} : {minutes} {t("minutes")} : {seconds} {t("seconds")} ); };