From ad6d03c2d0722fcbf6f34c39d87f209bf68f0a66 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Pardou?=
<571533+jrmi@users.noreply.github.com>
Date: Thu, 20 Nov 2025 16:27:05 +0100
Subject: [PATCH] Fix form default value at first render (#4274)
* Fix form data initialisation during SSR
* Fix missing automation error
---
...sing_form_data_after_first_render_ssr.json | 9 +
.../components/elements/FileInputElement.vue | 8 +-
.../elements/FileInputElementForm.vue | 8 +-
.../automation/pages/automationWorkflow.vue | 16 +-
.../elements/components/CheckboxElement.vue | 20 +-
.../elements/components/ChoiceElement.vue | 77 +-------
.../components/DateTimePickerElement.vue | 37 +---
.../elements/components/InputTextElement.vue | 29 +--
.../elements/components/RatingElement.vue | 4 +-
.../components/RatingInputElement.vue | 20 +-
.../components/RecordSelectorElement.vue | 22 +--
web-frontend/modules/builder/elementTypes.js | 181 +++++++++---------
.../modules/builder/mixins/formElement.js | 30 +--
13 files changed, 149 insertions(+), 312 deletions(-)
create mode 100644 changelog/entries/unreleased/refactor/4268_fix_missing_form_data_after_first_render_ssr.json
diff --git a/changelog/entries/unreleased/refactor/4268_fix_missing_form_data_after_first_render_ssr.json b/changelog/entries/unreleased/refactor/4268_fix_missing_form_data_after_first_render_ssr.json
new file mode 100644
index 0000000000..9fb9d1dbbc
--- /dev/null
+++ b/changelog/entries/unreleased/refactor/4268_fix_missing_form_data_after_first_render_ssr.json
@@ -0,0 +1,9 @@
+{
+ "type": "refactor",
+ "message": "Fix missing form data after first render (SSR)",
+ "issue_origin": "github",
+ "issue_number": 4268,
+ "domain": "builder",
+ "bullet_points": [],
+ "created_at": "2025-11-17"
+}
\ No newline at end of file
diff --git a/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElement.vue b/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElement.vue
index a87f942b23..716a575ff7 100644
--- a/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElement.vue
+++ b/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElement.vue
@@ -62,12 +62,6 @@ export default {
resolvedLabel() {
return ensureString(this.resolveFormula(this.element.label))
},
- resolvedDefaultValue() {
- return this.elementType.getInitialFormDataValue(
- this.element,
- this.applicationContext
- )
- },
allowedExtensions() {
return this.element.allowed_filetypes
.filter((v) => v)
@@ -121,6 +115,8 @@ export default {
},
},
watch: {
+ // override the default mixin method because we want to use the one with metadata
+ resolvedDefaultValue() {},
resolvedDefaultValueWithMetadata: {
handler(value) {
if (process.client) {
diff --git a/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElementForm.vue b/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElementForm.vue
index 5592549ab2..e698ec53e7 100644
--- a/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElementForm.vue
+++ b/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElementForm.vue
@@ -171,10 +171,10 @@ export default {
data() {
return {
values: {
- label: '',
- default_name: '',
- default_url: '',
- help_text: '',
+ label: {},
+ default_name: {},
+ default_url: {},
+ help_text: {},
required: false,
multiple: false,
max_filesize: 5,
diff --git a/web-frontend/modules/automation/pages/automationWorkflow.vue b/web-frontend/modules/automation/pages/automationWorkflow.vue
index 5bfe8eec1a..dc6e2f57f8 100644
--- a/web-frontend/modules/automation/pages/automationWorkflow.vue
+++ b/web-frontend/modules/automation/pages/automationWorkflow.vue
@@ -48,6 +48,7 @@ import WorkflowEditor from '@baserow/modules/automation/components/workflow/Work
import EditorSidePanels from '@baserow/modules/automation/components/workflow/EditorSidePanels'
import { AutomationApplicationType } from '@baserow/modules/automation/applicationTypes'
import { notifyIf } from '@baserow/modules/core/utils/error'
+import { StoreItemLookupError } from '@baserow/modules/core/errors'
export default {
name: 'AutomationWorkflow',
@@ -227,11 +228,12 @@ export default {
parseInt(from.params.automationId)
)
if (automation) {
- const workflow = this.$store.getters['automationWorkflow/getById'](
- automation,
- parseInt(from.params.workflowId)
- )
- if (workflow) {
+ try {
+ const workflow = this.$store.getters['automationWorkflow/getById'](
+ automation,
+ parseInt(from.params.workflowId)
+ )
+
this.$store.dispatch('automationWorkflowNode/select', {
workflow,
node: null,
@@ -240,6 +242,10 @@ export default {
application: automation,
data: { _loadedOnce: false },
})
+ } catch (e) {
+ if (!(e instanceof StoreItemLookupError)) {
+ throw e
+ }
}
}
next()
diff --git a/web-frontend/modules/builder/components/elements/components/CheckboxElement.vue b/web-frontend/modules/builder/components/elements/components/CheckboxElement.vue
index 733f2b4e88..5bb49e300b 100644
--- a/web-frontend/modules/builder/components/elements/components/CheckboxElement.vue
+++ b/web-frontend/modules/builder/components/elements/components/CheckboxElement.vue
@@ -20,33 +20,15 @@
diff --git a/web-frontend/modules/builder/components/elements/components/ChoiceElement.vue b/web-frontend/modules/builder/components/elements/components/ChoiceElement.vue
index 9f4917dad3..85d4bc2cc4 100644
--- a/web-frontend/modules/builder/components/elements/components/ChoiceElement.vue
+++ b/web-frontend/modules/builder/components/elements/components/ChoiceElement.vue
@@ -57,13 +57,7 @@