import './App.css';
import { useEffect, useState } from 'react'
const Timer = ({ timeInSeconds }) => {
const [time, setTime] = useState(timeInSeconds)
const [isPaused, setPaused] = useState(false)
const hours = Math.floor(time / (60 * 60))
const minutes = Math.floor((time % (60 * 60)) / 60)
const seconds = Math.ceil((time % (60 * 60)) % 60)
useEffect(() => {
let interval = setInterval(() => {setTime(time => time - 1)}, 1000)
if (time === 0 || isPaused) {
clearInterval(interval)
}
return () => {clearInterval(interval)}
}, [time, isPaused])
useEffect(() => {
setTime(timeInSeconds)
}, [timeInSeconds])
return (
<>
{hours}:{minutes}:{seconds}
>
)
}
const TimerControl = ({setTimeCB}) => {
const [hours, setHours] = useState('')
const [minutes, setMinutes] = useState('')
const [seconds, setSeconds] = useState('')
const timeToSeconds = (hours, minutes, seconds) => {
let time = (+hours * 60 * 60) + (+minutes * 60) + +seconds
return time
}
const valuesDisappear = () => {
setHours('')
setMinutes('')
setSeconds('')
}
return (
setHours(e.target.value)}>
setMinutes(e.target.value)}>
setSeconds(e.target.value)}>
)
}
const TimerContainer = ({seconds, refresh, render: Render}) => {
const [time, setTime] = useState(seconds)
const [initialTime] = useState(performance.now())
useEffect(() => {
let interval = setInterval(() => {
setTime(seconds - Math.floor((performance.now() - initialTime) / 1000))
}, refresh)
if (time <= 0) {
setTime(0)
clearInterval(interval)
}
return () => clearInterval(interval)
}, [time, initialTime, refresh, seconds])
useEffect(() => {
setTime(seconds)
}, [seconds])
return (
)
}
const SecondsTimer = ({seconds}) => {seconds}
const LCD = ({seconds: timeInSeconds}) => {
const hours = Math.floor(timeInSeconds / (60 * 60))
const minutes = Math.floor((timeInSeconds % (60 * 60)) / 60)
const seconds = Math.ceil((timeInSeconds % (60 * 60)) % 60)
return (
{hours}:{minutes}:{seconds}
)
}
const Watch = ({seconds: timeInSeconds}) => {
const hours = Math.floor(timeInSeconds / (60 * 60))
const minutes = Math.floor((timeInSeconds % (60 * 60)) / 60)
const seconds = Math.ceil((timeInSeconds % (60 * 60)) % 60)
const ratioH = 360 / 12 / 60 / 60
const ratioM = 360 / 60 / 60
const ratioS = 360 / 60
const getAngle = (ratio, value) => (ratio * value)
return (
<>
{hours}:{minutes}:{seconds}
>
)
}
function App() {
const [time, setTime] = useState(0)
return (
setTime(seconds)}/>
);
}
export default App;