diff --git a/packages/builder/src/builderStore/store/frontend.js b/packages/builder/src/builderStore/store/frontend.js
index 5997c69151..13b28a3572 100644
--- a/packages/builder/src/builderStore/store/frontend.js
+++ b/packages/builder/src/builderStore/store/frontend.js
@@ -1246,6 +1246,13 @@ 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 => {
+ 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..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
@@ -34,16 +37,24 @@
}
$: datasource = getDatasourceForProvider($currentAsset, componentInstance)
+ $: resourceId = datasource.resourceId || datasource.tableId
$: if (!isEqual(value, cachedValue)) {
- cachedValue = value
- schema = getSchema($currentAsset, datasource)
+ cachedValue = cloneDeep(value)
}
- $: 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) => {
@@ -97,7 +108,6 @@
if (instance._component) {
return instance
}
-
const type = getComponentForField(instance.field, schema)
if (!type) {
return null
@@ -118,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) : []
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/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",
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}