Fix: Various workspace and copy fixes (#4519)

This commit is contained in:
Mike
2025-04-22 11:20:48 +02:00
committed by GitHub
parent 2adf7a97ae
commit 943ca6481b
5 changed files with 22 additions and 47 deletions
@@ -10,7 +10,7 @@
<SettingsWorkspacesBillingAddOnsCard
title="Extra data regions"
:subtitle="`${currency === Currency.Gbp ? '£' : '$'}500 per region/year`"
:subtitle="`${currency === Currency.Gbp ? '£' : '$'}500 per region/month`"
info="Unlock per-project data residency by adding additional data regions to your workspace."
disclaimer="Only on Business plan"
:button="contactButton"
@@ -29,7 +29,7 @@
</div>
<FormButton v-else :to="settingsWorkspaceRoutes.billing.route(workspace.slug)">
Upgrade to Plus
Upgrade to Business
</FormButton>
</div>
@@ -37,7 +37,7 @@
v-if="!workspace.hasAccessToSSO && workspace.sso?.provider?.id"
class="bg-foundation"
>
SSO access requires an active Plus or Business subscription.
SSO access requires an active Business subscription.
</CommonCard>
<!-- Existing Provider Configuration -->
@@ -2,7 +2,6 @@ import { graphql } from '~/lib/common/generated/gql/gql'
import { useQuery } from '@vue/apollo-composable'
import { workspaceLimitsQuery } from '~/lib/workspaces/graphql/queries'
import { WorkspacePlanConfigs } from '@speckle/shared'
import type { WorkspacePlanLimits_WorkspaceFragment } from '~/lib/common/generated/gql/graphql'
graphql(`
fragment WorkspacePlanLimits_Workspace on Workspace {
@@ -14,29 +13,20 @@ graphql(`
}
`)
export const useLimitsState = () =>
useState<WorkspacePlanLimits_WorkspaceFragment | null>('limits', () => null)
export const useWorkspaceLimits = (slug: string) => {
const limitsState = useLimitsState()
const { onResult } = useQuery(
const { result } = useQuery(
workspaceLimitsQuery,
() => ({
slug
}),
() => ({
enabled: !!slug && slug !== limitsState.value?.slug
enabled: !!slug
})
)
onResult((result) => {
limitsState.value = result.data?.workspaceBySlug
})
// Plan limits
const limits = computed(() => {
const planName = limitsState.value?.plan?.name
const planName = result.value?.workspaceBySlug?.plan?.name
if (!planName)
return {
projectCount: 0,
@@ -9,7 +9,6 @@ import {
isNewWorkspacePlan,
doesPlanIncludeUnlimitedProjectsAddon
} from '@speckle/shared'
import type { WorkspacesPlan_WorkspaceFragment } from '~/lib/common/generated/gql/graphql'
import {
WorkspacePlanStatuses,
BillingInterval
@@ -49,30 +48,22 @@ graphql(`
}
`)
export const usePlanState = () =>
useState<WorkspacesPlan_WorkspaceFragment | null>('plan', () => null)
export const useWorkspacePlan = (slug: string) => {
const planState = usePlanState()
const isBillingIntegrationEnabled = useIsBillingIntegrationEnabled()
const { prices } = useActiveWorkspacePlanPrices()
const { onResult } = useQuery(
const { result } = useQuery(
workspacePlanQuery,
() => ({
slug
}),
() => ({
enabled: isBillingIntegrationEnabled.value && slug !== planState.value?.slug
enabled: isBillingIntegrationEnabled.value
})
)
onResult((result) => {
planState.value = result.data?.workspaceBySlug
})
const subscription = computed(() => planState.value?.subscription)
const plan = computed(() => planState.value?.plan)
const subscription = computed(() => result.value?.workspaceBySlug?.subscription)
const plan = computed(() => result.value?.workspaceBySlug?.plan)
const currency = computed(() => subscription.value?.currency || 'usd')
const isFreePlan = computed(() => plan.value?.name === UnpaidWorkspacePlans.Free)
@@ -1,7 +1,6 @@
import { graphql } from '~/lib/common/generated/gql/gql'
import { useQuery } from '@vue/apollo-composable'
import { workspaceUsageQuery } from '~/lib/workspaces/graphql/queries'
import type { WorkspaceUsage_WorkspaceFragment } from '~/lib/common/generated/gql/graphql'
graphql(`
fragment WorkspaceUsage_Workspace on Workspace {
@@ -30,39 +29,34 @@ graphql(`
}
`)
export const useUsageState = () =>
useState<WorkspaceUsage_WorkspaceFragment | null>('usage', () => null)
export const useWorkspaceUsage = (slug: string) => {
const usageState = useUsageState()
const { onResult } = useQuery(
const { result } = useQuery(
workspaceUsageQuery,
() => ({
slug
}),
() => ({
enabled: !!slug && slug !== usageState.value?.slug
enabled: !!slug
})
)
onResult((result) => {
usageState.value = result.data?.workspaceBySlug
})
const projectCount = computed(
() => result.value?.workspaceBySlug?.plan?.usage.projectCount ?? 0
)
const modelCount = computed(
() => result.value?.workspaceBySlug?.plan?.usage.modelCount ?? 0
)
const projectCount = computed(() => usageState.value?.plan?.usage.projectCount ?? 0)
const modelCount = computed(() => usageState.value?.plan?.usage.modelCount ?? 0)
const teamCount = computed(() => usageState.value?.team?.totalCount ?? 0)
const teamCount = computed(() => result.value?.workspaceBySlug?.team?.totalCount ?? 0)
const adminCount = computed(
() => usageState.value?.teamByRole.admins?.totalCount ?? 0
() => result.value?.workspaceBySlug?.teamByRole.admins?.totalCount ?? 0
)
const memberCount = computed(
() => usageState.value?.teamByRole.members?.totalCount ?? 0
() => result.value?.workspaceBySlug?.teamByRole.members?.totalCount ?? 0
)
const guestCount = computed(
() => usageState.value?.teamByRole.guests?.totalCount ?? 0
() => result.value?.workspaceBySlug?.teamByRole.guests?.totalCount ?? 0
)
return {