Skip to content

Commit 8d7649e

Browse files
committed
fix: stabilize live countdown refresh callback
1 parent 7ca1d72 commit 8d7649e

1 file changed

Lines changed: 4 additions & 3 deletions

File tree

components/Activity/Hackathon/useLiveCountdownState.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { TableCellValue } from 'mobx-lark';
2-
import { useEffect, useEffectEvent, useMemo, useState } from 'react';
2+
import { useCallback, useEffect, useMemo, useState } from 'react';
33

44
import { CountdownWindow, firstTextOf, resolveCountdownState, timeOf } from './utility';
55

@@ -9,7 +9,7 @@ export const useLiveCountdownState = <T extends CountdownWindow>(
99
endTime?: TableCellValue,
1010
) => {
1111
const [referenceTime, setReferenceTime] = useState<number | null>(null);
12-
const refreshReferenceTime = useEffectEvent(() => setReferenceTime(Date.now()));
12+
const refreshReferenceTime = useCallback(() => setReferenceTime(Date.now()), []);
1313

1414
useEffect(() => refreshReferenceTime(), [refreshReferenceTime]);
1515

@@ -31,9 +31,10 @@ export const useLiveCountdownState = <T extends CountdownWindow>(
3131

3232
if (!Number.isFinite(targetTime)) return;
3333

34+
const delay = Math.min(2_147_483_647, Math.max(1000, targetTime - Date.now() + 1000));
3435
const timer = window.setTimeout(
3536
refreshReferenceTime,
36-
Math.max(1000, targetTime - Date.now() + 1000),
37+
delay,
3738
);
3839

3940
return () => window.clearTimeout(timer);

0 commit comments

Comments
 (0)