Files
speckle-server/packages/frontend-2/middleware/requireDiscoverableWorkspaces.ts
T
2025-05-19 15:35:16 +02: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 defineNuxtRouteMiddleware(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)
}
})