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))