From df111f8b44c0bee75967cb5f7f059f15d17e8593 Mon Sep 17 00:00:00 2001 From: Samuel-Martineau Date: Sat, 23 Sep 2023 14:05:49 -0400 Subject: [PATCH 01/31] Allow plugins to contribute DatasourcePlus integrations --- packages/backend-core/src/plugin/utils.ts | 20 ++++++++++++++++++- .../EditDatasourceConfigButton.svelte | 9 ++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/packages/backend-core/src/plugin/utils.ts b/packages/backend-core/src/plugin/utils.ts index f73ded0659..dcb45852a1 100644 --- a/packages/backend-core/src/plugin/utils.ts +++ b/packages/backend-core/src/plugin/utils.ts @@ -6,6 +6,7 @@ import { AutomationStepIdArray, AutomationIOType, AutomationCustomIOType, + DatasourceFeature, } from "@budibase/types" import joi from "joi" @@ -67,9 +68,26 @@ function validateDatasource(schema: any) { version: joi.string().optional(), schema: joi.object({ docs: joi.string(), + plus: joi.boolean().optional(), + auth: joi + .object({ + type: joi.string().required(), + }) + .optional(), + features: joi + .object( + Object.fromEntries( + Object.values(DatasourceFeature).map(key => [ + key, + joi.boolean().optional(), + ]) + ) + ) + .optional(), + relationships: joi.boolean().optional(), + description: joi.string().required(), friendlyName: joi.string().required(), type: joi.string().allow(...DATASOURCE_TYPES), - description: joi.string().required(), datasource: joi.object().pattern(joi.string(), fieldValidator).required(), query: joi .object() diff --git a/packages/builder/src/pages/builder/app/[application]/data/datasource/[datasourceId]/_components/EditDatasourceConfigButton.svelte b/packages/builder/src/pages/builder/app/[application]/data/datasource/[datasourceId]/_components/EditDatasourceConfigButton.svelte index 9654b27b50..06b739e858 100644 --- a/packages/builder/src/pages/builder/app/[application]/data/datasource/[datasourceId]/_components/EditDatasourceConfigButton.svelte +++ b/packages/builder/src/pages/builder/app/[application]/data/datasource/[datasourceId]/_components/EditDatasourceConfigButton.svelte @@ -62,7 +62,14 @@ {/if}
- {getSubtitle(datasource)} + + {@const subtitle = getSubtitle(datasource)} + {#if subtitle} + {subtitle} + {:else} + {Object.values(datasource.config).join(" / ")} + {/if} +
From 2aac1c992a4723e07b3130ef76c54c8d08086fb0 Mon Sep 17 00:00:00 2001 From: Samuel-Martineau Date: Tue, 26 Sep 2023 21:26:40 -0400 Subject: [PATCH 02/31] Correct bugs with Datasource+ plugins --- packages/backend-core/src/plugin/utils.ts | 1 + .../design/settings/controls/SortableFieldSelect.svelte | 4 +++- packages/builder/src/stores/backend/datasources.js | 1 + packages/shared-core/src/helpers/integrations.ts | 2 +- packages/types/src/documents/app/datasource.ts | 1 + packages/types/src/sdk/datasources.ts | 1 + 6 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/backend-core/src/plugin/utils.ts b/packages/backend-core/src/plugin/utils.ts index dcb45852a1..8974a9f5a2 100644 --- a/packages/backend-core/src/plugin/utils.ts +++ b/packages/backend-core/src/plugin/utils.ts @@ -69,6 +69,7 @@ function validateDatasource(schema: any) { schema: joi.object({ docs: joi.string(), plus: joi.boolean().optional(), + isSQL: joi.boolean().optional(), auth: joi .object({ type: joi.string().required(), diff --git a/packages/builder/src/components/design/settings/controls/SortableFieldSelect.svelte b/packages/builder/src/components/design/settings/controls/SortableFieldSelect.svelte index 21ed68ce68..74b044e75e 100644 --- a/packages/builder/src/components/design/settings/controls/SortableFieldSelect.svelte +++ b/packages/builder/src/components/design/settings/controls/SortableFieldSelect.svelte @@ -20,7 +20,9 @@ const getSortableFields = schema => { return Object.entries(schema || {}) - .filter(entry => !UNSORTABLE_TYPES.includes(entry[1].type)) + .filter( + entry => !UNSORTABLE_TYPES.includes(entry[1].type) && entry[1].sortable + ) .map(entry => entry[0]) } diff --git a/packages/builder/src/stores/backend/datasources.js b/packages/builder/src/stores/backend/datasources.js index 7d2db44d6a..00384a6b1c 100644 --- a/packages/builder/src/stores/backend/datasources.js +++ b/packages/builder/src/stores/backend/datasources.js @@ -136,6 +136,7 @@ export function createDatasourcesStore() { config, name: `${integration.friendlyName}${nameModifier}`, plus: integration.plus && integration.name !== IntegrationTypes.REST, + isSQL: integration.isSQL, } if (await checkDatasourceValidity(integration, datasource)) { diff --git a/packages/shared-core/src/helpers/integrations.ts b/packages/shared-core/src/helpers/integrations.ts index b8c220c6a5..5cc8de880f 100644 --- a/packages/shared-core/src/helpers/integrations.ts +++ b/packages/shared-core/src/helpers/integrations.ts @@ -14,5 +14,5 @@ export function isSQL(datasource: Datasource): boolean { SourceName.MYSQL, SourceName.ORACLE, ] - return SQL.indexOf(datasource.source) !== -1 + return SQL.indexOf(datasource.source) !== -1 || datasource.isSQL === true } diff --git a/packages/types/src/documents/app/datasource.ts b/packages/types/src/documents/app/datasource.ts index 855006ea4c..67035a2e72 100644 --- a/packages/types/src/documents/app/datasource.ts +++ b/packages/types/src/documents/app/datasource.ts @@ -9,6 +9,7 @@ export interface Datasource extends Document { // the config is defined by the schema config?: Record plus?: boolean + isSQL?: boolean entities?: { [key: string]: Table } diff --git a/packages/types/src/sdk/datasources.ts b/packages/types/src/sdk/datasources.ts index d6a0d4a7c8..0e06b8fae0 100644 --- a/packages/types/src/sdk/datasources.ts +++ b/packages/types/src/sdk/datasources.ts @@ -140,6 +140,7 @@ export interface DatasourceConfig { export interface Integration { docs: string plus?: boolean + isSQL?: boolean auth?: { type: string } features?: Partial> relationships?: boolean From eb934adc338b9be9a56b68a9f13acfdc876e6e4b Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 29 Sep 2023 16:47:53 +0100 Subject: [PATCH 03/31] Add row click events to grid --- packages/client/manifest.json | 15 +++++++++++++++ .../client/src/components/app/GridBlock.svelte | 3 +++ .../src/components/grid/layout/GridRow.svelte | 2 ++ .../components/grid/layout/StickyColumn.svelte | 1 + 4 files changed, 21 insertions(+) diff --git a/packages/client/manifest.json b/packages/client/manifest.json index 4e56ca758d..52a74befa9 100644 --- a/packages/client/manifest.json +++ b/packages/client/manifest.json @@ -5621,6 +5621,21 @@ "label": "High contrast", "key": "stripeRows", "defaultValue": false + }, + { + "type": "event", + "label": "On row click", + "key": "onRowClick", + "context": [ + { + "label": "Clicked row", + "key": "row" + } + ], + "dependsOn": { + "setting": "allowEditRows", + "value": false + } } ] }, diff --git a/packages/client/src/components/app/GridBlock.svelte b/packages/client/src/components/app/GridBlock.svelte index 9bdea52124..916f1aa447 100644 --- a/packages/client/src/components/app/GridBlock.svelte +++ b/packages/client/src/components/app/GridBlock.svelte @@ -14,12 +14,14 @@ export let initialSortOrder = null export let fixedRowHeight = null export let columns = null + export let onRowClick = null const component = getContext("component") const { styleable, API, builderStore, notificationStore } = getContext("sdk") $: columnWhitelist = columns?.map(col => col.name) $: schemaOverrides = getSchemaOverrides(columns) + $: handleRowClick = allowEditRows ? undefined : onRowClick const getSchemaOverrides = columns => { let overrides = {} @@ -56,6 +58,7 @@ showControls={false} notifySuccess={notificationStore.actions.success} notifyError={notificationStore.actions.error} + on:row-click={e => handleRowClick?.({ row: e.detail })} />
diff --git a/packages/frontend-core/src/components/grid/layout/GridRow.svelte b/packages/frontend-core/src/components/grid/layout/GridRow.svelte index fe74f05663..260898da56 100644 --- a/packages/frontend-core/src/components/grid/layout/GridRow.svelte +++ b/packages/frontend-core/src/components/grid/layout/GridRow.svelte @@ -17,6 +17,7 @@ columnHorizontalInversionIndex, contentLines, isDragging, + dispatch, } = getContext("grid") $: rowSelected = !!$selectedRows[row._id] @@ -30,6 +31,7 @@ on:focus on:mouseenter={$isDragging ? null : () => ($hoveredRowId = row._id)} on:mouseleave={$isDragging ? null : () => ($hoveredRowId = null)} + on:click={() => dispatch("row-click", row)} > {#each $renderedColumns as column, columnIdx (column.name)} {@const cellId = `${row._id}-${column.name}`} diff --git a/packages/frontend-core/src/components/grid/layout/StickyColumn.svelte b/packages/frontend-core/src/components/grid/layout/StickyColumn.svelte index f3af0d9362..e005a945dd 100644 --- a/packages/frontend-core/src/components/grid/layout/StickyColumn.svelte +++ b/packages/frontend-core/src/components/grid/layout/StickyColumn.svelte @@ -74,6 +74,7 @@ class="row" on:mouseenter={$isDragging ? null : () => ($hoveredRowId = row._id)} on:mouseleave={$isDragging ? null : () => ($hoveredRowId = null)} + on:click={() => dispatch("row-click", row)} > {#if $stickyColumn} From 68215684e19e3fe3c831f781684112abb812fdac Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 2 Oct 2023 09:13:23 +0100 Subject: [PATCH 04/31] Prevent row selection, deletion and expansion from triggering on click events in grids --- .../components/grid/cells/GutterCell.svelte | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/frontend-core/src/components/grid/cells/GutterCell.svelte b/packages/frontend-core/src/components/grid/cells/GutterCell.svelte index 5357d4b5cf..ae51599edd 100644 --- a/packages/frontend-core/src/components/grid/cells/GutterCell.svelte +++ b/packages/frontend-core/src/components/grid/cells/GutterCell.svelte @@ -17,13 +17,24 @@ const { config, dispatch, selectedRows } = getContext("grid") const svelteDispatch = createEventDispatcher() - const select = () => { + const select = e => { + e.stopPropagation() svelteDispatch("select") const id = row?._id if (id) { selectedRows.actions.toggleRow(id) } } + + const bulkDelete = e => { + e.stopPropagation() + dispatch("request-bulk-delete") + } + + const expand = e => { + e.stopPropagation() + svelteDispatch("expand") + } dispatch("request-bulk-delete")}> +
{:else}
- svelteDispatch("expand")} - /> +
{/if}
From ea12121ddf857616dc5bb63ec15d8bc5012267e6 Mon Sep 17 00:00:00 2001 From: Budibase Staging Release Bot <> Date: Mon, 2 Oct 2023 08:13:57 +0000 Subject: [PATCH 05/31] Bump version to 2.10.16 --- lerna.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerna.json b/lerna.json index 84d7bc0ec1..00a9fb9c0c 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "2.10.16-alpha.19", + "version": "2.10.16", "npmClient": "yarn", "packages": [ "packages/*" From 0506adee50b73a3eb2fe9adbd11e9db83191205a Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 2 Oct 2023 09:18:25 +0100 Subject: [PATCH 06/31] Update row click event name to match best practices --- packages/client/src/components/app/GridBlock.svelte | 2 +- .../frontend-core/src/components/grid/layout/GridRow.svelte | 2 +- .../src/components/grid/layout/StickyColumn.svelte | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/client/src/components/app/GridBlock.svelte b/packages/client/src/components/app/GridBlock.svelte index 916f1aa447..375cba6039 100644 --- a/packages/client/src/components/app/GridBlock.svelte +++ b/packages/client/src/components/app/GridBlock.svelte @@ -58,7 +58,7 @@ showControls={false} notifySuccess={notificationStore.actions.success} notifyError={notificationStore.actions.error} - on:row-click={e => handleRowClick?.({ row: e.detail })} + on:rowclick={e => handleRowClick?.({ row: e.detail })} /> diff --git a/packages/frontend-core/src/components/grid/layout/GridRow.svelte b/packages/frontend-core/src/components/grid/layout/GridRow.svelte index 260898da56..bd65d34498 100644 --- a/packages/frontend-core/src/components/grid/layout/GridRow.svelte +++ b/packages/frontend-core/src/components/grid/layout/GridRow.svelte @@ -31,7 +31,7 @@ on:focus on:mouseenter={$isDragging ? null : () => ($hoveredRowId = row._id)} on:mouseleave={$isDragging ? null : () => ($hoveredRowId = null)} - on:click={() => dispatch("row-click", row)} + on:click={() => dispatch("rowclick", row)} > {#each $renderedColumns as column, columnIdx (column.name)} {@const cellId = `${row._id}-${column.name}`} diff --git a/packages/frontend-core/src/components/grid/layout/StickyColumn.svelte b/packages/frontend-core/src/components/grid/layout/StickyColumn.svelte index e005a945dd..9f38841f7a 100644 --- a/packages/frontend-core/src/components/grid/layout/StickyColumn.svelte +++ b/packages/frontend-core/src/components/grid/layout/StickyColumn.svelte @@ -74,7 +74,7 @@ class="row" on:mouseenter={$isDragging ? null : () => ($hoveredRowId = row._id)} on:mouseleave={$isDragging ? null : () => ($hoveredRowId = null)} - on:click={() => dispatch("row-click", row)} + on:click={() => dispatch("rowclick", row)} > {#if $stickyColumn} From 7d036ab30d6760e13a3076d262150aab2fe2d9bc Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 2 Oct 2023 09:25:59 +0100 Subject: [PATCH 07/31] Move position of grid row click setting --- packages/client/manifest.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/client/manifest.json b/packages/client/manifest.json index 52a74befa9..bf32b98ff6 100644 --- a/packages/client/manifest.json +++ b/packages/client/manifest.json @@ -5598,6 +5598,21 @@ } ] }, + { + "type": "event", + "label": "On row click", + "key": "onRowClick", + "context": [ + { + "label": "Clicked row", + "key": "row" + } + ], + "dependsOn": { + "setting": "allowEditRows", + "value": false + } + }, { "type": "boolean", "label": "Add rows", @@ -5621,21 +5636,6 @@ "label": "High contrast", "key": "stripeRows", "defaultValue": false - }, - { - "type": "event", - "label": "On row click", - "key": "onRowClick", - "context": [ - { - "label": "Clicked row", - "key": "row" - } - ], - "dependsOn": { - "setting": "allowEditRows", - "value": false - } } ] }, From 634a2974bd98d506b38ab9e9872807cd2185813a Mon Sep 17 00:00:00 2001 From: Budibase Staging Release Bot <> Date: Mon, 2 Oct 2023 08:30:36 +0000 Subject: [PATCH 08/31] Bump version to 2.11.0 --- lerna.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerna.json b/lerna.json index 00a9fb9c0c..7a7fb9c26e 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "2.10.16", + "version": "2.11.0", "npmClient": "yarn", "packages": [ "packages/*" From 7003475cafb6e49939e67a99b763d1cec5421601 Mon Sep 17 00:00:00 2001 From: melohagan <101575380+melohagan@users.noreply.github.com> Date: Mon, 2 Oct 2023 11:42:04 +0100 Subject: [PATCH 09/31] Refactor FieldSelector to not use BindableSlot (#11942) --- .../automation/SetupPanel/RowSelector.svelte | 31 +++- .../SetupPanel/RowSelectorTypes.svelte | 152 ++++++++---------- 2 files changed, 92 insertions(+), 91 deletions(-) diff --git a/packages/builder/src/components/automation/SetupPanel/RowSelector.svelte b/packages/builder/src/components/automation/SetupPanel/RowSelector.svelte index 8c50689f22..c3097f3072 100644 --- a/packages/builder/src/components/automation/SetupPanel/RowSelector.svelte +++ b/packages/builder/src/components/automation/SetupPanel/RowSelector.svelte @@ -3,6 +3,8 @@ import { Select, Checkbox } from "@budibase/bbui" import { createEventDispatcher } from "svelte" import RowSelectorTypes from "./RowSelectorTypes.svelte" + import DrawerBindableSlot from "../../common/bindings/DrawerBindableSlot.svelte" + import AutomationBindingPanel from "../../common/bindings/ServerBindingPanel.svelte" const dispatch = createEventDispatcher() @@ -108,14 +110,29 @@
{#each schemaFields as [field, schema]} {#if !schema.autocolumn && schema.type !== "attachment"} - + value={value[field]} + on:change={e => onChange(e, field)} + {bindings} + allowJS={true} + updateOnChange={false} + drawerLeft="260px" + > + + {/if} {#if isUpdateRow && schema.type === "link"}
diff --git a/packages/builder/src/components/automation/SetupPanel/RowSelectorTypes.svelte b/packages/builder/src/components/automation/SetupPanel/RowSelectorTypes.svelte index 9111df0adc..8cf1ecf6de 100644 --- a/packages/builder/src/components/automation/SetupPanel/RowSelectorTypes.svelte +++ b/packages/builder/src/components/automation/SetupPanel/RowSelectorTypes.svelte @@ -8,7 +8,6 @@ } from "@budibase/bbui" import LinkedRowSelector from "components/common/LinkedRowSelector.svelte" import DrawerBindableInput from "../../common/bindings/DrawerBindableInput.svelte" - import DrawerBindableSlot from "../../common/bindings/DrawerBindableSlot.svelte" import ModalBindableInput from "../../common/bindings/ModalBindableInput.svelte" import AutomationBindingPanel from "../../common/bindings/ServerBindingPanel.svelte" import Editor from "components/integration/QueryEditor.svelte" @@ -31,88 +30,73 @@ } - onChange(e, field)} - {bindings} - allowJS={true} - updateOnChange={false} - drawerLeft="260px" -> - {#if schemaHasOptions(schema) && schema.type !== "array"} - onChange(e, field)} + label={field} + value={value[field]} + options={schema.constraints.inclusion} + /> +{:else if schema.type === "datetime"} + onChange(e, field)} + /> +{:else if schema.type === "boolean"} +