mirror of
https://github.com/sheptikhinv/timers.git
synced 2026-02-07 07:41:36 +05:00
60 lines
No EOL
2.2 KiB
TypeScript
60 lines
No EOL
2.2 KiB
TypeScript
import {useEffect, useState} from 'react';
|
|
import Timer from '../../components/Timer/Timer';
|
|
import styles from './Timers.module.css';
|
|
import {formatFullTime, getClosestTime, timeTillDate} from "../../helpers/DateFunctions.ts";
|
|
import ReleaseList from "../../components/ReleaseList/ReleaseList.tsx";
|
|
import Button from "../../components/Button/Button.tsx";
|
|
|
|
const Timers = () => {
|
|
const [time, setTime] = useState(new Date());
|
|
const [isReleasesListOpen, setIsReleasesListOpen] = useState(false);
|
|
const [isReverseTime, setIsReverseTime] = useState(false);
|
|
|
|
useEffect(() => {
|
|
const intervalId = setInterval(() => {
|
|
setTime(new Date());
|
|
}, 500);
|
|
|
|
return () => clearInterval(intervalId);
|
|
}, []);
|
|
|
|
const handleToggleTime = () => {
|
|
setIsReverseTime((prev) => !prev);
|
|
};
|
|
|
|
const targetTime = getClosestTime(22, 0);
|
|
const displayTime = isReverseTime ? timeTillDate(targetTime) : formatFullTime(time);
|
|
|
|
return (
|
|
<>
|
|
<div className={styles.content}>
|
|
<header className={styles.header}>
|
|
<a className={`${styles.header_text} ${styles.title} ${styles.header_item}`}>
|
|
MetaTimer
|
|
</a>
|
|
<a
|
|
className={`${styles.header_text} ${styles.title} ${styles.header_item}`}
|
|
onClick={handleToggleTime}
|
|
style={{ cursor: 'pointer' }}
|
|
>
|
|
{displayTime}
|
|
</a>
|
|
<Button
|
|
className={styles.header_item}
|
|
label={"?"}
|
|
onClick={() => setIsReleasesListOpen(!isReleasesListOpen)}
|
|
/>
|
|
</header>
|
|
<div className={styles.timers_container}>
|
|
<Timer id={"timer_1"} />
|
|
<Timer id={"timer_2"} />
|
|
<Timer id={"timer_3"} />
|
|
<Timer id={"timer_4"} />
|
|
</div>
|
|
</div>
|
|
<ReleaseList isOpen={isReleasesListOpen} onClose={() => setIsReleasesListOpen(false)} />
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default Timers; |