summaryrefslogtreecommitdiff
path: root/web/app.js
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-03-09 01:12:48 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-03-09 01:12:48 +0000
commitf9d2056f4d10fe7dde71f5d17d8e8c473b3a611f (patch)
tree9913fa942b2c4071887338bbed98da50a9d53c9a /web/app.js
parent1b4be14d02d3fd17beeddcce8d5056d51b19296c (diff)
web: sort Done/Interrupted tabs newest-first and filter Done tab by 24h
Updated sortTasksByDate to support descending sort. Changed renderTaskList to use descending sort for Done and Interrupted tabs. Updated filterTasksByTab to hide Done tasks older than 24 hours by default. Updated frontend tests to match new behavior.
Diffstat (limited to 'web/app.js')
-rw-r--r--web/app.js19
1 files changed, 15 insertions, 4 deletions
diff --git a/web/app.js b/web/app.js
index adaa0a2..0049522 100644
--- a/web/app.js
+++ b/web/app.js
@@ -217,12 +217,13 @@ function createTaskCard(task) {
// ── Sort ──────────────────────────────────────────────────────────────────────
-function sortTasksByDate(tasks) {
+function sortTasksByDate(tasks, descend = false) {
return [...tasks].sort((a, b) => {
if (!a.created_at && !b.created_at) return 0;
if (!a.created_at) return 1;
if (!b.created_at) return -1;
- return new Date(a.created_at) - new Date(b.created_at);
+ const diff = new Date(a.created_at) - new Date(b.created_at);
+ return descend ? -diff : diff;
});
}
@@ -248,7 +249,15 @@ export function filterActiveTasks(tasks) {
export function filterTasksByTab(tasks, tab) {
if (tab === 'active') return tasks.filter(t => ACTIVE_STATES.has(t.state));
if (tab === 'interrupted') return tasks.filter(t => INTERRUPTED_STATES.has(t.state));
- if (tab === 'done') return tasks.filter(t => DONE_STATES.has(t.state));
+ if (tab === 'done') {
+ const now = new Date();
+ const twentyFourHoursAgo = new Date(now.getTime() - (24 * 60 * 60 * 1000));
+ return tasks.filter(t => {
+ if (!DONE_STATES.has(t.state)) return false;
+ if (!t.created_at) return true; // keep if no date
+ return new Date(t.created_at) > twentyFourHoursAgo;
+ });
+ }
return tasks;
}
@@ -292,7 +301,9 @@ function renderTaskList(tasks) {
return;
}
- const visible = sortTasksByDate(filterTasksByTab(tasks, getTaskFilterTab()));
+ const tab = getTaskFilterTab();
+ const descend = (tab === 'done' || tab === 'interrupted');
+ const visible = sortTasksByDate(filterTasksByTab(tasks, tab), descend);
// Replace contents with task cards
container.innerHTML = '';