@@ -3,13 +3,22 @@ import { Time, Validate } from './utils';
33import { useInterval } from './hooks' ;
44
55const 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+
616export 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