diff --git a/backend/src/baserow/contrib/integrations/ai/integration_types.py b/backend/src/baserow/contrib/integrations/ai/integration_types.py index a124c6d1cf..fb94806863 100644 --- a/backend/src/baserow/contrib/integrations/ai/integration_types.py +++ b/backend/src/baserow/contrib/integrations/ai/integration_types.py @@ -9,6 +9,7 @@ from baserow.contrib.integrations.ai.models import AIIntegration from baserow.core.integrations.registries import IntegrationType from baserow.core.integrations.types import IntegrationDict +from baserow.core.models import Application class AIIntegrationType(IntegrationType): @@ -98,6 +99,30 @@ def is_provider_overridden( return provider_type in integration.ai_settings + def import_serialized( + self, + application: Application, + serialized_values: Dict[str, Any], + id_mapping: Dict, + files_zip=None, + storage=None, + cache=None, + ) -> AIIntegration: + if cache is None: + cache = {} + + # AI settings are sensitive data, the serialized data will set it `None`. + serialized_values["ai_settings"] = serialized_values["ai_settings"] or {} + + return super().import_serialized( + application, + serialized_values, + id_mapping, + files_zip=files_zip, + storage=storage, + cache=cache, + ) + def export_serialized( self, instance: AIIntegration, diff --git a/backend/tests/baserow/contrib/integrations/ai/test_ai_integration_type.py b/backend/tests/baserow/contrib/integrations/ai/test_ai_integration_type.py index 9a8f2f9942..5a88dd6bcc 100644 --- a/backend/tests/baserow/contrib/integrations/ai/test_ai_integration_type.py +++ b/backend/tests/baserow/contrib/integrations/ai/test_ai_integration_type.py @@ -221,17 +221,34 @@ def test_ai_integration_export_serialized_exclude_sensitive(data_fixture): def test_ai_integration_import_serialized(data_fixture): user = data_fixture.create_user() application = data_fixture.create_builder_application(user=user) - integration_type = AIIntegrationType() + integration = IntegrationService().create_integration( + user, + integration_type, + application=application, + ai_settings={ + "openai": { + "api_key": "sk-secret123", + "models": ["gpt-4"], + } + }, + ) - serialized_data = { - "id": 1, - "type": "ai", - "ai_settings": {}, # Empty on import (will inherit from workspace) - } + serialized = json.loads( + json.dumps( + integration_type.export_serialized( + integration, + import_export_config=ImportExportConfig( + include_permission_data=False, + reduce_disk_space_usage=False, + exclude_sensitive_data=True, + ), + ) + ) + ) imported_integration = integration_type.import_serialized( - application, serialized_data, {}, lambda x, d: x + application, serialized, {}, lambda x, d: x ) assert imported_integration.ai_settings == {} diff --git a/changelog/entries/unreleased/bug/resolved_a_bug_in_the_ai_integration_which_prevented_workspa.json b/changelog/entries/unreleased/bug/resolved_a_bug_in_the_ai_integration_which_prevented_workspa.json new file mode 100644 index 0000000000..bf2d796a24 --- /dev/null +++ b/changelog/entries/unreleased/bug/resolved_a_bug_in_the_ai_integration_which_prevented_workspa.json @@ -0,0 +1,9 @@ +{ + "type": "bug", + "message": "Resolved a bug in the AI integration which prevented workspaces from being exported and then imported correctly.", + "issue_origin": "github", + "issue_number": null, + "domain": "core", + "bullet_points": [], + "created_at": "2026-02-19" +} \ No newline at end of file diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/crudTable/filters/DateFilter.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/crudTable/filters/DateFilter.vue index e241634fc1..3d27d8f995 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/crudTable/filters/DateFilter.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/crudTable/filters/DateFilter.vue @@ -29,7 +29,7 @@ :monday-first="true" :use-utc="true" :model-value="dateObject" - :language="$i18n.locale" + :language="datePickerLanguage" :disabled-dates="disableDates" class="datepicker" @update:model-value=" @@ -52,8 +52,7 @@ import { getDateMomentFormat, getDateHumanReadableFormat, } from '@baserow/modules/database/utils/date' -// TODO MIG -//import { en, fr } from 'vuejs3-datepicker' +import { useDatePickerLanguage } from '@baserow/modules/core/composables/useDatePickerLanguage' export default { name: 'DateFilter', @@ -77,7 +76,7 @@ export default { }, }, setup() { - return { v$: useVuelidate({ $lazy: true }) } + return { v$: useVuelidate({ $lazy: true }), ...useDatePickerLanguage() } }, data() { return { diff --git a/web-frontend/modules/core/components/sidebar/Sidebar.vue b/web-frontend/modules/core/components/sidebar/Sidebar.vue index 2358e3f48f..cd22131db3 100644 --- a/web-frontend/modules/core/components/sidebar/Sidebar.vue +++ b/web-frontend/modules/core/components/sidebar/Sidebar.vue @@ -7,7 +7,7 @@ >