From c6bd81ba210ba7a77cf93a1c4b57e92a364d7abe Mon Sep 17 00:00:00 2001 From: Dean Date: Tue, 5 Sep 2023 11:40:52 +0100 Subject: [PATCH 1/4] Fix for datasource reset on formblock. Added 'resetOn' to the manifest to trigger a clear when the configured field is cleared --- .../src/builderStore/store/frontend.js | 10 ++++++++ .../FieldConfiguration.svelte | 5 ++-- packages/client/manifest.json | 4 +++- .../app/blocks/form/InnerFormBlock.svelte | 24 ++++++++++--------- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/packages/builder/src/builderStore/store/frontend.js b/packages/builder/src/builderStore/store/frontend.js index 5997c69151..5148afd13c 100644 --- a/packages/builder/src/builderStore/store/frontend.js +++ b/packages/builder/src/builderStore/store/frontend.js @@ -1246,6 +1246,16 @@ export const getFrontendStore = () => { const settings = getComponentSettings(component._component) const updatedSetting = settings.find(setting => setting.key === name) + const resetFields = settings.filter( + setting => name === setting.resetOn + ) + resetFields?.forEach(setting => { + console.log(setting.key, component) + if (component[setting.key]) { + component[setting.key] = null + } + }) + if ( updatedSetting?.type === "dataSource" || updatedSetting?.type === "table" 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 f12e8d27ae..e41b41642b 100644 --- a/packages/builder/src/components/design/settings/controls/FieldConfiguration/FieldConfiguration.svelte +++ b/packages/builder/src/components/design/settings/controls/FieldConfiguration/FieldConfiguration.svelte @@ -34,9 +34,10 @@ } $: datasource = getDatasourceForProvider($currentAsset, componentInstance) + $: resourceId = datasource.resourceId || datasource.tableId - $: if (!isEqual(value, cachedValue)) { - cachedValue = value + $: if (!isEqual(value, cachedValue) || resourceId) { + cachedValue = cloneDeep(value) schema = getSchema($currentAsset, datasource) } diff --git a/packages/client/manifest.json b/packages/client/manifest.json index 015d32ce2d..d91a71853e 100644 --- a/packages/client/manifest.json +++ b/packages/client/manifest.json @@ -4745,7 +4745,8 @@ "dependsOn": { "setting": "clickBehaviour", "value": "details" - } + }, + "resetOn": "dataSource" }, { "label": "Save button", @@ -5397,6 +5398,7 @@ "type": "fieldConfiguration", "key": "fields", "nested": true, + "resetOn": "dataSource", "selectAllFields": true }, { diff --git a/packages/client/src/components/app/blocks/form/InnerFormBlock.svelte b/packages/client/src/components/app/blocks/form/InnerFormBlock.svelte index bca6c21cdb..f2887e97ad 100644 --- a/packages/client/src/components/app/blocks/form/InnerFormBlock.svelte +++ b/packages/client/src/components/app/blocks/form/InnerFormBlock.svelte @@ -211,17 +211,19 @@ {/if} {/if} - - {#each fields as field, idx} - {#if getComponentForField(field) && field.active} - - {/if} - {/each} - + {#key fields} + + {#each fields as field, idx} + {#if getComponentForField(field) && field.active} + + {/if} + {/each} + + {/key} {:else} From b923d24d56b08fccf1b52c1509a90cb148db2188 Mon Sep 17 00:00:00 2001 From: Dean Date: Tue, 5 Sep 2023 11:56:23 +0100 Subject: [PATCH 2/4] Removed debugging console statement --- packages/builder/src/builderStore/store/frontend.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/builder/src/builderStore/store/frontend.js b/packages/builder/src/builderStore/store/frontend.js index 5148afd13c..106847ea0a 100644 --- a/packages/builder/src/builderStore/store/frontend.js +++ b/packages/builder/src/builderStore/store/frontend.js @@ -1250,7 +1250,6 @@ export const getFrontendStore = () => { setting => name === setting.resetOn ) resetFields?.forEach(setting => { - console.log(setting.key, component) if (component[setting.key]) { component[setting.key] = null } From 61cbd45806b2b3d06972a5acfad6287034686ce7 Mon Sep 17 00:00:00 2001 From: Dean Date: Tue, 5 Sep 2023 13:32:54 +0100 Subject: [PATCH 3/4] Fix for default create row label in table block. Ensure its always visible --- packages/client/src/components/app/blocks/TableBlock.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/components/app/blocks/TableBlock.svelte b/packages/client/src/components/app/blocks/TableBlock.svelte index 190f005a36..5d8f1b71ae 100644 --- a/packages/client/src/components/app/blocks/TableBlock.svelte +++ b/packages/client/src/components/app/blocks/TableBlock.svelte @@ -275,7 +275,7 @@ dataSource, showSaveButton: true, showDeleteButton: false, - saveButtonLabel: sidePanelSaveLabel, + saveButtonLabel: sidePanelSaveLabel || "Save", //always show actionType: "Create", fields: sidePanelFields || normalFields, title: "Create Row", From 4a1e969b7ce2cdfda307d9c55da9d0be6a410dc2 Mon Sep 17 00:00:00 2001 From: Dean Date: Wed, 6 Sep 2023 09:09:43 +0100 Subject: [PATCH 4/4] PR Feedback and fixes for the edit field popover --- .../src/builderStore/store/frontend.js | 4 +-- .../FieldConfiguration.svelte | 29 ++++++++++--------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/packages/builder/src/builderStore/store/frontend.js b/packages/builder/src/builderStore/store/frontend.js index 106847ea0a..13b28a3572 100644 --- a/packages/builder/src/builderStore/store/frontend.js +++ b/packages/builder/src/builderStore/store/frontend.js @@ -1250,9 +1250,7 @@ export const getFrontendStore = () => { setting => name === setting.resetOn ) resetFields?.forEach(setting => { - if (component[setting.key]) { - component[setting.key] = null - } + component[setting.key] = null }) if ( 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 e41b41642b..4c4fa0b7b7 100644 --- a/packages/builder/src/components/design/settings/controls/FieldConfiguration/FieldConfiguration.svelte +++ b/packages/builder/src/components/design/settings/controls/FieldConfiguration/FieldConfiguration.svelte @@ -21,6 +21,9 @@ let fieldList let schema let cachedValue + let options + let sanitisedValue + let unconfigured $: bindings = getBindableProperties($selectedScreen, componentInstance._id) $: actionType = componentInstance.actionType @@ -36,15 +39,22 @@ $: datasource = getDatasourceForProvider($currentAsset, componentInstance) $: resourceId = datasource.resourceId || datasource.tableId - $: if (!isEqual(value, cachedValue) || resourceId) { + $: if (!isEqual(value, cachedValue)) { cachedValue = cloneDeep(value) - schema = getSchema($currentAsset, datasource) } - $: options = Object.keys(schema || {}) - $: sanitisedValue = getValidColumns(convertOldFieldFormat(value), options) - $: updateSanitsedFields(sanitisedValue) - $: unconfigured = buildUnconfiguredOptions(schema, sanitisedFields) + const updateState = value => { + schema = getSchema($currentAsset, datasource) + options = Object.keys(schema || {}) + sanitisedValue = getValidColumns(convertOldFieldFormat(value), options) + updateSanitsedFields(sanitisedValue) + unconfigured = buildUnconfiguredOptions(schema, sanitisedFields) + fieldList = [...sanitisedFields, ...unconfigured] + .map(buildSudoInstance) + .filter(x => x != null) + } + + $: updateState(cachedValue, resourceId) // Builds unused ones only const buildUnconfiguredOptions = (schema, selected) => { @@ -98,7 +108,6 @@ if (instance._component) { return instance } - const type = getComponentForField(instance.field, schema) if (!type) { return null @@ -119,12 +128,6 @@ return { ...instance, ...pseudoComponentInstance } } - $: if (sanitisedFields) { - fieldList = [...sanitisedFields, ...unconfigured] - .map(buildSudoInstance) - .filter(x => x != null) - } - const processItemUpdate = e => { const updatedField = e.detail const parentFieldsUpdated = fieldList ? cloneDeep(fieldList) : []