From 9760de1805df4e7ff1c13bd86a7b5c45eee2e80c Mon Sep 17 00:00:00 2001 From: Matthieu Date: Tue, 24 Mar 2026 16:16:06 +0100 Subject: [PATCH] feat : add export button to time-tracking page Co-Authored-By: Claude Sonnet 4.6 --- frontend/pages/time-tracking.vue | 42 ++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/frontend/pages/time-tracking.vue b/frontend/pages/time-tracking.vue index 58542c4..be78bc1 100644 --- a/frontend/pages/time-tracking.vue +++ b/frontend/pages/time-tracking.vue @@ -75,6 +75,14 @@ text-value="text-sm" /> + + @@ -297,6 +305,40 @@ async function onDelete(entry: TimeEntry) { await loadEntries() } +function getExportDateRange(): { after: string, before: string } { + if (Array.isArray(selectedDateFilter.value) && selectedDateFilter.value.length === 2) { + return { + after: selectedDateFilter.value[0].toISOString().slice(0, 10), + before: selectedDateFilter.value[1].toISOString().slice(0, 10), + } + } + const end = new Date(startDate.value) + end.setDate(end.getDate() + (viewMode.value === 'day' ? 1 : 7)) + return { + after: startDate.value.toISOString().slice(0, 10), + before: end.toISOString().slice(0, 10), + } +} + +function exportTimeEntries() { + const { after, before } = getExportDateRange() + + const url = timeEntryService.getExportUrl({ + after, + before, + user: selectedUserId.value ?? undefined, + project: selectedProjectId.value ?? undefined, + tags: selectedTagId.value ? [selectedTagId.value] : undefined, + }) + + const a = document.createElement('a') + a.href = url + a.download = '' + document.body.appendChild(a) + a.click() + document.body.removeChild(a) +} + async function loadEntries() { const end = new Date(startDate.value) end.setDate(end.getDate() + (viewMode.value === 'day' ? 1 : 7))