Skip to content

Commit c0fd46a

Browse files
fix: clear timeout on skip to prevent timers overlapping (#55)
1 parent 8c05a18 commit c0fd46a

1 file changed

Lines changed: 20 additions & 5 deletions

File tree

app/static/app/js/timer.js

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,17 @@ const overlay = document.querySelector('#overlay');
1010
const minutes = document.querySelector('#minute');
1111
const seconds = document.querySelector('#second');
1212

13+
// 1. ADD A GLOBAL VARIABLE TO KEEP TRACK OF THE TIMER
14+
let currentTimerId;
15+
1316
function showTimer() {
1417
overlay.style.visibility = 'visible';
1518
overlay.style.opacity = 0.97;
1619
}
1720

1821
function hideTimer() {
22+
// 2. STOP THE TIMER WHEN HIDING THE WINDOW
23+
clearTimeout(currentTimerId);
1924
overlay.style.visibility = 'hidden';
2025
resetStroke();
2126
resetTitle();
@@ -89,8 +94,11 @@ function changeTimer() {
8994
}
9095

9196
function startFocusTimer(atStart, time) {
92-
// Timer manual stop
93-
if (minutes.innerHTML === '--' && minutes.innerHTML === '--') {
97+
// 3. MAKE SURE TO CLEAR ANY PREVIOUS TIMERS
98+
clearTimeout(currentTimerId);
99+
100+
// Timer manual stop (Fixed original typo: minutes && seconds)
101+
if (minutes.innerHTML === '--' && seconds.innerHTML === '--') {
94102
changeLabels(false);
95103
hideTimer();
96104
return;
@@ -103,10 +111,15 @@ function startFocusTimer(atStart, time) {
103111
return;
104112
}
105113
[minutes.innerHTML, seconds.innerHTML] = formatTime(atStart, time);
106-
setTimeout(startFocusTimer, 1000, atStart, time);
114+
115+
// 4. SAVE THE NEW TIMER ID
116+
currentTimerId = setTimeout(startFocusTimer, 1000, atStart, time);
107117
}
108118

109119
function startBreakTimer(atStart, time) {
120+
// 3. MAKE SURE TO CLEAR ANY PREVIOUS TIMERS
121+
clearTimeout(currentTimerId);
122+
110123
// Timer manual stop
111124
if (minutes.innerHTML === '--' && seconds.innerHTML === '--') {
112125
hideTimer();
@@ -119,7 +132,9 @@ function startBreakTimer(atStart, time) {
119132
return;
120133
}
121134
[minutes.innerHTML, seconds.innerHTML] = formatTime(atStart, time);
122-
setTimeout(startBreakTimer, 1000, atStart, time);
135+
136+
// 4. SAVE THE NEW TIMER ID
137+
currentTimerId = setTimeout(startBreakTimer, 1000, atStart, time);
123138
}
124139

125140
export {
@@ -129,4 +144,4 @@ export {
129144
startBreakTimer,
130145
startFocusTimer,
131146
postPomodoro,
132-
};
147+
};

0 commit comments

Comments
 (0)