From 73fd7d2e5db071200f949c2ddca5484d3d787d8e Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 10 Feb 2025 18:25:36 +0000 Subject: [PATCH 1/4] 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 : "" } From 5c491a80adb6126ad357e3f1878657701b674f2f Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 10 Feb 2025 18:40:26 +0000 Subject: [PATCH 2/4] Update test to datasource plus. --- packages/server/src/api/routes/tests/screen.spec.ts | 3 ++- packages/server/src/tests/utilities/structures.ts | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/server/src/api/routes/tests/screen.spec.ts b/packages/server/src/api/routes/tests/screen.spec.ts index 32f4e4b361..9f1b6a2ce6 100644 --- a/packages/server/src/api/routes/tests/screen.spec.ts +++ b/packages/server/src/api/routes/tests/screen.spec.ts @@ -8,6 +8,7 @@ import { SourceType, UsageInScreensResponse, } from "@budibase/types" +import { basicDatasourcePlus } from "../../../tests/utilities/structures" const { basicScreen, @@ -225,7 +226,7 @@ describe("/screens", () => { it("should find datasource/query usage", async () => { const datasource = await config.api.datasource.create( - basicDatasource().datasource + basicDatasourcePlus().datasource ) const query = await config.api.query.save(basicQuery(datasource._id!)) const screen = await config.api.screen.save( diff --git a/packages/server/src/tests/utilities/structures.ts b/packages/server/src/tests/utilities/structures.ts index aa17983551..a78a2c6c9e 100644 --- a/packages/server/src/tests/utilities/structures.ts +++ b/packages/server/src/tests/utilities/structures.ts @@ -492,6 +492,15 @@ export function basicDatasource(): { datasource: Datasource } { } } +export function basicDatasourcePlus(): { datasource: Datasource } { + return { + datasource: { + ...basicDatasource().datasource, + plus: true, + }, + } +} + export function basicQuery(datasourceId: string): Query { return { datasourceId, From 69669a19b8b5120c153a0ea5b696ff98fceb0460 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 10 Feb 2025 22:04:27 +0000 Subject: [PATCH 3/4] Linting. --- packages/server/src/api/routes/tests/screen.spec.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/server/src/api/routes/tests/screen.spec.ts b/packages/server/src/api/routes/tests/screen.spec.ts index 9f1b6a2ce6..b66eb19613 100644 --- a/packages/server/src/api/routes/tests/screen.spec.ts +++ b/packages/server/src/api/routes/tests/screen.spec.ts @@ -18,7 +18,6 @@ const { basicTable, viewV2, basicQuery, - basicDatasource, } = setup.structures describe("/screens", () => { From a41d829b7f3bc45d351703dd32d8ff31eaf712df Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 10 Feb 2025 22:50:56 +0000 Subject: [PATCH 4/4] Updating pro. --- packages/pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pro b/packages/pro index 8cbaa80a9c..eb96d8b2f2 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit 8cbaa80a9cc1152c6cd53722e64da7d824da6e16 +Subproject commit eb96d8b2f2029033b0f758078ed30c888e8fb249