diff --git a/frontend/services/time-entries.ts b/frontend/services/time-entries.ts index a783b9e..3931dde 100644 --- a/frontend/services/time-entries.ts +++ b/frontend/services/time-entries.ts @@ -53,20 +53,42 @@ export function useTimeEntryService() { function getExportUrl(params: { after: string before: string - user?: number - project?: number + users?: number[] + projects?: number[] + client?: number tags?: number[] }): string { const query = new URLSearchParams() query.set('after', params.after) query.set('before', params.before) - if (params.user) query.set('user', String(params.user)) - if (params.project) query.set('project', String(params.project)) + if (params.users?.length) { + params.users.forEach(id => query.append('users[]', String(id))) + } + if (params.client) query.set('client', String(params.client)) + if (params.projects?.length) { + params.projects.forEach(id => query.append('projects[]', String(id))) + } if (params.tags?.length) { params.tags.forEach(id => query.append('tags[]', String(id))) } return `/api/time_entries/export?${query.toString()}` } - return { getByDateRange, getActive, create, update, remove, getExportUrl } + async function downloadExport(params: { + after: string + before: string + users?: number[] + projects?: number[] + client?: number + tags?: number[] + }): Promise<{ blob: Blob; filename: string }> { + const url = getExportUrl(params) + const response = await api.getBlob(url) + const disposition = response.headers.get('content-disposition') ?? '' + const filenameMatch = disposition.match(/filename="?([^";\n]+)"?/) + const filename = filenameMatch?.[1] ?? `export-temps-${params.after}_${params.before}.xlsx` + return { blob: response.data, filename } + } + + return { getByDateRange, getActive, create, update, remove, getExportUrl, downloadExport } }