1
import { useState, useEffect, useMemo } from 'react';
2
import { toDate, clamp } from '@/shared/utils';
4
const calculateProgress = (start: Date, end: Date) => {
5
const duration = end.getTime() - start.getTime();
7
const now = Date.now() - start.getTime();
9
return clamp(0, 1, now / duration);
15
export const useProgress = (
21
const [progress, setProgress] = useState(0);
22
const preparedStart = useMemo(() => toDate(start), [start]);
23
const preparedEnd = useMemo(() => toDate(end), [end]);
24
const delay = 1000 / frequency;
27
const duration = preparedEnd.getTime() - preparedStart.getTime();
32
setProgress(calculateProgress(preparedStart, preparedEnd));
35
const intervalId = window.setInterval(() => {
36
const newProgress = calculateProgress(preparedStart, preparedEnd);
37
setProgress(newProgress);
39
if (newProgress === 1) {
40
window.clearInterval(intervalId);
45
window.clearInterval(intervalId);
48
}, [preparedStart, preparedEnd, delay, autoUpdate]);