1
0
mirror of https://gitlab.com/bramw/baserow.git synced 2024-11-24 16:36:46 +00:00
bramw_baserow/web-frontend/modules/database/middleware/tableLoading.js
2024-01-23 19:55:21 +00:00

49 lines
1.8 KiB
JavaScript

import { getDefaultView } from '@baserow/modules/database/utils/view'
/**
* Middleware that changes the table loading state to true before the route
* changes. That way we can show a loading animation to the user when switching
* between views.
*/
export default async function ({ route, from, store, app }) {
function parseIntOrNull(x) {
return x != null ? parseInt(x) : null
}
const toDatabaseId = parseIntOrNull(route?.params?.databaseId)
const toDatabase = store.getters['application/get'](toDatabaseId)
// If the database is not found, it means that the user has no access to it, or
// it does not exist. In this case, we don't have to do anything with the table
// loading state because the table page is going to fail with a 404.
if (!toDatabase) {
return
}
const toWorkspaceId = toDatabase.workspace.id
const toTableId = parseIntOrNull(route.params.tableId)
const toViewId = parseIntOrNull(route.params.viewId)
const toRowId = parseIntOrNull(route.params.rowId)
const fromTableId = parseIntOrNull(from?.params?.tableId)
const fromViewId = parseIntOrNull(from?.params?.viewId)
const differentTableId = fromTableId !== toTableId
const differentViewId = fromViewId !== toViewId
// Table links might not include the viewId in params (viewId is null), but
// the end result will be to be redirected to the default view, so don't show
// the loading animation if that's the case.
const viewToUse = getDefaultView(app, store, toWorkspaceId, toRowId !== null)
const willRedirectToSameViewId =
fromViewId && toViewId === null && fromViewId === viewToUse?.id
if (
!from ||
differentTableId ||
(!differentTableId && differentViewId && !willRedirectToSameViewId)
) {
await store.dispatch('table/setLoading', true)
}
}