From 25abde9cf813c5490735a04becd1daacc5ef1a4b Mon Sep 17 00:00:00 2001 From: Bram Date: Mon, 16 Feb 2026 15:33:37 +0100 Subject: [PATCH 1/6] Remove local Baserow mount (#4757) --- docker-compose.dev.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 0bb9bea89c..8ce6b80b24 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -20,9 +20,6 @@ services: caddy: volumes: - $PWD/Caddyfile.dev:/etc/caddy/Caddyfile - # For local development, mount the local backend/media folder so Caddy can - # serve files uploaded by the native backend process. - - $PWD/backend/media:/baserow/media backend: image: baserow_backend:dev From eb5640d028f273b587489788e7ed65c54abe0741 Mon Sep 17 00:00:00 2001 From: Jonathan Adeline Date: Mon, 16 Feb 2026 18:55:23 +0400 Subject: [PATCH 2/6] Set up sourcemaps in Sentry (#4773) --- web-frontend/config/nuxt.config.base.ts | 6 +++++ web-frontend/config/nuxt.config.prod.ts | 8 +++++- .../modules/core/plugins/sentry.client.js | 26 +++++++++++++++++-- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/web-frontend/config/nuxt.config.base.ts b/web-frontend/config/nuxt.config.base.ts index b35df64631..168e28c695 100644 --- a/web-frontend/config/nuxt.config.base.ts +++ b/web-frontend/config/nuxt.config.base.ts @@ -3,6 +3,7 @@ import { defineNuxtConfig } from 'nuxt/config' import svgLoader from 'vite-svg-loader' import { nodePolyfills } from 'vite-plugin-node-polyfills' import { locales } from './locales.js' +import pkg from '../package.json' function baserowModuleConfig( premiumBase = '../premium/web-frontend', @@ -55,6 +56,11 @@ export default defineNuxtConfig({ '@baserow': '', }, css: [], + runtimeConfig: { + public: { + version: pkg.version, + }, + }, modules: [...baserow.modules, '@nuxtjs/i18n'], i18n: { strategy: 'no_prefix', diff --git a/web-frontend/config/nuxt.config.prod.ts b/web-frontend/config/nuxt.config.prod.ts index 411c565959..fba1e9172e 100644 --- a/web-frontend/config/nuxt.config.prod.ts +++ b/web-frontend/config/nuxt.config.prod.ts @@ -13,4 +13,10 @@ */ import baseConfig from './nuxt.config.base.ts' -export default baseConfig +export default { + ...baseConfig, + sourcemap: { + server: true, + client: true, + }, +} diff --git a/web-frontend/modules/core/plugins/sentry.client.js b/web-frontend/modules/core/plugins/sentry.client.js index 25a2bfac78..ce833594c4 100644 --- a/web-frontend/modules/core/plugins/sentry.client.js +++ b/web-frontend/modules/core/plugins/sentry.client.js @@ -5,6 +5,7 @@ export default defineNuxtPlugin(async (nuxtApp) => { } const config = useRuntimeConfig() + const appConfig = useAppConfig() const dsn = config.public.sentryDsn if (!dsn || dsn === '') { @@ -13,9 +14,10 @@ export default defineNuxtPlugin(async (nuxtApp) => { const Sentry = await import('@sentry/vue') - Sentry.init({ + const defaultConfig = { app: nuxtApp.vueApp, dsn, + release: `baserow-web-frontend@${config.public.version}`, environment: config.public.sentryEnvironment || 'production', integrations: [ Sentry.browserTracingIntegration({ @@ -29,5 +31,25 @@ export default defineNuxtPlugin(async (nuxtApp) => { tracesSampleRate: 1.0, replaysSessionSampleRate: 0, replaysOnErrorSampleRate: 1.0, - }) + } + + // Merge with user-provided configuration from app config appConfig.sentry.config + // can be used to extend or override defaults + const userConfig = appConfig.sentry?.config || {} + let finalIntegrations = defaultConfig.integrations + if (userConfig.integrations) { + finalIntegrations = [ + ...defaultConfig.integrations, + ...userConfig.integrations, + ] + delete userConfig.integrations + } + + const finalConfig = { + ...defaultConfig, + ...userConfig, + integrations: finalIntegrations, + } + + Sentry.init(finalConfig) }) From c0104fa4a0292f7bfb0ec394edf036063f8c5137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20St=C5=99=C3=ADbn=C3=BD?= Date: Mon, 16 Feb 2026 17:50:17 +0100 Subject: [PATCH 3/6] Fixed FileSizeTooLargeError when importing Airtable database with files (#4653) --- .../contrib/database/airtable/handler.py | 31 +++ .../airtable/test_airtable_handler.py | 227 +++++++++++++++--- .../bug/3635_file_too_large_airtable.json | 9 + 3 files changed, 232 insertions(+), 35 deletions(-) create mode 100644 changelog/entries/unreleased/bug/3635_file_too_large_airtable.json diff --git a/backend/src/baserow/contrib/database/airtable/handler.py b/backend/src/baserow/contrib/database/airtable/handler.py index e2e03f024a..3e5c229825 100644 --- a/backend/src/baserow/contrib/database/airtable/handler.py +++ b/backend/src/baserow/contrib/database/airtable/handler.py @@ -7,6 +7,7 @@ from io import BytesIO, IOBase from typing import Dict, List, Optional, Tuple, Union +from django.conf import settings from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.core.files.storage import Storage @@ -129,6 +130,36 @@ def download_airtable_file( f"File {name} could not be downloaded (HTTP {response.status_code}).", ) + file_size_bytes = None + + # Use Content-Range header for partial content + if response.status_code == HTTPStatus.PARTIAL_CONTENT: + content_range = response.headers.get("Content-Range", "") + try: + total_size = content_range.split("/")[-1] + file_size_bytes = int(total_size) + except (TypeError, ValueError): + raise FileDownloadFailed(f"Could not determine the size of file {name}.") + + # Use Content-Length if the status code is not partial content + if file_size_bytes is None: + content_length = response.headers.get("Content-Length") + if content_length is not None: + try: + file_size_bytes = int(content_length) + except (TypeError, ValueError): + file_size_bytes = None + + # If we cannot determine the size from headers, treat this as a download failure + if file_size_bytes is None: + raise FileDownloadFailed(f"Could not determine the size of file {name}.") + + # Prevent upload to Baserow failures by excluding oversized files + max_size_bytes = settings.BASEROW_FILE_UPLOAD_SIZE_LIMIT_MB + if file_size_bytes > max_size_bytes: + raise FileDownloadFailed( + f"File {name} exceeds the size limit of {settings.BASEROW_FILE_UPLOAD_SIZE_LIMIT_MB} bytes." + ) return response diff --git a/backend/tests/baserow/contrib/database/airtable/test_airtable_handler.py b/backend/tests/baserow/contrib/database/airtable/test_airtable_handler.py index bafb245694..0d6a6c9dbb 100644 --- a/backend/tests/baserow/contrib/database/airtable/test_airtable_handler.py +++ b/backend/tests/baserow/contrib/database/airtable/test_airtable_handler.py @@ -191,29 +191,35 @@ def test_to_baserow_database_export(): ) with open(os.path.join(base_path, "file-sample.txt"), "rb") as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.signed/file-sample.txt", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open(os.path.join(base_path, "file-sample_500kB.doc"), "rb") as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.attachments/e93dc201ce27080d9ad9df5775527d09/93e85b28/file-sample_500kB.doc", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open( os.path.join(base_path, "file_example_JPG_100kB.jpg"), "rb" ) as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.attachments/025730a04991a764bb3ace6d524b45e5/bd61798a/file_example_JPG_100kB.jpg", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open(os.path.join(base_path, "airtable_base.html"), "rb") as file_handler: @@ -442,29 +448,35 @@ def test_download_files_via_endpoint(): ) with open(os.path.join(base_path, "file-sample.txt"), "rb") as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://airtable.com/v0.3/row/recAAA5JwFXBk4swkfB/downloadAttachment", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open(os.path.join(base_path, "file-sample_500kB.doc"), "rb") as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://airtable.com/v0.3/row/rec9Imz1INvNXgRIXn1/downloadAttachment", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open( os.path.join(base_path, "file_example_JPG_100kB.jpg"), "rb" ) as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://airtable.com/v0.3/row/recyANUudYjDqIXdq9Z/downloadAttachment", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open(os.path.join(base_path, "airtable_base.html"), "rb") as file_handler: @@ -551,29 +563,35 @@ def test_config_skip_files(tmpdir, data_fixture): ) with open(os.path.join(base_path, "file-sample.txt"), "rb") as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.signed/file-sample.txt", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open(os.path.join(base_path, "file-sample_500kB.doc"), "rb") as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.attachments/e93dc201ce27080d9ad9df5775527d09/93e85b28/file-sample_500kB.doc", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open( os.path.join(base_path, "file_example_JPG_100kB.jpg"), "rb" ) as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.attachments/025730a04991a764bb3ace6d524b45e5/bd61798a/file_example_JPG_100kB.jpg", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open(os.path.join(base_path, "airtable_base.html"), "rb") as file_handler: @@ -653,29 +671,35 @@ def test_to_baserow_database_export_without_primary_value(): ) with open(os.path.join(base_path, "file-sample.txt"), "rb") as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.signed/file-sample.txt", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open(os.path.join(base_path, "file-sample_500kB.doc"), "rb") as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.attachments/e93dc201ce27080d9ad9df5775527d09/93e85b28/file-sample_500kB.doc", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open( os.path.join(base_path, "file_example_JPG_100kB.jpg"), "rb" ) as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.attachments/025730a04991a764bb3ace6d524b45e5/bd61798a/file_example_JPG_100kB.jpg", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open(os.path.join(base_path, "airtable_base.html"), "rb") as file_handler: @@ -809,29 +833,35 @@ def test_import_from_airtable_to_workspace( storage = FileSystemStorage(location=(str(tmpdir)), base_url="http://localhost") with open(os.path.join(base_path, "file-sample.txt"), "rb") as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.signed/file-sample.txt", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open(os.path.join(base_path, "file-sample_500kB.doc"), "rb") as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.attachments/e93dc201ce27080d9ad9df5775527d09/93e85b28/file-sample_500kB.doc", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open( os.path.join(base_path, "file_example_JPG_100kB.jpg"), "rb" ) as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.attachments/025730a04991a764bb3ace6d524b45e5/bd61798a/file_example_JPG_100kB.jpg", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open(os.path.join(base_path, "airtable_base.html"), "rb") as file_handler: @@ -937,7 +967,10 @@ def test_import_from_airtable_to_workspace( @pytest.mark.django_db @responses.activate -def test_import_from_airtable_to_workspace_with_report_table(data_fixture, tmpdir): +def test_import_from_airtable_to_workspace_file_size_over_limit( + data_fixture, tmpdir, settings +): + settings.BASEROW_FILE_UPLOAD_SIZE_LIMIT_MB = 100 * 1024 # 100kB workspace = data_fixture.create_workspace() base_path = os.path.join( settings.BASE_DIR, "../../../tests/airtable_responses/basic" @@ -945,29 +978,153 @@ def test_import_from_airtable_to_workspace_with_report_table(data_fixture, tmpdi storage = FileSystemStorage(location=(str(tmpdir)), base_url="http://localhost") with open(os.path.join(base_path, "file-sample.txt"), "rb") as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.signed/file-sample.txt", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open(os.path.join(base_path, "file-sample_500kB.doc"), "rb") as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.attachments/e93dc201ce27080d9ad9df5775527d09/93e85b28/file-sample_500kB.doc", - status=200, - body=file_handler.read(), + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open( os.path.join(base_path, "file_example_JPG_100kB.jpg"), "rb" ) as file_handler: + body = file_handler.read() responses.add( responses.GET, "https://dl.airtable.com/.attachments/025730a04991a764bb3ace6d524b45e5/bd61798a/file_example_JPG_100kB.jpg", + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, + ) + + with open(os.path.join(base_path, "airtable_base.html"), "rb") as file_handler: + responses.add( + responses.GET, + "https://airtable.com/appZkaH3aWX3ZjT3b", status=200, body=file_handler.read(), + headers={"Set-Cookie": "brw=test;"}, + ) + + with open( + os.path.join(base_path, "airtable_application.json"), "rb" + ) as file_handler: + responses.add( + responses.GET, + "https://airtable.com/v0.3/application/appZkaH3aWX3ZjT3b/read", + status=200, + body=file_handler.read(), + ) + + with open(os.path.join(base_path, "airtable_table.json"), "rb") as file_handler: + responses.add( + responses.GET, + "https://airtable.com/v0.3/table/tbl7glLIGtH8C8zGCzb/readData", + status=200, + body=file_handler.read(), + ) + + with open( + os.path.join(base_path, "airtable_view_viwDgBCKTEdCQoHTQKH.json"), "rb" + ) as file_handler: + responses.add( + responses.GET, + "https://airtable.com/v0.3/view/viwDgBCKTEdCQoHTQKH/readData", + status=200, + body=file_handler.read(), + ) + + with open( + os.path.join(base_path, "airtable_view_viwBAGnUgZ6X5Eyg5Wf.json"), "rb" + ) as file_handler: + responses.add( + responses.GET, + "https://airtable.com/v0.3/view/viwBAGnUgZ6X5Eyg5Wf/readData", + status=200, + body=file_handler.read(), + ) + + progress = Progress(1000) + + database = AirtableHandler.import_from_airtable_to_workspace( + workspace, + "appZkaH3aWX3ZjT3b", + storage=storage, + progress_builder=progress.create_child_builder(represents_progress=1000), + ) + + assert progress.progress == progress.total + + # Oversized file is skipped + assert UserFile.objects.all().count() == 2 + + # Oversized file is in the report + report_table = database.table_set.last() + assert report_table.name == "Airtable import report" + + model = report_table.get_model(attribute_names=True) + row = model.objects.last() + assert row.object_name == "File" + assert row.scope.value == "Cell" + assert row.table is not None + assert row.error_type.value == "Other" + assert ( + row.message + == "Field: Attachment, Row: 3, File: e93dc201ce27080d9ad9df5775527d09_93e85b28_file-sample_500kB.doc" + ) + + +@pytest.mark.django_db +@responses.activate +def test_import_from_airtable_to_workspace_with_report_table(data_fixture, tmpdir): + workspace = data_fixture.create_workspace() + base_path = os.path.join( + settings.BASE_DIR, "../../../tests/airtable_responses/basic" + ) + storage = FileSystemStorage(location=(str(tmpdir)), base_url="http://localhost") + + with open(os.path.join(base_path, "file-sample.txt"), "rb") as file_handler: + body = file_handler.read() + responses.add( + responses.GET, + "https://dl.airtable.com/.signed/file-sample.txt", + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, + ) + + with open(os.path.join(base_path, "file-sample_500kB.doc"), "rb") as file_handler: + body = file_handler.read() + responses.add( + responses.GET, + "https://dl.airtable.com/.attachments/e93dc201ce27080d9ad9df5775527d09/93e85b28/file-sample_500kB.doc", + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, + ) + + with open( + os.path.join(base_path, "file_example_JPG_100kB.jpg"), "rb" + ) as file_handler: + body = file_handler.read() + responses.add( + responses.GET, + "https://dl.airtable.com/.attachments/025730a04991a764bb3ace6d524b45e5/bd61798a/file_example_JPG_100kB.jpg", + status=206, + body=body, + headers={"Content-Range": f"bytes 0-{len(body) - 1}/{len(body)}"}, ) with open(os.path.join(base_path, "airtable_base.html"), "rb") as file_handler: diff --git a/changelog/entries/unreleased/bug/3635_file_too_large_airtable.json b/changelog/entries/unreleased/bug/3635_file_too_large_airtable.json new file mode 100644 index 0000000000..47d91f7c63 --- /dev/null +++ b/changelog/entries/unreleased/bug/3635_file_too_large_airtable.json @@ -0,0 +1,9 @@ +{ + "type": "bug", + "message": "Fixed FileSizeTooLargeError when importing Airtable database with files.", + "issue_origin": "github", + "issue_number": 3635, + "domain": "database", + "bullet_points": [], + "created_at": "2026-02-04" +} From 815bb560cb60e886fe666c0d1e4ae7fb1524e2fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Pardou?= <571533+jrmi@users.noreply.github.com> Date: Mon, 16 Feb 2026 18:50:54 +0100 Subject: [PATCH 4/6] AB nuxt3 fixes (#4774) * Fix sort in data source * Fix bug in preview authentication * chore: Remove `applicationContext` from table page metadata. * chore: Remove `applicationContext: true` from `definePageMeta` in automation workflow and dashboard pages. --------- Co-authored-by: Jonathan Adeline --- .../automation/pages/automationWorkflow.vue | 1 - .../modules/builder/pages/pageEditor.vue | 1 - .../modules/builder/pages/publicPage.vue | 15 ++----- .../middleware/cleanupApplicationContext.js | 14 ------ web-frontend/modules/core/module.js | 6 --- .../modules/dashboard/pages/dashboard.vue | 1 - web-frontend/modules/database/pages/table.vue | 1 - .../LocalBaserowTableServiceSortForm.vue | 44 ++++++++++--------- 8 files changed, 27 insertions(+), 56 deletions(-) delete mode 100644 web-frontend/modules/core/middleware/cleanupApplicationContext.js diff --git a/web-frontend/modules/automation/pages/automationWorkflow.vue b/web-frontend/modules/automation/pages/automationWorkflow.vue index e5b2d9b458..154000489e 100644 --- a/web-frontend/modules/automation/pages/automationWorkflow.vue +++ b/web-frontend/modules/automation/pages/automationWorkflow.vue @@ -55,7 +55,6 @@ import { StoreItemLookupError } from '@baserow/modules/core/errors' definePageMeta({ layout: 'app', - applicationContext: true, middleware: [ 'settings', 'authenticated', diff --git a/web-frontend/modules/builder/pages/pageEditor.vue b/web-frontend/modules/builder/pages/pageEditor.vue index 9f1df67ced..876ba65c84 100644 --- a/web-frontend/modules/builder/pages/pageEditor.vue +++ b/web-frontend/modules/builder/pages/pageEditor.vue @@ -31,7 +31,6 @@ import _ from 'lodash' definePageMeta({ layout: 'app', - applicationContext: true, middleware: [ 'settings', 'authenticated', diff --git a/web-frontend/modules/builder/pages/publicPage.vue b/web-frontend/modules/builder/pages/publicPage.vue index 220eead8c9..e52012f4d1 100644 --- a/web-frontend/modules/builder/pages/publicPage.vue +++ b/web-frontend/modules/builder/pages/publicPage.vue @@ -21,7 +21,6 @@ import { useHead, useNuxtApp, navigateTo, - useRequestHeaders, createError, } from '#app' import PageContent from '@baserow/modules/builder/components/page/PageContent' @@ -66,14 +65,6 @@ const nuxtApp = useNuxtApp() const { $registry, $i18n } = nuxtApp -const builderId = route.params.builderId - ? parseInt(route.params.builderId, 10) - : null - -const currentRoute = Array.isArray(route.params.pathMatch) - ? route.params.pathMatch.join('/') - : route.params.pathMatch - const requestHostname = useRequestURL().hostname const { data: asyncDataResult, error } = await useAsyncData( @@ -608,15 +599,15 @@ const maybeRedirectUserToLoginPage = async () => { message: $i18n.t('publicPage.authorizedToastMessage'), }) const nextPath = encodeURIComponent(currentPath) - router.push({ path: url, query: { next: nextPath } }) + await router.push({ path: url, query: { next: nextPath } }) } } } -const maybeRedirectToNextPage = () => { +const maybeRedirectToNextPage = async () => { if (route.query.next) { const decodedNext = decodeURIComponent(route.query.next) - router.push(decodedNext) + await router.push(decodedNext) } } diff --git a/web-frontend/modules/core/middleware/cleanupApplicationContext.js b/web-frontend/modules/core/middleware/cleanupApplicationContext.js deleted file mode 100644 index 18f1a2895e..0000000000 --- a/web-frontend/modules/core/middleware/cleanupApplicationContext.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Unselect the current application if we are moving away from an application - * context route (dashboard, database, builder, automation) - */ -export default defineNuxtRouteMiddleware((to) => { - const { $store } = useNuxtApp() - - if ( - !to.meta.applicationContext && - $store.getters['application/getSelected'] - ) { - $store.dispatch('application/unselect') - } -}) diff --git a/web-frontend/modules/core/module.js b/web-frontend/modules/core/module.js index 71946e483e..cfa6a605ed 100644 --- a/web-frontend/modules/core/module.js +++ b/web-frontend/modules/core/module.js @@ -158,12 +158,6 @@ export default defineNuxtModule({ path: resolve('./middleware/workspacesAndApplications'), }) - addRouteMiddleware({ - name: 'cleanupApplicationContext', - path: resolve('./middleware/cleanupApplicationContext'), - global: true, - }) - addRouteMiddleware({ name: 'pendingJobs', path: resolve('./middleware/pendingJobs'), diff --git a/web-frontend/modules/dashboard/pages/dashboard.vue b/web-frontend/modules/dashboard/pages/dashboard.vue index 61d9fd40e4..54b00f091e 100644 --- a/web-frontend/modules/dashboard/pages/dashboard.vue +++ b/web-frontend/modules/dashboard/pages/dashboard.vue @@ -16,7 +16,6 @@ import DashboardContent from '@baserow/modules/dashboard/components/DashboardCon definePageMeta({ layout: 'app', - applicationContext: true, middleware: ['dashboardLoading'], }) diff --git a/web-frontend/modules/database/pages/table.vue b/web-frontend/modules/database/pages/table.vue index 7cd2c5587f..12c7303341 100644 --- a/web-frontend/modules/database/pages/table.vue +++ b/web-frontend/modules/database/pages/table.vue @@ -46,7 +46,6 @@ import { normalizeError } from '@baserow/modules/database/utils/errors' definePageMeta({ name: 'database-table', layout: 'app', - applicationContext: true, middleware: [ 'settings', 'authenticated', diff --git a/web-frontend/modules/integrations/localBaserow/components/services/LocalBaserowTableServiceSortForm.vue b/web-frontend/modules/integrations/localBaserow/components/services/LocalBaserowTableServiceSortForm.vue index e40aa7bf8f..c42ded29d6 100644 --- a/web-frontend/modules/integrations/localBaserow/components/services/LocalBaserowTableServiceSortForm.vue +++ b/web-frontend/modules/integrations/localBaserow/components/services/LocalBaserowTableServiceSortForm.vue @@ -1,6 +1,6 @@