From 349b22ba252ac93450bc549463ce748352a67910 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Fri, 22 Mar 2024 11:34:05 +0100 Subject: [PATCH] Move downloadfile to frontend-core --- .../components/start/ExportAppModal.svelte | 38 ++----------------- packages/frontend-core/src/utils/download.js | 31 +++++++++++++++ 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/packages/builder/src/components/start/ExportAppModal.svelte b/packages/builder/src/components/start/ExportAppModal.svelte index ec0cf42fe0..8cf2025c39 100644 --- a/packages/builder/src/components/start/ExportAppModal.svelte +++ b/packages/builder/src/components/start/ExportAppModal.svelte @@ -8,6 +8,7 @@ Input, notifications, } from "@budibase/bbui" + import { downloadFile } from "@budibase/frontend-core" import { createValidationStore } from "helpers/validation/yup" export let app @@ -55,42 +56,11 @@ const exportApp = async () => { const id = published ? app.prodId : app.devId const url = `/api/backups/export?appId=${id}` - await downloadFile(url, { - excludeRows: !includeInternalTablesRows, - encryptPassword: password, - }) - } - - async function downloadFile(url, body) { try { - const response = await fetch(url, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(body), + await downloadFile(url, { + excludeRows: !includeInternalTablesRows, + encryptPassword: password, }) - - if (response.ok) { - const contentDisposition = response.headers.get("Content-Disposition") - - const matches = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec( - contentDisposition - ) - - const filename = matches[1].replace(/['"]/g, "") - - const url = URL.createObjectURL(await response.blob()) - - const link = document.createElement("a") - link.href = url - link.download = filename - link.click() - - URL.revokeObjectURL(url) - } else { - notifications.error("Error exporting the app.") - } } catch (error) { notifications.error(error.message || "Error downloading the exported app") } diff --git a/packages/frontend-core/src/utils/download.js b/packages/frontend-core/src/utils/download.js index 89c8572253..f3701b357b 100644 --- a/packages/frontend-core/src/utils/download.js +++ b/packages/frontend-core/src/utils/download.js @@ -34,3 +34,34 @@ export async function downloadStream(streamResponse) { URL.revokeObjectURL(blobUrl) } + +export async function downloadFile(url, body) { + const response = await fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(body), + }) + + if (response.ok) { + const contentDisposition = response.headers.get("Content-Disposition") + + const matches = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec( + contentDisposition + ) + + const filename = matches[1].replace(/['"]/g, "") + + const url = URL.createObjectURL(await response.blob()) + + const link = document.createElement("a") + link.href = url + link.download = filename + link.click() + + URL.revokeObjectURL(url) + } else { + notifications.error("Error exporting the app.") + } +}