diff options
Diffstat (limited to 'web/app.js')
| -rw-r--r-- | web/app.js | 19 |
1 files changed, 15 insertions, 4 deletions
@@ -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 = ''; |
