Files
speckle-server/packages/frontend-2/middleware/requireDiscoverableWorkspaces.ts
T
Kristaps Fabians Geikins 843606775c feat(fe2): parallel middlewares (#5314)
* parallel middlewares foundation + hydration mismatch

* moved to fully parallel middlewares

* a bit less hacky

* some more cleanup

* improved nuxt 4 error formatting

* make parallel middlewares toggleable
2025-08-27 12:38:04 +03:00

37 lines
1.2 KiB
TypeScript

import { activeUserWorkspaceExistenceCheckQuery } from '~/lib/auth/graphql/queries'
import { useApolloClientFromNuxt } from '~~/lib/common/composables/graphql'
import { convertThrowIntoFetchResult } from '~~/lib/common/helpers/graphql'
import { homeRoute, workspaceCreateRoute } from '~~/lib/common/helpers/route'
/**
* Redirect user to /workspaces/actions/create, if they have no discoverable workspaces
*/
export default defineParallelizedNuxtRouteMiddleware(async (to) => {
const isWorkspacesEnabled = useIsWorkspacesEnabled()
if (!isWorkspacesEnabled.value) return
const client = useApolloClientFromNuxt()
const { data } = await client
.query({
query: activeUserWorkspaceExistenceCheckQuery
})
.catch(convertThrowIntoFetchResult)
const hasDiscoverableWorkspaces =
(data?.activeUser?.discoverableWorkspaces?.length ?? 0) > 0 ||
(data?.activeUser?.workspaceJoinRequests?.totalCount ?? 0) > 0
const isMemberOfWorkspace = (data?.activeUser?.workspaces?.totalCount ?? 0) > 0
const isGoingToCreateWorkspace = to.path === workspaceCreateRoute
if (!hasDiscoverableWorkspaces && !isGoingToCreateWorkspace) {
return navigateTo(workspaceCreateRoute)
}
if (isMemberOfWorkspace) {
return navigateTo(homeRoute)
}
})