@@ -108,9 +108,56 @@ export function useTimer(settings) {
108108 const { expiryTimestamp, onExpire } = settings || { } ;
109109
110110 const [ seconds , setSeconds ] = useState ( 0 ) ;
111+ function subtractSecond ( ) {
112+ setSeconds ( prevSeconds => {
113+ if ( prevSeconds === 0 ) {
114+ subtractMinute ( ) ;
115+ return 59 ;
116+ } else if ( prevSeconds > 0 ) {
117+ return prevSeconds - 1 ;
118+ }
119+ return 0 ;
120+ } ) ;
121+ }
122+
123+
111124 const [ minutes , setMinutes ] = useState ( 0 ) ;
125+ function subtractMinute ( ) {
126+ setMinutes ( prevMinutes => {
127+ if ( prevMinutes === 0 ) {
128+ subtractHour ( ) ;
129+ return 59 ;
130+ } else if ( prevMinutes > 0 ) {
131+ return prevMinutes - 1 ;
132+ }
133+ return 0 ;
134+ } ) ;
135+ }
136+
112137 const [ hours , setHours ] = useState ( 0 ) ;
138+ function subtractHour ( ) {
139+ setHours ( prevHours => {
140+ if ( prevHours === 0 ) {
141+ subtractDay ( ) ;
142+ return 23 ;
143+ } else if ( prevHours > 0 ) {
144+ return prevHours - 1 ;
145+ }
146+ return 0 ;
147+ } ) ;
148+ }
149+
113150 const [ days , setDays ] = useState ( 0 ) ;
151+ function subtractDay ( ) {
152+ setDays ( prevDays => {
153+ if ( prevDays > 0 ) {
154+ return prevDays - 1 ;
155+ }
156+ reset ( ) ;
157+ isValidOnExpire ( onExpire ) && onExpire ( ) ;
158+ return 0 ;
159+ } ) ;
160+ }
114161
115162 const intervalRef = useRef ( ) ;
116163
@@ -140,7 +187,9 @@ export function useTimer(settings) {
140187 }
141188
142189 function resume ( ) {
143- // TODO implement countdown timer resume after pause
190+ if ( isValidExpiryTimestamp ( expiryTimestamp ) && ! intervalRef . current ) {
191+ intervalRef . current = setInterval ( ( ) => subtractSecond ( ) , 1000 ) ;
192+ }
144193 }
145194
146195 // Timer expiry date calculation
0 commit comments