@@ -57,7 +64,10 @@ export default {
},
},
methods: {
- onHome() {
+ clearAndNavigate(to) {
+ window.location.replace(this.$router.resolve(to).fullPath)
+ },
+ async onHome() {
if (
['application-builder-page', 'application-builder-preview'].includes(
this.routeName
@@ -68,7 +78,7 @@ export default {
this.$router.go(0)
} else {
// Navigate to the home route
- this.$router.push({
+ this.clearAndNavigate({
name: this.routeName,
params: { pathMatch: '' },
query: null, // Remove query parameters
diff --git a/web-frontend/modules/builder/middleware.js b/web-frontend/modules/builder/middleware.js
deleted file mode 100644
index 644f74f673..0000000000
--- a/web-frontend/modules/builder/middleware.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/**
- * Nothing here yet
- */
diff --git a/web-frontend/modules/builder/middleware/selectWorkspaceBuilderPage.js b/web-frontend/modules/builder/middleware/selectWorkspaceBuilderPage.js
index 4dc72feee8..0a50ddeaaa 100644
--- a/web-frontend/modules/builder/middleware/selectWorkspaceBuilderPage.js
+++ b/web-frontend/modules/builder/middleware/selectWorkspaceBuilderPage.js
@@ -1,4 +1,5 @@
import { StoreItemLookupError } from '@baserow/modules/core/errors'
+import { normalizeError } from '@baserow/modules/database/utils/errors'
export default defineNuxtRouteMiddleware(async (to, from) => {
const { $store, $i18n } = useNuxtApp()
@@ -18,13 +19,24 @@ export default defineNuxtRouteMiddleware(async (to, from) => {
pageId,
})
} catch (e) {
- if (e.response === undefined && !(e instanceof StoreItemLookupError)) {
+ const isStoreLookupError = e instanceof StoreItemLookupError
+ if (e.response === undefined && !isStoreLookupError) {
throw e
}
+ const errorStatus =
+ isStoreLookupError || !e.response?.status ? 404 : e.response.status
+
throw createError({
- statusCode: 404,
- message: $i18n.t('pageEditor.pageNotFound'),
+ statusCode: errorStatus,
+ message:
+ errorStatus === 404
+ ? $i18n.t('pageEditor.pageNotFound')
+ : normalizeError(e).message,
+ data: {
+ report: errorStatus !== 404,
+ },
+ fatal: true,
})
}
})
diff --git a/web-frontend/modules/builder/pages/pageEditor.vue b/web-frontend/modules/builder/pages/pageEditor.vue
index 64c8ceba56..b47b11eb51 100644
--- a/web-frontend/modules/builder/pages/pageEditor.vue
+++ b/web-frontend/modules/builder/pages/pageEditor.vue
@@ -12,6 +12,7 @@ import { useHead, useAsyncData } from '#imports'
import { computed } from 'vue'
import { onBeforeRouteUpdate, onBeforeRouteLeave } from 'vue-router'
import { StoreItemLookupError } from '@baserow/modules/core/errors'
+import { normalizeError } from '@baserow/modules/database/utils/errors'
import { DataProviderType } from '@baserow/modules/core/dataProviderTypes'
import { BuilderApplicationType } from '@baserow/modules/builder/applicationTypes'
import _ from 'lodash'
@@ -46,8 +47,8 @@ const {
() => `page-editor-${route.params.builderId}-${route.params.pageId}`,
async () => {
// The objects are selected by the middleware
- const loadedBuilder = $store.getters['application/getSelected']
const loadedWorkspace = $store.getters['workspace/getSelected']
+ const loadedBuilder = $store.getters['application/getSelected']
const page = $store.getters['page/getSelected']
try {
@@ -64,6 +65,10 @@ const {
throw createError({
statusCode: 404,
message: $i18n.t('pageEditor.pageNotFound'),
+ data: {
+ report: false,
+ },
+ fatal: true,
})
}
@@ -95,9 +100,18 @@ const {
throw e
}
+ const statusCode = e.response?.status || 500
+
throw createError({
- statusCode: 404,
- message: $i18n.t('pageEditor.pageNotFound'),
+ statusCode,
+ message:
+ statusCode === 404
+ ? $i18n.t('pageEditor.pageNotFound')
+ : normalizeError(e).message,
+ data: {
+ report: statusCode >= 500,
+ },
+ fatal: true,
})
}
}
diff --git a/web-frontend/modules/builder/pages/publicPage.vue b/web-frontend/modules/builder/pages/publicPage.vue
index ec15563b57..d7a4aa0d19 100644
--- a/web-frontend/modules/builder/pages/publicPage.vue
+++ b/web-frontend/modules/builder/pages/publicPage.vue
@@ -98,6 +98,10 @@ const {
throw createError({
statusCode: 404,
message: $i18n.t('publicPage.siteNotFound'),
+ data: {
+ report: false,
+ },
+ fatal: true,
})
}
@@ -174,6 +178,10 @@ const {
throw createError({
statusCode: authError.code,
message: authError.message,
+ data: {
+ report: false,
+ },
+ fatal: true,
})
}
}
@@ -191,6 +199,10 @@ const {
throw createError({
statusCode: 404,
message: $i18n.t('publicPage.pageNotFound'),
+ data: {
+ report: false,
+ },
+ fatal: true,
})
}
@@ -200,6 +212,10 @@ const {
throw createError({
statusCode: 404,
message: $i18n.t('publicPage.pageNotFound'),
+ data: {
+ report: false,
+ },
+ fatal: true,
})
}
@@ -239,6 +255,10 @@ const {
throw createError({
statusCode: 404,
statusMessage: $i18n.t('publicPage.pageNotFound'),
+ data: {
+ report: false,
+ },
+ fatal: true,
})
} else {
throw error
diff --git a/web-frontend/modules/core/components/DefaultErrorPage.vue b/web-frontend/modules/core/components/DefaultErrorPage.vue
index e8384e048e..7be8bc53c1 100644
--- a/web-frontend/modules/core/components/DefaultErrorPage.vue
+++ b/web-frontend/modules/core/components/DefaultErrorPage.vue
@@ -1,9 +1,12 @@
@@ -17,30 +20,32 @@
icon="iconoir-redo"
@click="refresh"
>
- {{ $t('errorLayout.refresh') }}
+ {{ $t('errorLayout.refresh') }}
+
+ {{ $t('errorLayout.backLogin') }}
+
{{ message }}