Skip to content

Commit 186bd8d

Browse files
committed
handle pause and resume countdown timer in useTimer
1 parent addc4f8 commit 186bd8d

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

src/useTimer.js

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)