diff --git a/packages/builder/src/components/backend/modals/DeleteDataConfirmationModal.svelte b/packages/builder/src/components/backend/modals/DeleteDataConfirmationModal.svelte index 7590db2dee..6e87376375 100644 --- a/packages/builder/src/components/backend/modals/DeleteDataConfirmationModal.svelte +++ b/packages/builder/src/components/backend/modals/DeleteDataConfirmationModal.svelte @@ -21,9 +21,11 @@ let confirmDeleteDialog: any let affectedScreens: { text: string; url: string }[] = [] let sourceType: SourceType | undefined = undefined - let viewsMessage: string = "" + let isInternal: boolean = false let deleteSourceName: string | undefined + $: isInternalTable = isInternal && sourceType === SourceType.TABLE + const getViewsMessage = () => { if (!source || !("views" in source)) { return "" @@ -33,10 +35,28 @@ return "" } if (views.length === 1) { - return ", including 1 view" + return "1 view." } - return `, including ${views.length} views` + return `${views.length} views.` + } + + const getQueriesMessage = () => { + if (sourceType !== SourceType.DATASOURCE) { + return "" + } + const sourceId = getSourceID() + const queryList = get(queries).list.filter( + query => query.datasourceId === sourceId + ) + if (queryList.length < 1) { + return "" + } + if (queryList.length === 1) { + return "1 query." + } + + return `${queryList.length} queries.` } function getSourceID(): string { @@ -50,10 +70,10 @@ } export const show = async () => { - viewsMessage = getViewsMessage() const usage = await screenStore.usageOfScreens(getSourceID()) affectedScreens = processScreens(usage.screens) sourceType = usage.sourceType + isInternal = usage.internal confirmDeleteDialog.show() } @@ -152,6 +172,24 @@ return await deleteDatasource(source as Datasource) } } + + function buildMessage() { + let message = "" + if (isInternalTable) { + message = `All ${sourceType} data will be deleted` + const viewsMessage = getViewsMessage() + if (viewsMessage) { + message += `including ${viewsMessage}. ` + } else { + message += ". " + } + } else if (sourceType === SourceType.DATASOURCE) { + const queriesMessage = getQueriesMessage() + message = `This will include deleting ${queriesMessage}. ` + } + message += "This action cannot be undone." + return message + }
-

- All {sourceType} data will be deleted{viewsMessage}. +

+ + {@html buildMessage()}

-

This action cannot be undone.

{#if affectedScreens.length > 0}
@@ -208,16 +246,11 @@ cursor: pointer; } - .dataWarning { + .warning { margin: 0; max-width: 100%; } - .undoneWarning { - margin: 0 0 12px; - max-width: 100%; - } - .affectedScreens { margin: 18px 0; max-width: 100%; diff --git a/packages/server/src/api/controllers/screen.ts b/packages/server/src/api/controllers/screen.ts index a70eb023c1..ea00e60e1a 100644 --- a/packages/server/src/api/controllers/screen.ts +++ b/packages/server/src/api/controllers/screen.ts @@ -23,7 +23,6 @@ import { import { builderSocket } from "../../websockets" import sdk from "../../sdk" import { sdk as sharedSdk } from "@budibase/shared-core" -import { isInternal } from "../../sdk/app/tables/utils" export async function fetch(ctx: UserCtx) { const screens = await sdk.screens.fetch()