diff --git a/apps/client/src/features/base/services/base-service.ts b/apps/client/src/features/base/services/base-service.ts index 54f73942..4695285d 100644 --- a/apps/client/src/features/base/services/base-service.ts +++ b/apps/client/src/features/base/services/base-service.ts @@ -1,4 +1,5 @@ import api from "@/lib/api-client"; +import { saveAs } from "file-saver"; import { IBase, IBaseProperty, @@ -46,6 +47,26 @@ export async function deleteBase(baseId: string): Promise { await api.post("/bases/delete", { baseId }); } +export async function exportBaseToCsv(baseId: string): Promise { + const req = await api.post( + "/bases/export-csv", + { baseId }, + { responseType: "blob" }, + ); + + const header = (req?.headers?.["content-disposition"] as string) ?? ""; + const utf8Match = header.match(/filename\*=UTF-8''([^;]+)/i); + const plainMatch = header.match(/filename="?([^";]+)"?/i); + let fileName = utf8Match?.[1] ?? plainMatch?.[1] ?? "base.csv"; + try { + fileName = decodeURIComponent(fileName); + } catch { + // fallback to raw filename + } + + saveAs(req.data, fileName); +} + export async function listBases( spaceId: string, params?: { cursor?: string; limit?: number },