From 2bb1250bffd77184d19aeefba844e1a5ef5a98c3 Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Tue, 15 Apr 2025 14:02:48 +0100 Subject: [PATCH 1/2] Fix select project permissions --- .../workspace/moveProject/SelectProject.vue | 54 ++++--------------- 1 file changed, 11 insertions(+), 43 deletions(-) diff --git a/packages/frontend-2/components/workspace/moveProject/SelectProject.vue b/packages/frontend-2/components/workspace/moveProject/SelectProject.vue index 07c785565..e7b557c16 100644 --- a/packages/frontend-2/components/workspace/moveProject/SelectProject.vue +++ b/packages/frontend-2/components/workspace/moveProject/SelectProject.vue @@ -124,19 +124,24 @@ const hasMoveableProjects = computed(() => moveableProjects.value.length > 0) const isProjectDisabled = computed( () => (project: WorkspaceMoveProjectManager_ProjectFragment) => { - if (!props.workspaceSlug) { - return false - } - if (isProjectLimitReached.value(project)) { + if (project.permissions.canMoveToWorkspace.authorized) { return false } + return true + } +) - return !canMoveProject.value(project) +const getProjectTooltip = computed( + () => (project: WorkspaceMoveProjectManager_ProjectFragment) => { + if (project.permissions.canMoveToWorkspace.authorized) { + return undefined + } + return project.permissions.canMoveToWorkspace.message } ) const onMoveClick = (project: WorkspaceMoveProjectManager_ProjectFragment) => { - if (props.workspaceSlug && isProjectLimitReached.value(project)) { + if (props.workspaceSlug) { showLimitDialog.value = true return } @@ -145,41 +150,4 @@ const onMoveClick = (project: WorkspaceMoveProjectManager_ProjectFragment) => { } const showLoading = computed(() => loading.value && userProjects.value.length === 0) - -const getProjectPermission = (project: WorkspaceMoveProjectManager_ProjectFragment) => { - return ( - project.permissions?.canMoveToWorkspace || { - authorized: false, - code: '', - message: '' - } - ) -} - -const canMoveProject = computed( - () => (project: WorkspaceMoveProjectManager_ProjectFragment) => { - const permission = getProjectPermission(project) - return permission.authorized - } -) - -const isProjectLimitReached = computed( - () => (project: WorkspaceMoveProjectManager_ProjectFragment) => { - const permission = getProjectPermission(project) - return permission.code === 'WorkspaceLimitsReached' - } -) - -const getProjectTooltip = computed( - () => (project: WorkspaceMoveProjectManager_ProjectFragment) => { - const permission = getProjectPermission(project) - if (permission.authorized) { - return undefined - } - if (permission.code === 'WorkspaceLimitsReached') { - return undefined - } - return permission.message - } -) From 9b675896e5dafc0bc4ae8fd029785a5574a732c4 Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Tue, 15 Apr 2025 14:20:02 +0100 Subject: [PATCH 2/2] Fix workspace/project select permissions --- .../workspace/moveProject/Manager.vue | 50 ++----------------- .../workspace/moveProject/SelectProject.vue | 23 +++++++-- .../workspace/moveProject/SelectWorkspace.vue | 6 +-- 3 files changed, 27 insertions(+), 52 deletions(-) diff --git a/packages/frontend-2/components/workspace/moveProject/Manager.vue b/packages/frontend-2/components/workspace/moveProject/Manager.vue index 2c9f296c1..6e519bc6d 100644 --- a/packages/frontend-2/components/workspace/moveProject/Manager.vue +++ b/packages/frontend-2/components/workspace/moveProject/Manager.vue @@ -4,10 +4,7 @@ @@ -15,10 +12,9 @@ @@ -56,7 +52,6 @@ import { useQuery } from '@vue/apollo-composable' import { graphql } from '~~/lib/common/generated/gql' import type { - FullPermissionCheckResultFragment, WorkspaceMoveProjectManager_ProjectFragment, WorkspaceMoveProjectManager_WorkspaceFragment } from '~/lib/common/generated/gql/graphql' @@ -141,43 +136,6 @@ const selectedWorkspace = ref (permission: FullPermissionCheckResultFragment) => { - return permission?.code === 'WorkspaceSsoSessionNoAccess' - } -) - -const isLimitReached = computed( - () => (permission: FullPermissionCheckResultFragment) => { - return permission?.code === 'WorkspaceLimitsReached' - } -) - -const canMoveToWorkspace = computed( - () => (permission: FullPermissionCheckResultFragment) => { - return permission?.authorized && permission?.code === 'OK' - } -) - -const getDisabledTooltip = computed( - () => (permission: FullPermissionCheckResultFragment) => { - if (permission?.code === 'WorkspaceLimitsReached') { - return undefined - } - - if (permission?.code === 'WorkspaceSsoSessionNoAccess') { - return 'SSO login required to access this workspace' - } - - if (!permission?.authorized) { - return permission?.message - } - - return undefined - } -) - // Dialog states based on what we have const activeDialog = computed(() => { if (!selectedProject.value) return 'project' diff --git a/packages/frontend-2/components/workspace/moveProject/SelectProject.vue b/packages/frontend-2/components/workspace/moveProject/SelectProject.vue index e7b557c16..0d3b4bf63 100644 --- a/packages/frontend-2/components/workspace/moveProject/SelectProject.vue +++ b/packages/frontend-2/components/workspace/moveProject/SelectProject.vue @@ -65,7 +65,16 @@ + > + + @@ -76,11 +85,13 @@ import { useDebouncedTextInput } from '@speckle/ui-components' import type { + PermissionCheckResult, WorkspaceMoveProjectManager_ProjectFragment, - WorkspacePermissionChecks + WorkspaceMoveProjectManager_WorkspaceFragment } from '~~/lib/common/generated/gql/graphql' import { usePaginatedQuery } from '~/lib/common/composables/graphql' import { workspaceMoveProjectManagerUserQuery } from '~/lib/workspaces/graphql/queries' +import { formatName } from '~/lib/billing/helpers/plan' const search = defineModel('search') const { on, bind } = useDebouncedTextInput({ model: search }) @@ -91,7 +102,7 @@ const emit = defineEmits<{ const props = defineProps<{ workspaceSlug?: string - workspacePermissions?: WorkspacePermissionChecks + projectPermissions?: PermissionCheckResult }>() const { @@ -117,6 +128,9 @@ const { }) const showLimitDialog = ref(false) +const limitReachedWorkspace = ref( + null +) const userProjects = computed(() => result.value?.activeUser?.projects.items || []) const moveableProjects = computed(() => userProjects.value) @@ -142,6 +156,9 @@ const getProjectTooltip = computed( const onMoveClick = (project: WorkspaceMoveProjectManager_ProjectFragment) => { if (props.workspaceSlug) { + limitReachedWorkspace.value = { + name: props.workspaceSlug + } as WorkspaceMoveProjectManager_WorkspaceFragment showLimitDialog.value = true return } diff --git a/packages/frontend-2/components/workspace/moveProject/SelectWorkspace.vue b/packages/frontend-2/components/workspace/moveProject/SelectWorkspace.vue index deb45dd18..f7a25f2fc 100644 --- a/packages/frontend-2/components/workspace/moveProject/SelectWorkspace.vue +++ b/packages/frontend-2/components/workspace/moveProject/SelectWorkspace.vue @@ -80,9 +80,9 @@