diff --git a/packages/builder/src/components/backend/TableNavigator/popovers/EditTablePopover.svelte b/packages/builder/src/components/backend/TableNavigator/popovers/EditTablePopover.svelte index c2cda1f2d8..f2c726c8bf 100644 --- a/packages/builder/src/components/backend/TableNavigator/popovers/EditTablePopover.svelte +++ b/packages/builder/src/components/backend/TableNavigator/popovers/EditTablePopover.svelte @@ -28,7 +28,6 @@ let deleteTableName $: externalTable = table?.sourceType === DB_TYPE_EXTERNAL - $: allowDeletion = !externalTable || table?.created function showDeleteModal() { templateScreens = $screenStore.screens.filter( @@ -56,7 +55,7 @@ $goto(`./datasource/${table.datasourceId}`) } } catch (error) { - notifications.error("Error deleting table") + notifications.error(`Error deleting table - ${error.message}`) } } @@ -86,17 +85,15 @@ } -{#if allowDeletion} - -
- -
- {#if !externalTable} - Edit - {/if} - Delete -
-{/if} + +
+ +
+ {#if !externalTable} + Edit + {/if} + Delete +
import { getContext } from "svelte" + import { get } from "svelte/store" import { generate } from "shortid" import Block from "components/Block.svelte" import BlockComponent from "components/BlockComponent.svelte" @@ -33,8 +34,9 @@ export let sidePanelDeleteLabel export let notificationOverride - const { fetchDatasourceSchema, API } = getContext("sdk") + const { fetchDatasourceSchema, API, generateGoldenSample } = getContext("sdk") const component = getContext("component") + const context = getContext("context") const stateKey = `ID_${generate()}` let formId @@ -48,20 +50,6 @@ let schemaLoaded = false $: deleteLabel = setDeleteLabel(sidePanelDeleteLabel, sidePanelShowDelete) - - const setDeleteLabel = sidePanelDeleteLabel => { - // Accommodate old config to ensure delete button does not reappear - let labelText = sidePanelShowDelete === false ? "" : sidePanelDeleteLabel - - // Empty text is considered hidden. - if (labelText?.trim() === "") { - return "" - } - - // Default to "Delete" if the value is unset - return labelText || "Delete" - } - $: isDSPlus = dataSource?.type === "table" || dataSource?.type === "viewV2" $: fetchSchema(dataSource) $: enrichSearchColumns(searchColumns, schema).then( @@ -105,6 +93,30 @@ }, ] + // Provide additional data context for live binding eval + export const getAdditionalDataContext = () => { + const rows = get(context)[dataProviderId]?.rows + const goldenRow = generateGoldenSample(rows) + return { + eventContext: { + row: goldenRow, + }, + } + } + + const setDeleteLabel = sidePanelDeleteLabel => { + // Accommodate old config to ensure delete button does not reappear + let labelText = sidePanelShowDelete === false ? "" : sidePanelDeleteLabel + + // Empty text is considered hidden. + if (labelText?.trim() === "") { + return "" + } + + // Default to "Delete" if the value is unset + return labelText || "Delete" + } + // Load the datasource schema so we can determine column types const fetchSchema = async dataSource => { if (dataSource?.type === "table") { diff --git a/packages/frontend-core/src/components/grid/overlays/KeyboardManager.svelte b/packages/frontend-core/src/components/grid/overlays/KeyboardManager.svelte index 5e3a035d89..ed09301bb9 100644 --- a/packages/frontend-core/src/components/grid/overlays/KeyboardManager.svelte +++ b/packages/frontend-core/src/components/grid/overlays/KeyboardManager.svelte @@ -40,16 +40,18 @@ } } + // Handle certain key presses regardless of selection state + if (e.key === "Enter" && (e.ctrlKey || e.metaKey) && $config.canAddRows) { + e.preventDefault() + dispatch("add-row-inline") + return + } + // If nothing selected avoid processing further key presses if (!$focusedCellId) { if (e.key === "Tab" || e.key?.startsWith("Arrow")) { e.preventDefault() focusFirstCell() - } else if (e.key === "Enter" && (e.ctrlKey || e.metaKey)) { - if ($config.canAddRows) { - e.preventDefault() - dispatch("add-row-inline") - } } else if (e.key === "Delete" || e.key === "Backspace") { if (Object.keys($selectedRows).length && $config.canDeleteRows) { dispatch("request-bulk-delete") diff --git a/packages/server/src/api/controllers/table/external.ts b/packages/server/src/api/controllers/table/external.ts index c85b46a95c..7c036bec9d 100644 --- a/packages/server/src/api/controllers/table/external.ts +++ b/packages/server/src/api/controllers/table/external.ts @@ -61,9 +61,6 @@ export async function destroy(ctx: UserCtx) { const tableToDelete: TableRequest = await sdk.tables.getTable( ctx.params.tableId ) - if (!tableToDelete || !tableToDelete.created) { - ctx.throw(400, "Cannot delete tables which weren't created in Budibase.") - } const datasourceId = getDatasourceId(tableToDelete) try { const { datasource, table } = await sdk.tables.external.destroy(