Files
speckle-server/packages/frontend-2/middleware/requireDiscoverableWorkspaces.ts
T
2025-03-05 13:49:08 +00:00

38 lines
1.3 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()
const isNewPlansEnabled = useWorkspaceNewPlansEnabled()
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 (isNewPlansEnabled && isMemberOfWorkspace) {
return navigateTo(homeRoute)
}
})