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 @@