Changing messaging for deletion.

This commit is contained in:
mike12345567 2025-02-04 18:22:39 +00:00
parent 5c977713ed
commit 3bb0cdecf5
2 changed files with 46 additions and 14 deletions

View File

@ -21,9 +21,11 @@
let confirmDeleteDialog: any let confirmDeleteDialog: any
let affectedScreens: { text: string; url: string }[] = [] let affectedScreens: { text: string; url: string }[] = []
let sourceType: SourceType | undefined = undefined let sourceType: SourceType | undefined = undefined
let viewsMessage: string = "" let isInternal: boolean = false
let deleteSourceName: string | undefined let deleteSourceName: string | undefined
$: isInternalTable = isInternal && sourceType === SourceType.TABLE
const getViewsMessage = () => { const getViewsMessage = () => {
if (!source || !("views" in source)) { if (!source || !("views" in source)) {
return "" return ""
@ -33,10 +35,28 @@
return "" return ""
} }
if (views.length === 1) { 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 { function getSourceID(): string {
@ -50,10 +70,10 @@
} }
export const show = async () => { export const show = async () => {
viewsMessage = getViewsMessage()
const usage = await screenStore.usageOfScreens(getSourceID()) const usage = await screenStore.usageOfScreens(getSourceID())
affectedScreens = processScreens(usage.screens) affectedScreens = processScreens(usage.screens)
sourceType = usage.sourceType sourceType = usage.sourceType
isInternal = usage.internal
confirmDeleteDialog.show() confirmDeleteDialog.show()
} }
@ -152,6 +172,24 @@
return await deleteDatasource(source as Datasource) 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 += "<b>This action cannot be undone.</b>"
return message
}
</script> </script>
<ConfirmDialog <ConfirmDialog
@ -163,10 +201,10 @@
disabled={deleteSourceName !== source?.name} disabled={deleteSourceName !== source?.name}
> >
<div class="content"> <div class="content">
<p class="dataWarning"> <p class="warning">
All {sourceType} data will be deleted{viewsMessage}. <!-- eslint-disable-next-line svelte/no-at-html-tags -->
{@html buildMessage()}
</p> </p>
<p class="undoneWarning">This action <b>cannot be undone</b>.</p>
{#if affectedScreens.length > 0} {#if affectedScreens.length > 0}
<div class="affectedScreens"> <div class="affectedScreens">
@ -208,16 +246,11 @@
cursor: pointer; cursor: pointer;
} }
.dataWarning { .warning {
margin: 0; margin: 0;
max-width: 100%; max-width: 100%;
} }
.undoneWarning {
margin: 0 0 12px;
max-width: 100%;
}
.affectedScreens { .affectedScreens {
margin: 18px 0; margin: 18px 0;
max-width: 100%; max-width: 100%;

View File

@ -23,7 +23,6 @@ import {
import { builderSocket } from "../../websockets" import { builderSocket } from "../../websockets"
import sdk from "../../sdk" import sdk from "../../sdk"
import { sdk as sharedSdk } from "@budibase/shared-core" import { sdk as sharedSdk } from "@budibase/shared-core"
import { isInternal } from "../../sdk/app/tables/utils"
export async function fetch(ctx: UserCtx<void, FetchScreenResponse>) { export async function fetch(ctx: UserCtx<void, FetchScreenResponse>) {
const screens = await sdk.screens.fetch() const screens = await sdk.screens.fetch()