From 08a896a7b8bec73e5bbc7485f09f4b94412f650a Mon Sep 17 00:00:00 2001
From: Peter Evans
Date: Thu, 11 Dec 2025 08:26:26 +0000
Subject: [PATCH 1/2] Add a 'create new' link in the footer of the
DataSourceDropdown. (#4349)
* Adding a 'create new data source' link in the footer of the DataSourceDropdown.
* Force a DataSourceCreateEditModal remount by setting a unique key. After an updated event has been emitted, we don't want to edit in the subsequent 'add new' click.
---
..._source_link_at_the_bottom_of_iterate.json | 9 +++++
.../dataSource/DataSourceCreateEditModal.vue | 3 +-
.../dataSource/DataSourceDropdown.vue | 38 +++++++++++++++++++
web-frontend/modules/builder/locales/en.json | 3 +-
.../modules/builder/store/dataSource.js | 4 +-
.../core/assets/scss/components/select.scss | 2 +-
6 files changed, 55 insertions(+), 4 deletions(-)
create mode 100644 changelog/entries/unreleased/feature/added_a_create_new_data_source_link_at_the_bottom_of_iterate.json
diff --git a/changelog/entries/unreleased/feature/added_a_create_new_data_source_link_at_the_bottom_of_iterate.json b/changelog/entries/unreleased/feature/added_a_create_new_data_source_link_at_the_bottom_of_iterate.json
new file mode 100644
index 0000000000..b6008115ab
--- /dev/null
+++ b/changelog/entries/unreleased/feature/added_a_create_new_data_source_link_at_the_bottom_of_iterate.json
@@ -0,0 +1,9 @@
+{
+ "type": "feature",
+ "message": "Added a 'Create new data source' link at the bottom of iterate/table element dropdowns for quicker data source creation.",
+ "issue_origin": "github",
+ "issue_number": null,
+ "domain": "builder",
+ "bullet_points": [],
+ "created_at": "2025-11-28"
+}
\ No newline at end of file
diff --git a/web-frontend/modules/builder/components/dataSource/DataSourceCreateEditModal.vue b/web-frontend/modules/builder/components/dataSource/DataSourceCreateEditModal.vue
index a40ccdd015..d6c6e270e1 100644
--- a/web-frontend/modules/builder/components/dataSource/DataSourceCreateEditModal.vue
+++ b/web-frontend/modules/builder/components/dataSource/DataSourceCreateEditModal.vue
@@ -174,11 +174,12 @@ export default {
)
)
- await this.actionUpdateDataSource({
+ const updatedDataSource = await this.actionUpdateDataSource({
page: this.dataSourcePage,
dataSourceId: this.dataSource.id,
values: differences,
})
+ this.$emit('updated', updatedDataSource)
// Send data source update element event
this.$store.dispatch('element/emitElementEvent', {
event: ELEMENT_EVENTS.DATA_SOURCE_AFTER_UPDATE,
diff --git a/web-frontend/modules/builder/components/dataSource/DataSourceDropdown.vue b/web-frontend/modules/builder/components/dataSource/DataSourceDropdown.vue
index 05fd06423e..b94e1703e3 100644
--- a/web-frontend/modules/builder/components/dataSource/DataSourceDropdown.vue
+++ b/web-frontend/modules/builder/components/dataSource/DataSourceDropdown.vue
@@ -5,6 +5,7 @@
@@ -37,13 +38,27 @@
}}
+
+
+
+
diff --git a/web-frontend/modules/builder/locales/en.json b/web-frontend/modules/builder/locales/en.json
index b066fbf43e..487ade5c72 100644
--- a/web-frontend/modules/builder/locales/en.json
+++ b/web-frontend/modules/builder/locales/en.json
@@ -996,7 +996,8 @@
"noDataSources": "No data sources available",
"noSharedDataSources": "No shared data sources available",
"shared": "shared",
- "pageOnly": "this page"
+ "pageOnly": "this page",
+ "addNew": "Add new data source"
},
"multiPageContainerElementForm": {
"pagePosition": "Position",
diff --git a/web-frontend/modules/builder/store/dataSource.js b/web-frontend/modules/builder/store/dataSource.js
index b26fbb560a..d4697fe5e5 100644
--- a/web-frontend/modules/builder/store/dataSource.js
+++ b/web-frontend/modules/builder/store/dataSource.js
@@ -140,11 +140,13 @@ const actions = {
dataSource,
values: updatedDataSource,
})
+ return updatedDataSource
} catch (error) {
await dispatch('forceUpdate', { page, dataSource, values: oldValues })
throw error
+ } finally {
+ commit('SET_LOADING', { page, value: false })
}
- commit('SET_LOADING', { page, value: false })
},
async debouncedUpdate(
diff --git a/web-frontend/modules/core/assets/scss/components/select.scss b/web-frontend/modules/core/assets/scss/components/select.scss
index c1370b2f25..7cf3b71e6d 100644
--- a/web-frontend/modules/core/assets/scss/components/select.scss
+++ b/web-frontend/modules/core/assets/scss/components/select.scss
@@ -277,7 +277,7 @@
margin-bottom: 4px;
@include rounded($rounded);
- @include fixed-height(36px, 14px);
+ @include fixed-height(36px, 13px);
@include flex-align-items(6px);
&:hover {
From f3707f3c74ab6c2eefd8a6a033ab7dbdd18a8e10 Mon Sep 17 00:00:00 2001
From: dimmur-brw
Date: Thu, 11 Dec 2025 14:19:47 +0100
Subject: [PATCH 2/2] Workaround for ArrayValueSerializer can fail hard with
ConversionSyntax exception
---
.../baserow/contrib/database/api/fields/serializers.py | 10 +++++++++-
...rd_when_arrayvalueserializer_throws_conversion.json | 9 +++++++++
2 files changed, 18 insertions(+), 1 deletion(-)
create mode 100644 changelog/entries/unreleased/bug/4424_do_not_fail_hard_when_arrayvalueserializer_throws_conversion.json
diff --git a/backend/src/baserow/contrib/database/api/fields/serializers.py b/backend/src/baserow/contrib/database/api/fields/serializers.py
index b06394a8af..358c6df68c 100644
--- a/backend/src/baserow/contrib/database/api/fields/serializers.py
+++ b/backend/src/baserow/contrib/database/api/fields/serializers.py
@@ -8,6 +8,7 @@
from drf_spectacular.types import OpenApiTypes
from drf_spectacular.utils import extend_schema_field
+from loguru import logger
from rest_framework import serializers
from rest_framework.serializers import SkipField, empty
@@ -227,7 +228,14 @@ def __init__(self, child, *args, **kwargs):
self.fields["value"] = child
def to_representation(self, instance):
- return super().to_representation(instance)
+ # Note this is workaround for https://github.com/baserow/baserow/issues/4424
+ # Once we have a proper way to handle this, we can remove this
+ # and return the super().to_representation(instance) directly.
+ try:
+ return super().to_representation(instance)
+ except Exception:
+ logger.exception("Mismatch between field type and value type")
+ return []
class LinkRowValueSerializer(serializers.Serializer):
diff --git a/changelog/entries/unreleased/bug/4424_do_not_fail_hard_when_arrayvalueserializer_throws_conversion.json b/changelog/entries/unreleased/bug/4424_do_not_fail_hard_when_arrayvalueserializer_throws_conversion.json
new file mode 100644
index 0000000000..3ea9b1e530
--- /dev/null
+++ b/changelog/entries/unreleased/bug/4424_do_not_fail_hard_when_arrayvalueserializer_throws_conversion.json
@@ -0,0 +1,9 @@
+{
+ "type": "bug",
+ "message": "Do not fail hard when ArrayValueSerializer throws ConversionSyntax exception",
+ "issue_origin": "github",
+ "issue_number": 4424,
+ "domain": "database",
+ "bullet_points": [],
+ "created_at": "2025-12-11"
+}
\ No newline at end of file