From ea6d47b1a1fc89687d4317cc565440c5bda844f9 Mon Sep 17 00:00:00 2001 From: altaf-creator Date: Sun, 30 Nov 2025 19:11:28 +0700 Subject: finish timer --- frontend/main.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'frontend/main.js') diff --git a/frontend/main.js b/frontend/main.js index 7ed3b9c..1e1c8f9 100644 --- a/frontend/main.js +++ b/frontend/main.js @@ -151,7 +151,7 @@ async function startLoadTimers() { for (let i = 0; i < timers.length; i++) { container.innerHTML += ` -
+

Timer #${(i + 1).toString()}

@@ -177,13 +177,15 @@ async function startLoadTimers() {
- +
` textList.push(`timer-txt-${i}`); progList.push(`timer-prog-${i}`); endTimestamps.push(Date.parse(timers[i]["start_time"]) + timers[i]["duration"] * 60000); + + document.getElementById(`timer-btn-${i}`).addEventListener("click", finishLaundryTimer, timers[i]["id"]); } console.log(textList); @@ -203,6 +205,11 @@ async function startLoadTimers() { const prog = document.getElementById(progList[i]); prog.style.width = ((timeRemaining / (timers[i]["duration"] * 60)) * 100).toString() + "%"; + + if (timeRemaining <= 0) { + alert(`timer ${i} finished`); + document.getElementById(`timer-btn-${i}`).disabled = false; + } } await delay(1000); } @@ -216,6 +223,18 @@ async function fetchTimers() { return [response.status, await response.json()]; } +// --- finish / collect timer / laundry +async function finishLaundryTimer(timerId) { + const response = await fetch(`${API_URL}/finish`, { + method: "POST", + credentials: "include", + body: JSON.stringify({id: timerId}), + }); + if (await response.text() == "laundry finished") { + document.getElementById(`timer-${timerId}`).remove(); + } +} + const delay = (durationMs) => { return new Promise(resolve => setTimeout(resolve, durationMs)); } -- cgit v1.2.3