From a3bde3f0254a8e4ac2dadb9a2a996b6d33294940 Mon Sep 17 00:00:00 2001 From: Jonathan Adeline Date: Thu, 12 Feb 2026 19:18:06 +0400 Subject: [PATCH 1/8] Fix hydration mismatch (#4739) * refactor: replace custom `uuid` generation with `useId` composable in `setup()` * update snapshot --- web-frontend/modules/core/components/Checkbox.vue | 9 ++++----- .../export/__snapshots__/exportTableModal.spec.js.snap | 8 ++++---- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/web-frontend/modules/core/components/Checkbox.vue b/web-frontend/modules/core/components/Checkbox.vue index c039dd61e9..ffbb13a714 100644 --- a/web-frontend/modules/core/components/Checkbox.vue +++ b/web-frontend/modules/core/components/Checkbox.vue @@ -55,7 +55,7 @@ diff --git a/web-frontend/modules/database/pages/table.vue b/web-frontend/modules/database/pages/table.vue index c3c4d06c20..07112b774d 100644 --- a/web-frontend/modules/database/pages/table.vue +++ b/web-frontend/modules/database/pages/table.vue @@ -46,6 +46,7 @@ import { normalizeError } from '@baserow/modules/database/utils/errors' definePageMeta({ name: 'database-table', layout: 'app', + applicationContext: true, middleware: [ 'settings', 'authenticated', @@ -77,9 +78,8 @@ function parseIntOrNull(x) { return x != null ? parseInt(x) : null } -const shouldCleanup = ref(false) - // Database and table is selected by the middleware + const database = computed(() => $store.getters['application/getSelected']) const table = computed(() => $store.getters['table/getSelected']) @@ -211,20 +211,16 @@ onBeforeUnmount(() => { if (table.value) { $realtime.unsubscribe('table', { table_id: table.value.id }) } - if (shouldCleanup.value) { - $store.dispatch('view/unselect') - $store.dispatch('table/unselect') - $store.dispatch('application/unselect') - } }) /** * beforeRouteLeave() * - * Mark for cleanup when leaving page. + * Unselect when leaving page. */ -onBeforeRouteLeave((_to, _from) => { - shouldCleanup.value = true +onBeforeRouteLeave((to, from) => { + $store.dispatch('view/unselect') + $store.dispatch('table/unselect') }) onBeforeRouteUpdate(async (to, from, next) => { diff --git a/web-frontend/modules/database/store/table.js b/web-frontend/modules/database/store/table.js index fd60563f9c..225e67310e 100644 --- a/web-frontend/modules/database/store/table.js +++ b/web-frontend/modules/database/store/table.js @@ -232,6 +232,7 @@ export const actions = { DATABASE_ACTION_SCOPES.table(table.id), { root: true } ) + commit('UNSELECT') commit('SET_SELECTED', { database, table }) }, /** From 3a50d61db60fd8b0a44b1366eb504ae83a1d6763 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, 12 Feb 2026 16:57:03 +0100 Subject: [PATCH 3/8] Fix impersonate feature (#4741) --- web-frontend/modules/core/module.js | 41 ---------- web-frontend/modules/core/pages/root.vue | 1 + web-frontend/modules/core/pages/workspace.vue | 82 +++++++------------ web-frontend/modules/core/plugins.js | 4 +- 4 files changed, 34 insertions(+), 94 deletions(-) diff --git a/web-frontend/modules/core/module.js b/web-frontend/modules/core/module.js index 29c9b057d8..4f73866915 100644 --- a/web-frontend/modules/core/module.js +++ b/web-frontend/modules/core/module.js @@ -1,15 +1,10 @@ import { defineNuxtModule, addPlugin, - addServerHandler, - extendViteConfig, - addComponent, extendPages, addLayout, createResolver, addRouteMiddleware, - addTemplate, - install, } from '@nuxt/kit' import { routes } from './routes' import _ from 'lodash' @@ -19,7 +14,6 @@ import { readFileSync, writeFileSync, mkdirSync } from 'node:fs' import { createRequire } from 'node:module' import head from './head' -// import { routes as customRoutes } from './routes' import { locales } from '../../config/locales.js' @@ -38,27 +32,6 @@ export default defineNuxtModule({ nuxt: '^3.0.0', }, }, - /*moduleDependencies: { - '@nuxtjs/i18n': { - defaults: { - strategy: 'no_prefix', - defaultLocale: 'en', - detectBrowserLanguage: { - useCookie: true, - cookieKey: 'i18n-language', - }, - langDir, - locales: ['en', 'fr'], - vueI18n: { - messages: { - en: { login: { title: 'Translated title' } }, - fr: { login: { title: 'Titre traduit' } }, - }, - }, - trailingSlash: true, - }, - }, - },*/ // Default configuration options for your module, can also be a function returning those defaults: {}, // Shorthand sugar to register Nuxt hooks @@ -67,20 +40,6 @@ export default defineNuxtModule({ setup(moduleOptions, nuxt) { const { resolve } = createResolver(import.meta.url) - /*nuxt.hook('vue:error', (err, instance, info) => { - console.error('Vue Error:', err, info) - }) - - nuxt.hook('app:error', (err) => { - console.error('Nuxt App Error:', err) - }) - nuxt.hook('router:error', (err) => { - console.error('Router Error:', err) - })*/ - - // Universal mode - //nuxt.options.ssr = true - // Merge du head nuxt.options.app.head = _.merge({}, head, nuxt.options.app.head) diff --git a/web-frontend/modules/core/pages/root.vue b/web-frontend/modules/core/pages/root.vue index 409f2fb5e7..db796efa23 100644 --- a/web-frontend/modules/core/pages/root.vue +++ b/web-frontend/modules/core/pages/root.vue @@ -9,6 +9,7 @@ definePageMeta({ middleware: [ 'settings', 'authenticated', + 'impersonate', 'workspacesAndApplications', 'pendingJobs', ], diff --git a/web-frontend/modules/core/pages/workspace.vue b/web-frontend/modules/core/pages/workspace.vue index c5611bf029..67648cc6d6 100644 --- a/web-frontend/modules/core/pages/workspace.vue +++ b/web-frontend/modules/core/pages/workspace.vue @@ -14,7 +14,8 @@ ref="rename" :value="selectedWorkspace.name" @change="renameWorkspace(selectedWorkspace, $event)" - > + > + @@ -91,7 +92,8 @@ class="dashboard__suggested-template" view-more @click="$refs.templateModal.show()" - > + > +
@@ -162,8 +164,9 @@ :workspace="selectedWorkspace" @click="selectApplication(application)" /> -
+
+ +
+ > +