feat : add downloadExport async method to time-entries service
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -53,20 +53,42 @@ export function useTimeEntryService() {
|
|||||||
function getExportUrl(params: {
|
function getExportUrl(params: {
|
||||||
after: string
|
after: string
|
||||||
before: string
|
before: string
|
||||||
user?: number
|
users?: number[]
|
||||||
project?: number
|
projects?: number[]
|
||||||
|
client?: number
|
||||||
tags?: number[]
|
tags?: number[]
|
||||||
}): string {
|
}): string {
|
||||||
const query = new URLSearchParams()
|
const query = new URLSearchParams()
|
||||||
query.set('after', params.after)
|
query.set('after', params.after)
|
||||||
query.set('before', params.before)
|
query.set('before', params.before)
|
||||||
if (params.user) query.set('user', String(params.user))
|
if (params.users?.length) {
|
||||||
if (params.project) query.set('project', String(params.project))
|
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) {
|
if (params.tags?.length) {
|
||||||
params.tags.forEach(id => query.append('tags[]', String(id)))
|
params.tags.forEach(id => query.append('tags[]', String(id)))
|
||||||
}
|
}
|
||||||
return `/api/time_entries/export?${query.toString()}`
|
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 }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user