From 73fd7d2e5db071200f949c2ddca5484d3d787d8e Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 10 Feb 2025 18:25:36 +0000 Subject: [PATCH] Fixing an issue with deleting DS+ - also making sure if no screens/children found it correctly displays the pre-empt error. --- packages/backend-core/src/docIds/params.ts | 11 ++++++++++- .../backend/modals/DeleteDataConfirmationModal.svelte | 6 ++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/backend-core/src/docIds/params.ts b/packages/backend-core/src/docIds/params.ts index 5f1c053bde..61708bb71b 100644 --- a/packages/backend-core/src/docIds/params.ts +++ b/packages/backend-core/src/docIds/params.ts @@ -8,6 +8,10 @@ import { import { getProdAppID } from "./conversions" import { DatabaseQueryOpts, VirtualDocumentType } from "@budibase/types" +const EXTERNAL_TABLE_ID_REGEX = new RegExp( + `^${DocumentType.DATASOURCE_PLUS}_(.+)__(.+)$` +) + /** * If creating DB allDocs/query params with only a single top level ID this can be used, this * is usually the case as most of our docs are top level e.g. tables, automations, users and so on. @@ -64,6 +68,11 @@ export function getQueryIndex(viewName: ViewName) { return `database/${viewName}` } +export const isExternalTableId = (id: string): boolean => { + const matches = id.match(EXTERNAL_TABLE_ID_REGEX) + return !!id && matches !== null +} + /** * Check if a given ID is that of a table. */ @@ -72,7 +81,7 @@ export const isTableId = (id: string): boolean => { return ( !!id && (id.startsWith(`${DocumentType.TABLE}${SEPARATOR}`) || - id.startsWith(`${DocumentType.DATASOURCE_PLUS}${SEPARATOR}`)) + isExternalTableId(id)) ) } diff --git a/packages/builder/src/components/backend/modals/DeleteDataConfirmationModal.svelte b/packages/builder/src/components/backend/modals/DeleteDataConfirmationModal.svelte index 82271bd066..512f98de18 100644 --- a/packages/builder/src/components/backend/modals/DeleteDataConfirmationModal.svelte +++ b/packages/builder/src/components/backend/modals/DeleteDataConfirmationModal.svelte @@ -151,6 +151,8 @@ const screenCount = affectedScreens.length let message = `Removing ${source?.name} ` let initialLength = message.length + const hasChanged = () => message.length !== initialLength + if (sourceType === SourceType.TABLE) { const views = "views" in source ? Object.values(source?.views ?? []) : [] message += `will delete its data${ @@ -169,10 +171,10 @@ initialLength !== message.length ? ", and break connected screens:" : "will break connected screens:" - } else { + } else if (hasChanged()) { message += "." } - return message.length !== initialLength ? message : "" + return hasChanged() ? message : "" }