Move composables to their own file

This commit is contained in:
andrewwallacespeckle
2025-04-02 16:49:55 +02:00
parent 293cdc0575
commit f2a3bcb4b7
7 changed files with 94 additions and 92 deletions
@@ -76,7 +76,7 @@ import {
useWorkspaceCustomDataResidencyDisclaimer,
RegionStaticDataDisclaimerVariant
} from '~/lib/workspaces/composables/region'
import { useWorkspacePlanLimits } from '~/lib/workspaces/composables/plan'
import { useWorkspacePlanLimits } from '~/lib/workspaces/composables/limits'
graphql(`
fragment ProjectsMoveToWorkspaceDialog_Workspace on Workspace {
@@ -30,7 +30,9 @@
readonly
@created="emit('mounted')"
/>
<ViewerAnchoredPointThreadCommentLimitAlert :limit="10" />
<ViewerAnchoredPointThreadCommentAttachments
:attachments="comment"
:project-id="projectId"
@@ -7,16 +7,20 @@
</template>
<script setup lang="ts">
import type { AlertAction } from '@speckle/ui-components'
import { useNavigation } from '~/lib/navigation/composables/navigation'
import { settingsWorkspaceRoutes } from '~~/lib/common/helpers/route'
defineProps<{
limit: number
}>()
const { activeWorkspaceSlug } = useNavigation()
const actions = computed((): AlertAction[] => [
{
title: 'Upgrade',
onClick: () => navigateTo(settingsWorkspaceRoutes.billing)
onClick: () =>
navigateTo(settingsWorkspaceRoutes.billing.route(activeWorkspaceSlug.value || ''))
}
])
</script>
@@ -89,10 +89,8 @@ import type {
import { usePaginatedQuery } from '~/lib/common/composables/graphql'
import { moveProjectsDialogQuery } from '~~/lib/workspaces/graphql/queries'
import { Roles } from '@speckle/shared'
import {
useWorkspacePlanLimits,
useGetWorkspacePlanUsage
} from '~/lib/workspaces/composables/plan'
import { useWorkspacePlanLimits } from '~/lib/workspaces/composables/limits'
import { useGetWorkspacePlanUsage } from '~/lib/workspaces/composables/usage'
graphql(`
fragment MoveProjectsDialog_Workspace on Workspace {
@@ -0,0 +1,53 @@
export const useWorkspacePlanLimits = (
projectCount: ComputedRef<number>,
modelCount: ComputedRef<number>
) => {
const projectLimit = computed(() => 3)
const modelLimit = computed(() => 8)
const remainingProjects = computed(() => {
return projectLimit.value - projectCount.value
})
const remainingModels = computed(() => {
return modelLimit.value - modelCount.value
})
const limitType = computed(() => {
if (projectCount.value > projectLimit.value) {
return 'project'
}
if (modelCount.value > modelLimit.value) {
return 'model'
}
return null
})
const activeLimit = computed(() => {
const limit =
limitType.value === 'project'
? projectLimit.value
: limitType.value === 'model'
? modelLimit.value
: null
return limit
})
const canAddProject = computed(
() => remainingProjects.value !== null && remainingProjects.value > 0
)
const canAddModels = computed(
() => remainingModels.value !== null && remainingModels.value > 0
)
return {
projectLimit,
modelLimit,
remainingProjects,
remainingModels,
canAddProject,
canAddModels,
limitType,
activeLimit
}
}
@@ -1,8 +1,5 @@
import { graphql } from '~~/lib/common/generated/gql'
import {
workspacePlanLimitsQuery,
workspacePlanQuery
} from '~~/lib/workspaces/graphql/queries'
import { workspacePlanQuery } from '~~/lib/workspaces/graphql/queries'
import { useQuery } from '@vue/apollo-composable'
import {
isNewWorkspacePlan,
@@ -158,85 +155,3 @@ graphql(`
}
}
`)
export const useGetWorkspacePlanUsage = (slug: string) => {
const { result } = useQuery(
workspacePlanLimitsQuery,
() => ({
slug
}),
() => ({
enabled: !!slug
})
)
const projectCount = computed(
() => result.value?.workspaceBySlug?.projects?.totalCount ?? 0
)
const modelCount = computed(
() =>
result.value?.workspaceBySlug?.projects?.items?.reduce(
(total, project) => total + (project?.models?.totalCount ?? 0),
0
) ?? 0
)
return {
projectCount,
modelCount
}
}
export const useWorkspacePlanLimits = (
projectCount: ComputedRef<number>,
modelCount: ComputedRef<number>
) => {
const projectLimit = computed(() => 3)
const modelLimit = computed(() => 8)
const remainingProjects = computed(() => {
return projectLimit.value - projectCount.value
})
const remainingModels = computed(() => {
return modelLimit.value - modelCount.value
})
const limitType = computed(() => {
if (projectCount.value > projectLimit.value) {
return 'project'
}
if (modelCount.value > modelLimit.value) {
return 'model'
}
return null
})
const activeLimit = computed(() => {
const limit =
limitType.value === 'project'
? projectLimit.value
: limitType.value === 'model'
? modelLimit.value
: null
return limit
})
const canAddProject = computed(
() => remainingProjects.value !== null && remainingProjects.value > 0
)
const canAddModels = computed(
() => remainingModels.value !== null && remainingModels.value > 0
)
return {
projectLimit,
modelLimit,
remainingProjects,
remainingModels,
canAddProject,
canAddModels,
limitType,
activeLimit
}
}
@@ -0,0 +1,30 @@
import { useQuery } from '@vue/apollo-composable'
import { workspacePlanLimitsQuery } from '~/lib/workspaces/graphql/queries'
export const useGetWorkspacePlanUsage = (slug: string) => {
const { result } = useQuery(
workspacePlanLimitsQuery,
() => ({
slug
}),
() => ({
enabled: !!slug
})
)
const projectCount = computed(
() => result.value?.workspaceBySlug?.projects?.totalCount ?? 0
)
const modelCount = computed(
() =>
result.value?.workspaceBySlug?.projects?.items?.reduce(
(total, project) => total + (project?.models?.totalCount ?? 0),
0
) ?? 0
)
return {
projectCount,
modelCount
}
}