From 69dae35e2ab5bf18056024adbb732d5dba24e51e Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 31 Jan 2024 16:06:20 +0000 Subject: [PATCH 01/11] Ensure component settings is always an array and improve performance by minimizing store retrievals --- .../src/stores/builder/components/index.js | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/packages/builder/src/stores/builder/components/index.js b/packages/builder/src/stores/builder/components/index.js index 429fdfa062..9a4ffde6f6 100644 --- a/packages/builder/src/stores/builder/components/index.js +++ b/packages/builder/src/stores/builder/components/index.js @@ -1080,11 +1080,11 @@ export class ComponentStore extends BudiStore { * @param {object} definition * @example * '@budibase/standard-components/container' - * @returns {boolean} + * @returns {array} the settings */ cacheSettings(componentType, definition) { let settings = [] - if (definition && componentType) { + if (definition) { settings = definition.settings?.filter(setting => !setting.section) ?? [] definition.settings ?.filter(setting => setting.section) @@ -1096,14 +1096,15 @@ export class ComponentStore extends BudiStore { })) ) }) - this.update(state => ({ - ...state, - settingsCache: { - ...state.settingsCache, - [componentType]: settings, - }, - })) } + this.update(state => ({ + ...state, + settingsCache: { + ...state.settingsCache, + [componentType]: settings, + }, + })) + return settings } /** @@ -1129,13 +1130,15 @@ export class ComponentStore extends BudiStore { componentType = `@budibase/standard-components/${componentType}` } - if (this.isCached(componentType)) { - return get(this.store).settingsCache[componentType] - } else { - const def = this.getDefinition(componentType) - this.cacheSettings(componentType, def) - return get(this.store).settingsCache[componentType] + // Use cached value if possible + const cachedValue = get(this.store).settingsCache[componentType] + if (cachedValue) { + return cachedValue } + + // Otherwise cache and return new value + const def = this.getDefinition(componentType) + return this.cacheSettings(componentType, def) } } From 233df4c27c6ef511b6a69be0c33ca793433dc287 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 1 Feb 2024 09:55:30 +0000 Subject: [PATCH 02/11] Remove legacy nested builder directory and move screen templates and utils into better locations --- packages/builder/package.json | 1 - .../AutomationBuilder/FlowChart/ActionModal.svelte | 2 +- .../automation/SetupPanel/AutomationBlockSetup.svelte | 2 +- .../backend/DataTable/modals/CreateEditColumn.svelte | 2 +- .../backend/DataTable/modals/JSONSchemaModal.svelte | 2 +- .../src/components/common/bindings/BindableCombobox.svelte | 2 +- .../src/components/common/bindings/BindingPanel.svelte | 2 +- .../common/bindings/DrawerBindableCombobox.svelte | 2 +- .../components/common/bindings/DrawerBindableInput.svelte | 2 +- .../components/common/bindings/DrawerBindableSlot.svelte | 2 +- .../components/common/bindings/ModalBindableInput.svelte | 2 +- .../builder/src/components/design/ScreenDetailsModal.svelte | 2 +- .../controls/ButtonActionEditor/ButtonActionDrawer.svelte | 2 +- .../ButtonActionEditor/actions/ChangeFormStep.svelte | 2 +- .../controls/ButtonActionEditor/actions/ClearForm.svelte | 2 +- .../controls/ButtonActionEditor/actions/DuplicateRow.svelte | 2 +- .../controls/ButtonActionEditor/actions/ExportData.svelte | 2 +- .../ButtonActionEditor/actions/RefreshDataProvider.svelte | 2 +- .../controls/ButtonActionEditor/actions/SaveRow.svelte | 2 +- .../controls/ButtonActionEditor/actions/ScrollTo.svelte | 5 ++++- .../ButtonActionEditor/actions/UpdateFieldValue.svelte | 5 ++++- .../controls/ButtonActionEditor/actions/UpdateState.svelte | 2 +- .../controls/ButtonActionEditor/actions/ValidateForm.svelte | 2 +- .../settings/controls/ButtonActionEditor/actions/utils.js | 2 +- .../controls/ButtonConfiguration/ButtonConfiguration.svelte | 2 +- .../controls/ButtonConfiguration/ButtonSetting.svelte | 2 +- .../settings/controls/ColumnEditor/ColumnEditor.svelte | 2 +- .../controls/DataSourceSelect/DataSourceSelect.svelte | 2 +- .../controls/FieldConfiguration/FieldConfiguration.svelte | 2 +- .../controls/FieldConfiguration/FieldSetting.svelte | 2 +- .../components/design/settings/controls/FieldSelect.svelte | 2 +- .../settings/controls/FilterEditor/FilterEditor.svelte | 2 +- .../design/settings/controls/FormStepConfiguration.svelte | 2 +- .../GridColumnConfiguration/GridColumnConfiguration.svelte | 2 +- .../design/settings/controls/MultiFieldSelect.svelte | 2 +- .../design/settings/controls/PropertyControl.svelte | 2 +- .../settings/controls/RelationshipFilterEditor.svelte | 2 +- .../design/settings/controls/ResetFieldsButton.svelte | 2 +- .../design/settings/controls/SearchFieldSelect.svelte | 2 +- .../design/settings/controls/SortableFieldSelect.svelte | 2 +- .../controls/ValidationEditor/ValidationDrawer.svelte | 2 +- .../src/components/integration/QueryBindingBuilder.svelte | 2 +- .../components/integration/QueryViewerBindingBuilder.svelte | 2 +- .../src/components/integration/RestQueryViewer.svelte | 2 +- packages/builder/src/{builder => }/dataBinding.js | 2 +- packages/builder/src/{builder => }/dataBinding.test.js | 2 +- packages/builder/src/helpers/formFields.js | 2 +- .../store/screenTemplates/utils => helpers}/sanitizeUrl.js | 0 .../builder/src/{builder => helpers}/schemaGenerator.js | 0 packages/builder/src/{builder => helpers}/utils.js | 4 ++-- .../panels/Authentication/RestAuthenticationModal.svelte | 5 ++++- .../[datasourceId]/_components/panels/Headers.svelte | 2 +- .../_components/panels/Variables/index.svelte | 2 +- .../_components/Component/ComponentSettingsPanel.svelte | 2 +- .../_components/Component/CustomStylesSection.svelte | 2 +- .../[componentId]/_components/Screen/GeneralPanel.svelte | 4 ++-- .../[screenId]/_components/ScreenList/DropdownMenu.svelte | 2 +- .../design/_components/NewScreen/CreateScreenModal.svelte | 4 ++-- .../design/_components/NewScreen/DatasourceModal.svelte | 2 +- packages/builder/src/stores/builder/automations.js | 2 +- packages/builder/src/stores/builder/components/index.js | 2 +- packages/builder/src/stores/builder/tests/fixtures/index.js | 4 ++-- .../screenTemplates/utils => templates}/BaseStructure.js | 0 .../store/screenTemplates/utils => templates}/Component.js | 0 .../store/screenTemplates/utils => templates}/Screen.js | 0 .../screenTemplates/utils => templates}/commonComponents.js | 2 +- .../createFromScratchScreen.js | 2 +- .../{builder/store/screenTemplates => templates}/index.js | 0 .../store/screenTemplates => templates}/rowListScreen.js | 6 +++--- packages/builder/vite.config.js | 4 ++-- 70 files changed, 79 insertions(+), 71 deletions(-) rename packages/builder/src/{builder => }/dataBinding.js (99%) rename packages/builder/src/{builder => }/dataBinding.test.js (99%) rename packages/builder/src/{builder/store/screenTemplates/utils => helpers}/sanitizeUrl.js (100%) rename packages/builder/src/{builder => helpers}/schemaGenerator.js (100%) rename packages/builder/src/{builder => helpers}/utils.js (95%) rename packages/builder/src/{builder/store/screenTemplates/utils => templates}/BaseStructure.js (100%) rename packages/builder/src/{builder/store/screenTemplates/utils => templates}/Component.js (100%) rename packages/builder/src/{builder/store/screenTemplates/utils => templates}/Screen.js (100%) rename packages/builder/src/{builder/store/screenTemplates/utils => templates}/commonComponents.js (97%) rename packages/builder/src/{builder/store/screenTemplates => templates}/createFromScratchScreen.js (85%) rename packages/builder/src/{builder/store/screenTemplates => templates}/index.js (100%) rename packages/builder/src/{builder/store/screenTemplates => templates}/rowListScreen.js (92%) diff --git a/packages/builder/package.json b/packages/builder/package.json index 9699c23bb3..52db8e11bc 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -23,7 +23,6 @@ "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/internals/mocks/fileMock.js", "\\.(css|less|sass|scss)$": "identity-obj-proxy", "components(.*)$": "/src/components$1", - "builder(.*)$": "/src/builder$1", "stores(.*)$": "/src/stores$1", "analytics(.*)$": "/src/analytics$1", "constants/backend": "/src/constants/backend/index.js" diff --git a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/ActionModal.svelte b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/ActionModal.svelte index b364add2fe..a8711d220b 100644 --- a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/ActionModal.svelte +++ b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/ActionModal.svelte @@ -13,7 +13,7 @@ import { admin, licensing } from "stores/portal" import { externalActions } from "./ExternalActions" import { TriggerStepID, ActionStepID } from "constants/backend/automations" - import { checkForCollectStep } from "builder/utils" + import { checkForCollectStep } from "helpers/utils" export let blockIdx export let lastStep diff --git a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte index 6ddfc932cd..acb3d8db19 100644 --- a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte +++ b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte @@ -42,7 +42,7 @@ import { getSchemaForDatasourcePlus, getEnvironmentBindings, - } from "builder/dataBinding" + } from "../../../dataBinding" import { TriggerStepID, ActionStepID } from "constants/backend/automations" import { onMount } from "svelte" import { cloneDeep } from "lodash/fp" diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte index a4b5aa553a..09245b06c5 100644 --- a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte @@ -28,7 +28,7 @@ PrettyRelationshipDefinitions, DB_TYPE_EXTERNAL, } from "constants/backend" - import { getAutoColumnInformation, buildAutoColumn } from "builder/utils" + import { getAutoColumnInformation, buildAutoColumn } from "helpers/utils" import ConfirmDialog from "components/common/ConfirmDialog.svelte" import ModalBindableInput from "components/common/bindings/ModalBindableInput.svelte" import { getBindings } from "components/backend/DataTable/formula" diff --git a/packages/builder/src/components/backend/DataTable/modals/JSONSchemaModal.svelte b/packages/builder/src/components/backend/DataTable/modals/JSONSchemaModal.svelte index 85f3c7c1be..0b2eb58748 100644 --- a/packages/builder/src/components/backend/DataTable/modals/JSONSchemaModal.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/JSONSchemaModal.svelte @@ -13,7 +13,7 @@ } from "@budibase/bbui" import { onMount, createEventDispatcher } from "svelte" import { FIELDS } from "constants/backend" - import { generate } from "builder/schemaGenerator" + import { generate } from "helpers/schemaGenerator" export let schema = {} export let json diff --git a/packages/builder/src/components/common/bindings/BindableCombobox.svelte b/packages/builder/src/components/common/bindings/BindableCombobox.svelte index 2e37aec613..f344879b60 100644 --- a/packages/builder/src/components/common/bindings/BindableCombobox.svelte +++ b/packages/builder/src/components/common/bindings/BindableCombobox.svelte @@ -3,7 +3,7 @@ import { readableToRuntimeBinding, runtimeToReadableBinding, - } from "builder/dataBinding" + } from "../../../dataBinding" import { createEventDispatcher } from "svelte" import { isJSBinding } from "@budibase/string-templates" diff --git a/packages/builder/src/components/common/bindings/BindingPanel.svelte b/packages/builder/src/components/common/bindings/BindingPanel.svelte index 165ebb7660..1fd3f21b24 100644 --- a/packages/builder/src/components/common/bindings/BindingPanel.svelte +++ b/packages/builder/src/components/common/bindings/BindingPanel.svelte @@ -19,7 +19,7 @@ import { readableToRuntimeBinding, runtimeToReadableBinding, - } from "builder/dataBinding" + } from "../../../dataBinding" import { admin } from "stores/portal" import CodeEditor from "../CodeEditor/CodeEditor.svelte" diff --git a/packages/builder/src/components/common/bindings/DrawerBindableCombobox.svelte b/packages/builder/src/components/common/bindings/DrawerBindableCombobox.svelte index d6ff4ce738..f24bf12464 100644 --- a/packages/builder/src/components/common/bindings/DrawerBindableCombobox.svelte +++ b/packages/builder/src/components/common/bindings/DrawerBindableCombobox.svelte @@ -3,7 +3,7 @@ import { readableToRuntimeBinding, runtimeToReadableBinding, - } from "builder/dataBinding" + } from "../../../dataBinding" import ClientBindingPanel from "components/common/bindings/ClientBindingPanel.svelte" import { createEventDispatcher, setContext } from "svelte" import { isJSBinding } from "@budibase/string-templates" diff --git a/packages/builder/src/components/common/bindings/DrawerBindableInput.svelte b/packages/builder/src/components/common/bindings/DrawerBindableInput.svelte index debf7609e2..cf11bf48a8 100644 --- a/packages/builder/src/components/common/bindings/DrawerBindableInput.svelte +++ b/packages/builder/src/components/common/bindings/DrawerBindableInput.svelte @@ -3,7 +3,7 @@ import { readableToRuntimeBinding, runtimeToReadableBinding, - } from "builder/dataBinding" + } from "../../../dataBinding" import ClientBindingPanel from "components/common/bindings/ClientBindingPanel.svelte" import { createEventDispatcher, setContext } from "svelte" diff --git a/packages/builder/src/components/common/bindings/DrawerBindableSlot.svelte b/packages/builder/src/components/common/bindings/DrawerBindableSlot.svelte index ea76b16705..b8fe5def88 100644 --- a/packages/builder/src/components/common/bindings/DrawerBindableSlot.svelte +++ b/packages/builder/src/components/common/bindings/DrawerBindableSlot.svelte @@ -3,7 +3,7 @@ import { readableToRuntimeBinding, runtimeToReadableBinding, - } from "builder/dataBinding" + } from "../../../dataBinding" import ClientBindingPanel from "components/common/bindings/ClientBindingPanel.svelte" import { createEventDispatcher, setContext } from "svelte" diff --git a/packages/builder/src/components/common/bindings/ModalBindableInput.svelte b/packages/builder/src/components/common/bindings/ModalBindableInput.svelte index 786bdf4d2b..f87dc92946 100644 --- a/packages/builder/src/components/common/bindings/ModalBindableInput.svelte +++ b/packages/builder/src/components/common/bindings/ModalBindableInput.svelte @@ -3,7 +3,7 @@ import { readableToRuntimeBinding, runtimeToReadableBinding, - } from "builder/dataBinding" + } from "../../../dataBinding" import ServerBindingPanel from "components/common/bindings/ServerBindingPanel.svelte" import { createEventDispatcher } from "svelte" import { isJSBinding } from "@budibase/string-templates" diff --git a/packages/builder/src/components/design/ScreenDetailsModal.svelte b/packages/builder/src/components/design/ScreenDetailsModal.svelte index dee28a2458..295f03c518 100644 --- a/packages/builder/src/components/design/ScreenDetailsModal.svelte +++ b/packages/builder/src/components/design/ScreenDetailsModal.svelte @@ -1,6 +1,6 @@ diff --git a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/SaveRow.svelte b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/SaveRow.svelte index 7a09e11b52..7513072034 100644 --- a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/SaveRow.svelte +++ b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/SaveRow.svelte @@ -1,6 +1,11 @@ diff --git a/packages/builder/src/components/design/settings/controls/DataSourceSelect/DataSourceSelect.svelte b/packages/builder/src/components/design/settings/controls/DataSourceSelect/DataSourceSelect.svelte index a366feb03b..1de5ae6cc6 100644 --- a/packages/builder/src/components/design/settings/controls/DataSourceSelect/DataSourceSelect.svelte +++ b/packages/builder/src/components/design/settings/controls/DataSourceSelect/DataSourceSelect.svelte @@ -22,7 +22,7 @@ queries as queriesStore, viewsV2 as viewsV2Store, views as viewsStore, - currentAsset, + selectedScreen, componentStore, datasources, integrations, @@ -76,7 +76,7 @@ ...query, type: "query", })) - $: dataProviders = findAllComponents($currentAsset.props) + $: dataProviders = findAllComponents($selectedScreen.props) .filter(component => { return ( component._component?.endsWith("/dataprovider") && diff --git a/packages/builder/src/components/design/settings/controls/FieldConfiguration/FieldConfiguration.svelte b/packages/builder/src/components/design/settings/controls/FieldConfiguration/FieldConfiguration.svelte index 9e55e30e46..c6b62543cb 100644 --- a/packages/builder/src/components/design/settings/controls/FieldConfiguration/FieldConfiguration.svelte +++ b/packages/builder/src/components/design/settings/controls/FieldConfiguration/FieldConfiguration.svelte @@ -7,7 +7,7 @@ getBindableProperties, getComponentBindableProperties, } from "../../../../../dataBinding" - import { selectedScreen, currentAsset, componentStore } from "stores/builder" + import { selectedScreen, componentStore } from "stores/builder" import DraggableList from "../DraggableList/DraggableList.svelte" import { createEventDispatcher } from "svelte" import FieldSetting from "./FieldSetting.svelte" @@ -44,7 +44,7 @@ $: datasource = componentInstance.dataSource || - getDatasourceForProvider($currentAsset, componentInstance) + getDatasourceForProvider($selectedScreen, componentInstance) $: resourceId = datasource?.resourceId || datasource?.tableId @@ -53,7 +53,7 @@ } const updateState = value => { - schema = getSchema($currentAsset, datasource) + schema = getSchema($selectedScreen, datasource) options = Object.keys(schema || {}) sanitisedValue = getValidColumns(convertOldFieldFormat(value), options) updateSanitsedFields(sanitisedValue) diff --git a/packages/builder/src/components/design/settings/controls/FieldSelect.svelte b/packages/builder/src/components/design/settings/controls/FieldSelect.svelte index e1f63af1af..4921eb74fa 100644 --- a/packages/builder/src/components/design/settings/controls/FieldSelect.svelte +++ b/packages/builder/src/components/design/settings/controls/FieldSelect.svelte @@ -4,7 +4,7 @@ getDatasourceForProvider, getSchemaForDatasource, } from "../../../../dataBinding" - import { currentAsset } from "stores/builder" + import { selectedScreen } from "stores/builder" import { createEventDispatcher } from "svelte" export let componentInstance = {} @@ -12,8 +12,8 @@ export let placeholder const dispatch = createEventDispatcher() - $: datasource = getDatasourceForProvider($currentAsset, componentInstance) - $: schema = getSchemaForDatasource($currentAsset, datasource).schema + $: datasource = getDatasourceForProvider($selectedScreen, componentInstance) + $: schema = getSchemaForDatasource($selectedScreen, datasource).schema $: options = Object.keys(schema || {}) $: boundValue = getValidValue(value, options) diff --git a/packages/builder/src/components/design/settings/controls/FilterEditor/FilterEditor.svelte b/packages/builder/src/components/design/settings/controls/FilterEditor/FilterEditor.svelte index cdcb488834..b8adbd5276 100644 --- a/packages/builder/src/components/design/settings/controls/FilterEditor/FilterEditor.svelte +++ b/packages/builder/src/components/design/settings/controls/FilterEditor/FilterEditor.svelte @@ -6,7 +6,7 @@ getSchemaForDatasource, } from "../../../../../dataBinding" import FilterDrawer from "./FilterDrawer.svelte" - import { currentAsset } from "stores/builder" + import { selectedScreen } from "stores/builder" const dispatch = createEventDispatcher() @@ -18,8 +18,8 @@ let drawer $: tempValue = value - $: datasource = getDatasourceForProvider($currentAsset, componentInstance) - $: dsSchema = getSchemaForDatasource($currentAsset, datasource)?.schema + $: datasource = getDatasourceForProvider($selectedScreen, componentInstance) + $: dsSchema = getSchemaForDatasource($selectedScreen, datasource)?.schema $: schemaFields = Object.values(schema || dsSchema || {}) $: text = getText(value?.filter(filter => filter.field)) diff --git a/packages/builder/src/components/design/settings/controls/FormFieldSelect.svelte b/packages/builder/src/components/design/settings/controls/FormFieldSelect.svelte index 3a7f1d73e4..b418cb3111 100644 --- a/packages/builder/src/components/design/settings/controls/FormFieldSelect.svelte +++ b/packages/builder/src/components/design/settings/controls/FormFieldSelect.svelte @@ -1,6 +1,6 @@ -{#if $database?._id} -
- {#if showAppUsersTable} - selectTable(TableNames.USERS)} - selectedBy={$userSelectedResourceMap[TableNames.USERS]} - /> - {/if} - {#each enrichedDataSources.filter(ds => ds.show) as datasource} - selectDatasource(datasource)} - on:iconClick={() => toggleNode(datasource)} - selectedBy={$userSelectedResourceMap[datasource._id]} - > -
- -
- {#if datasource._id !== BUDIBASE_INTERNAL_DB_ID} - - {/if} -
- - {#if datasource.open} - - {#each datasource.queries as query} - $goto(`./query/${query._id}`)} - selectedBy={$userSelectedResourceMap[query._id]} - > - - - {/each} +
+ {#if showAppUsersTable} + selectTable(TableNames.USERS)} + selectedBy={$userSelectedResourceMap[TableNames.USERS]} + /> + {/if} + {#each enrichedDataSources.filter(ds => ds.show) as datasource} + selectDatasource(datasource)} + on:iconClick={() => toggleNode(datasource)} + selectedBy={$userSelectedResourceMap[datasource._id]} + > +
+ +
+ {#if datasource._id !== BUDIBASE_INTERNAL_DB_ID} + {/if} - {/each} - {#if showNoResults} - -
- There aren't any datasources matching that name -
-
+
+ + {#if datasource.open} + + {#each datasource.queries as query} + $goto(`./query/${query._id}`)} + selectedBy={$userSelectedResourceMap[query._id]} + > + + + {/each} {/if} -
-{/if} + {/each} + {#if showNoResults} + +
+ There aren't any datasources matching that name +
+
+ {/if} +