Skip to content

Commit 89bbe56

Browse files
committed
useTimer code enhancements and expiry timestamp validation
1 parent 97c0c7c commit 89bbe56

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

src/useTimer.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,22 @@ import { Time, Validate } from './utils';
33
import { useInterval } from './hooks';
44

55
const DEFAULT_DELAY = 1000;
6+
function getDelayFromExpiryTimestamp(expiryTimestamp) {
7+
if (!Validate.expiryTimestamp(expiryTimestamp)) {
8+
return null;
9+
}
10+
11+
const seconds = Time.getSecondsFromExpiry(expiryTimestamp);
12+
const extraMilliSeconds = Math.floor((seconds - Math.floor(seconds)) * 1000);
13+
return extraMilliSeconds > 0 ? extraMilliSeconds : DEFAULT_DELAY;
14+
}
15+
616
export default function useTimer({ expiryTimestamp: expiry, onExpire, autoStart }) {
717
const [expiryTimestamp, setExpiryTimestamp] = useState(expiry);
818
const [seconds, setSeconds] = useState(Time.getSecondsFromExpiry(expiryTimestamp));
919
const [isRunning, setIsRunning] = useState(autoStart);
1020
const [didStart, setDidStart] = useState(autoStart);
11-
const extraMilliSeconds = Math.floor((seconds - Math.floor(seconds)) * 1000);
12-
const [delay, setDelay] = useState(extraMilliSeconds > 0 ? extraMilliSeconds : 1000);
21+
const [delay, setDelay] = useState(getDelayFromExpiryTimestamp(expiryTimestamp));
1322

1423
function handleExpire() {
1524
Validate.onExpire(onExpire) && onExpire();
@@ -22,19 +31,17 @@ export default function useTimer({ expiryTimestamp: expiry, onExpire, autoStart
2231
}
2332

2433
function restart(newExpiryTimestamp, newAutoStart = true) {
25-
const secondsValue = Time.getSecondsFromExpiry(newExpiryTimestamp);
26-
const extraMilliSecondsValue = Math.floor((secondsValue - Math.floor(secondsValue)) * 1000);
27-
setDelay(extraMilliSecondsValue > 0 ? extraMilliSecondsValue : 1000);
34+
setDelay(getDelayFromExpiryTimestamp(newExpiryTimestamp));
2835
setDidStart(newAutoStart);
2936
setIsRunning(newAutoStart);
3037
setExpiryTimestamp(newExpiryTimestamp);
31-
setSeconds(secondsValue);
38+
setSeconds(Time.getSecondsFromExpiry(newExpiryTimestamp));
3239
}
3340

3441
function resume() {
3542
const time = new Date();
3643
time.setMilliseconds(time.getMilliseconds() + (seconds * 1000));
37-
restart(time, true);
44+
restart(time);
3845
}
3946

4047
function start() {

0 commit comments

Comments
 (0)