From 18668c7bcf4b7ab84ea91b38836b8d332fa6115d Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Sat, 18 Apr 2026 18:23:43 +0100 Subject: [PATCH] feat(base): add client csv export service call --- .../features/base/services/base-service.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) 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 },