From a9d4cf4108829cf412988233849f310657ea7e6d Mon Sep 17 00:00:00 2001 From: Peter Evans Date: Fri, 12 Dec 2025 14:29:17 +0000 Subject: [PATCH] Improving the Local Baserow integration support for our one-way and two-data synced tables. (#4417) --- .../api/local_baserow/serializers.py | 6 +- .../local_baserow/test_integration_types.py | 1 + ...way_data_sync_support_in_local_basero.json | 9 ++ .../workflow/sidePanels/NodeSidePanel.vue | 1 + .../components/dataSource/DataSourceForm.vue | 1 + .../WorkflowActionWithService.vue | 1 + .../LocalBaserowAggregateRowsForm.vue | 1 + .../services/LocalBaserowGetRowForm.vue | 1 + .../services/LocalBaserowListRowsForm.vue | 1 + .../services/LocalBaserowServiceForm.vue | 17 +-- .../LocalBaserowSignalTriggerServiceForm.vue | 5 + .../services/LocalBaserowTableSelector.vue | 40 +++--- .../LocalBaserowUpsertRowServiceForm.vue | 20 ++- .../mixins/localBaserowService.js | 5 + .../integrations/localBaserow/serviceTypes.js | 35 ++++++ .../modules/integrations/locales/en.json | 3 +- .../localBaserow/serviceTypes.spec.js | 119 ++++++++++++++++++ 17 files changed, 224 insertions(+), 42 deletions(-) create mode 100644 changelog/entries/unreleased/refactor/improved_oneway_and_twoway_data_sync_support_in_local_basero.json diff --git a/backend/src/baserow/contrib/integrations/api/local_baserow/serializers.py b/backend/src/baserow/contrib/integrations/api/local_baserow/serializers.py index 711162a98c..ed68850063 100644 --- a/backend/src/baserow/contrib/integrations/api/local_baserow/serializers.py +++ b/backend/src/baserow/contrib/integrations/api/local_baserow/serializers.py @@ -16,10 +16,14 @@ class LocalBaserowTableSerializer(serializers.ModelSerializer): source="is_data_synced_table", help_text="Whether this table is a data synced table or not.", ) + is_two_way_data_sync = serializers.BooleanField( + source="is_two_way_data_synced_table", + help_text="Whether this table is a two-way data synced table or not.", + ) class Meta: model = Table - fields = ("id", "database_id", "name", "is_data_sync") + fields = ("id", "database_id", "name", "is_data_sync", "is_two_way_data_sync") class LocalBaserowDatabaseSerializer(ApplicationSerializer): diff --git a/backend/tests/baserow/contrib/integrations/local_baserow/test_integration_types.py b/backend/tests/baserow/contrib/integrations/local_baserow/test_integration_types.py index ebe39ffc38..217074970d 100644 --- a/backend/tests/baserow/contrib/integrations/local_baserow/test_integration_types.py +++ b/backend/tests/baserow/contrib/integrations/local_baserow/test_integration_types.py @@ -215,6 +215,7 @@ def test_get_integrations_serializer( "name": table.name, "database_id": table.database_id, "is_data_sync": table.is_data_synced_table, + "is_two_way_data_sync": table.is_two_way_data_synced_table, } ], "views": [ diff --git a/changelog/entries/unreleased/refactor/improved_oneway_and_twoway_data_sync_support_in_local_basero.json b/changelog/entries/unreleased/refactor/improved_oneway_and_twoway_data_sync_support_in_local_basero.json new file mode 100644 index 0000000000..10291944d4 --- /dev/null +++ b/changelog/entries/unreleased/refactor/improved_oneway_and_twoway_data_sync_support_in_local_basero.json @@ -0,0 +1,9 @@ +{ + "type": "refactor", + "message": "Improved one-way and two-way data sync support in Local Baserow actions.", + "issue_origin": "github", + "issue_number": null, + "domain": "integration", + "bullet_points": [], + "created_at": "2025-12-09" +} \ No newline at end of file diff --git a/web-frontend/modules/automation/components/workflow/sidePanels/NodeSidePanel.vue b/web-frontend/modules/automation/components/workflow/sidePanels/NodeSidePanel.vue index 54d0fe08cc..f671c4d6b7 100644 --- a/web-frontend/modules/automation/components/workflow/sidePanels/NodeSidePanel.vue +++ b/web-frontend/modules/automation/components/workflow/sidePanels/NodeSidePanel.vue @@ -27,6 +27,7 @@ small :loading="nodeLoading" :service="node.service" + :service-type="nodeType.serviceType" :application="automation" enable-integration-picker :default-values="node.service" diff --git a/web-frontend/modules/builder/components/dataSource/DataSourceForm.vue b/web-frontend/modules/builder/components/dataSource/DataSourceForm.vue index 58a61a6eb9..dc546616d5 100644 --- a/web-frontend/modules/builder/components/dataSource/DataSourceForm.vue +++ b/web-frontend/modules/builder/components/dataSource/DataSourceForm.vue @@ -64,6 +64,7 @@ ref="subForm" :application="builder" :service="dataSource" + :service-type="serviceType" :default-values="defaultValues" :context-data="integration.context_data" @values-changed="emitChange($event)" diff --git a/web-frontend/modules/builder/components/workflowAction/WorkflowActionWithService.vue b/web-frontend/modules/builder/components/workflowAction/WorkflowActionWithService.vue index 24a58ec0b5..042c73c7b7 100644 --- a/web-frontend/modules/builder/components/workflowAction/WorkflowActionWithService.vue +++ b/web-frontend/modules/builder/components/workflowAction/WorkflowActionWithService.vue @@ -3,6 +3,7 @@ :is="serviceType.formComponent" :application="builder" :service="defaultValues.service" + :service-type="serviceType" :loading="workflowActionLoading" :default-values="defaultValues.service" @values-changed="values.service = { ...workflowAction.service, ...$event }" diff --git a/web-frontend/modules/integrations/localBaserow/components/services/LocalBaserowAggregateRowsForm.vue b/web-frontend/modules/integrations/localBaserow/components/services/LocalBaserowAggregateRowsForm.vue index f5feefc12f..7e36a3f850 100644 --- a/web-frontend/modules/integrations/localBaserow/components/services/LocalBaserowAggregateRowsForm.vue +++ b/web-frontend/modules/integrations/localBaserow/components/services/LocalBaserowAggregateRowsForm.vue @@ -4,6 +4,7 @@
{{ table.name }} @@ -100,6 +96,10 @@ export default { type: Array, required: true, }, + serviceType: { + type: Object, + required: true, + }, displayViewDropdown: { type: Boolean, default: true, @@ -112,11 +112,6 @@ export default { }, default: 'regular', }, - disallowDataSyncedTables: { - type: Boolean, - required: false, - default: false, - }, }, data() { return { @@ -130,11 +125,10 @@ export default { ) }, tables() { - return ( - this.databaseSelected?.tables.filter( - (table) => !(this.disallowDataSyncedTables && table.is_data_sync) - ) || [] - ) + return this.databaseSelected?.tables || [] + }, + supportedServiceTables() { + return this.serviceType.supportedTables(this.tables) }, views() { return ( @@ -159,5 +153,19 @@ export default { immediate: true, }, }, + methods: { + getTableDescription(table) { + if (table.is_two_way_data_sync) { + return this.$t( + 'localBaserowTableSelector.twoWayDataSyncedTableDescription' + ) + } else if (table.is_data_sync) { + return this.$t( + 'localBaserowTableSelector.oneWayDataSyncedTableDescription' + ) + } + return null + }, + }, } diff --git a/web-frontend/modules/integrations/localBaserow/components/services/LocalBaserowUpsertRowServiceForm.vue b/web-frontend/modules/integrations/localBaserow/components/services/LocalBaserowUpsertRowServiceForm.vue index 56edeb5765..27f01db354 100644 --- a/web-frontend/modules/integrations/localBaserow/components/services/LocalBaserowUpsertRowServiceForm.vue +++ b/web-frontend/modules/integrations/localBaserow/components/services/LocalBaserowUpsertRowServiceForm.vue @@ -1,11 +1,11 @@