fix(fe) move project permissions
fix(fe) move project permissions
This commit is contained in:
@@ -64,7 +64,12 @@
|
||||
}}
|
||||
</FormButton>
|
||||
<FormButton
|
||||
v-if="!project.workspace?.id && isWorkspacesEnabled"
|
||||
v-if="
|
||||
!project.workspace?.id &&
|
||||
isWorkspacesEnabled &&
|
||||
(project.role === Roles.Stream.Contributor ||
|
||||
project.role === Roles.Stream.Owner)
|
||||
"
|
||||
size="sm"
|
||||
color="outline"
|
||||
@click="$emit('moveProject', project.id)"
|
||||
@@ -107,6 +112,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { Roles } from '@speckle/shared'
|
||||
import { FormButton } from '@speckle/ui-components'
|
||||
import type { ProjectDashboardItemFragment } from '~~/lib/common/generated/gql/graphql'
|
||||
import {
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
<WorkspaceHeaderAddProjectMenu
|
||||
button-copy="Add your first project"
|
||||
:can-create-project="canCreateProject"
|
||||
:can-move-project="canMoveProject"
|
||||
:can-move-project-to-workspace="canMoveProjectToWorkspace"
|
||||
@new-project="openNewProject = true"
|
||||
@move-project="showMoveProjectsDialog = true"
|
||||
/>
|
||||
@@ -83,7 +83,7 @@
|
||||
<script setup lang="ts">
|
||||
import { MagnifyingGlassIcon, Squares2X2Icon } from '@heroicons/vue/24/outline'
|
||||
import { useQuery, useQueryLoading } from '@vue/apollo-composable'
|
||||
import { Roles, type Nullable, type Optional, type StreamRoles } from '@speckle/shared'
|
||||
import type { Nullable, Optional, StreamRoles } from '@speckle/shared'
|
||||
import {
|
||||
workspacePageQuery,
|
||||
workspaceProjectsQuery
|
||||
@@ -91,10 +91,7 @@ import {
|
||||
import { useDebouncedTextInput } from '@speckle/ui-components'
|
||||
import { usePaginatedQuery } from '~/lib/common/composables/graphql'
|
||||
import { graphql } from '~~/lib/common/generated/gql'
|
||||
import type {
|
||||
FullPermissionCheckResultFragment,
|
||||
WorkspaceProjectsQueryQueryVariables
|
||||
} from '~~/lib/common/generated/gql/graphql'
|
||||
import type { WorkspaceProjectsQueryQueryVariables } from '~~/lib/common/generated/gql/graphql'
|
||||
import { workspaceRoute } from '~/lib/common/helpers/route'
|
||||
import { useBillingActions } from '~/lib/billing/composables/actions'
|
||||
import { useWorkspacesWizard } from '~/lib/workspaces/composables/wizard'
|
||||
@@ -195,14 +192,9 @@ const { finalizeWizard } = useWorkspacesWizard()
|
||||
const canCreateProject = computed(
|
||||
() => initialQueryResult.value?.workspaceBySlug?.permissions.canCreateProject
|
||||
)
|
||||
const canMoveProject = computed((): FullPermissionCheckResultFragment => {
|
||||
// TODO: Until we have a real resolver
|
||||
return {
|
||||
authorized: isWorkspaceAdmin.value,
|
||||
message: isWorkspaceAdmin.value ? 'OK' : 'You must be a workspace admin',
|
||||
code: isWorkspaceAdmin.value ? 'OK' : 'FORBIDDEN'
|
||||
}
|
||||
})
|
||||
const canMoveProjectToWorkspace = computed(
|
||||
() => initialQueryResult.value?.workspaceBySlug?.permissions.canMoveProjectToWorkspace
|
||||
)
|
||||
|
||||
const projects = computed(() => query.result.value?.workspaceBySlug?.projects)
|
||||
const workspaceInvite = computed(() => initialQueryResult.value?.workspaceInvite)
|
||||
@@ -213,8 +205,6 @@ const showEmptyState = computed(() => {
|
||||
return projects.value && !projects.value?.items?.length
|
||||
})
|
||||
|
||||
const isWorkspaceAdmin = computed(() => workspace.value?.role === Roles.Workspace.Admin)
|
||||
|
||||
const showLoadingBar = computed(() => {
|
||||
const isLoading = areQueriesLoading.value || (!!search.value && query.loading.value)
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ const props = defineProps<{
|
||||
hideTextOnMobile?: boolean
|
||||
buttonCopy?: string
|
||||
canCreateProject: FullPermissionCheckResultFragment | undefined
|
||||
canMoveProject: FullPermissionCheckResultFragment | undefined
|
||||
canMoveProjectToWorkspace: FullPermissionCheckResultFragment | undefined
|
||||
}>()
|
||||
|
||||
const menuId = useId()
|
||||
@@ -65,7 +65,9 @@ const menuItems = computed<LayoutMenuItem[][]>(() => [
|
||||
},
|
||||
{
|
||||
title: 'Move existing project...',
|
||||
id: AddNewProjectActionTypes.MoveProject
|
||||
id: AddNewProjectActionTypes.MoveProject,
|
||||
disabled: !props.canMoveProjectToWorkspace?.authorized,
|
||||
disabledTooltip: props.canMoveProjectToWorkspace?.message
|
||||
}
|
||||
]
|
||||
])
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<WorkspaceHeaderAddProjectMenu
|
||||
hide-text-on-mobile
|
||||
:can-create-project="canCreateProject"
|
||||
:can-move-project="canMoveProject"
|
||||
:can-move-project-to-workspace="canMoveProjectToWorkspace"
|
||||
@new-project="$emit('show-new-project-dialog')"
|
||||
@move-project="$emit('show-move-projects-dialog')"
|
||||
/>
|
||||
@@ -58,7 +58,6 @@
|
||||
import { graphql } from '~~/lib/common/generated/gql'
|
||||
import {
|
||||
WorkspacePlanStatuses,
|
||||
type FullPermissionCheckResultFragment,
|
||||
type WorkspaceHeader_WorkspaceFragment
|
||||
} from '~~/lib/common/generated/gql/graphql'
|
||||
import { Cog8ToothIcon } from '@heroicons/vue/24/outline'
|
||||
@@ -77,6 +76,9 @@ graphql(`
|
||||
canCreateProject {
|
||||
...FullPermissionCheckResult
|
||||
}
|
||||
canMoveProjectToWorkspace {
|
||||
...FullPermissionCheckResult
|
||||
}
|
||||
}
|
||||
}
|
||||
`)
|
||||
@@ -106,14 +108,9 @@ const isWorkspaceMember = computed(
|
||||
const canCreateProject = computed(
|
||||
() => props.workspaceInfo.permissions.canCreateProject
|
||||
)
|
||||
const canMoveProject = computed((): FullPermissionCheckResultFragment => {
|
||||
// TODO: Until we have a real resolver
|
||||
return {
|
||||
authorized: isWorkspaceAdmin.value,
|
||||
message: isWorkspaceAdmin.value ? 'OK' : 'You must be a workspace admin',
|
||||
code: isWorkspaceAdmin.value ? 'OK' : 'FORBIDDEN'
|
||||
}
|
||||
})
|
||||
const canMoveProjectToWorkspace = computed(
|
||||
() => props.workspaceInfo.permissions.canMoveProjectToWorkspace
|
||||
)
|
||||
const showBillingAlert = computed(
|
||||
() =>
|
||||
props.workspaceInfo.plan?.status === WorkspacePlanStatuses.PaymentFailed ||
|
||||
|
||||
@@ -82,6 +82,11 @@ graphql(`
|
||||
graphql(`
|
||||
fragment WorkspaceMoveProjectManager_Project on Project {
|
||||
...WorkspaceMoveProjectManager_ProjectBase
|
||||
permissions {
|
||||
canMoveToWorkspace {
|
||||
...FullPermissionCheckResult
|
||||
}
|
||||
}
|
||||
workspace {
|
||||
id
|
||||
permissions {
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
:key="`${project.id}-${project.workspace?.permissions?.canMoveProjectToWorkspace?.code}`"
|
||||
:key="`${project.id}-${project.permissions.canMoveToWorkspace.code}`"
|
||||
v-tippy="getProjectTooltip(project)"
|
||||
>
|
||||
<FormButton
|
||||
@@ -76,8 +76,8 @@ import {
|
||||
useDebouncedTextInput
|
||||
} from '@speckle/ui-components'
|
||||
import type {
|
||||
FullPermissionCheckResultFragment,
|
||||
WorkspaceMoveProjectManager_ProjectFragment
|
||||
WorkspaceMoveProjectManager_ProjectFragment,
|
||||
WorkspacePermissionChecks
|
||||
} from '~~/lib/common/generated/gql/graphql'
|
||||
import { usePaginatedQuery } from '~/lib/common/composables/graphql'
|
||||
import { workspaceMoveProjectManagerUserQuery } from '~/lib/workspaces/graphql/queries'
|
||||
@@ -91,12 +91,7 @@ const emit = defineEmits<{
|
||||
|
||||
const props = defineProps<{
|
||||
workspaceSlug?: string
|
||||
canMoveToWorkspace: (permission: FullPermissionCheckResultFragment) => boolean
|
||||
isLimitReached: (permission: FullPermissionCheckResultFragment) => boolean
|
||||
isSsoRequired: (permission: FullPermissionCheckResultFragment) => boolean
|
||||
getDisabledTooltip: (
|
||||
permission: FullPermissionCheckResultFragment
|
||||
) => string | undefined
|
||||
workspacePermissions?: WorkspacePermissionChecks
|
||||
}>()
|
||||
|
||||
const {
|
||||
@@ -132,8 +127,11 @@ const isProjectDisabled = computed(
|
||||
if (!props.workspaceSlug) {
|
||||
return false
|
||||
}
|
||||
if (isProjectLimitReached.value(project)) {
|
||||
return false
|
||||
}
|
||||
|
||||
return !canMoveProject.value(project) && !isProjectLimitReached.value(project)
|
||||
return !canMoveProject.value(project)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -150,7 +148,7 @@ const showLoading = computed(() => loading.value && userProjects.value.length ==
|
||||
|
||||
const getProjectPermission = (project: WorkspaceMoveProjectManager_ProjectFragment) => {
|
||||
return (
|
||||
project.workspace?.permissions?.canMoveProjectToWorkspace || {
|
||||
project.permissions?.canMoveToWorkspace || {
|
||||
authorized: false,
|
||||
code: '',
|
||||
message: ''
|
||||
@@ -161,24 +159,27 @@ const getProjectPermission = (project: WorkspaceMoveProjectManager_ProjectFragme
|
||||
const canMoveProject = computed(
|
||||
() => (project: WorkspaceMoveProjectManager_ProjectFragment) => {
|
||||
const permission = getProjectPermission(project)
|
||||
return props.canMoveToWorkspace(permission)
|
||||
return permission.authorized
|
||||
}
|
||||
)
|
||||
|
||||
const isProjectLimitReached = computed(
|
||||
() => (project: WorkspaceMoveProjectManager_ProjectFragment) => {
|
||||
const permission = getProjectPermission(project)
|
||||
return props.isLimitReached(permission)
|
||||
return permission.code === 'WorkspaceLimitsReached'
|
||||
}
|
||||
)
|
||||
|
||||
const getProjectTooltip = computed(
|
||||
() => (project: WorkspaceMoveProjectManager_ProjectFragment) => {
|
||||
const permission = getProjectPermission(project)
|
||||
if (props.isLimitReached(permission)) {
|
||||
if (permission.authorized) {
|
||||
return undefined
|
||||
}
|
||||
return props.getDisabledTooltip(permission)
|
||||
if (permission.code === 'WorkspaceLimitsReached') {
|
||||
return undefined
|
||||
}
|
||||
return permission.message
|
||||
}
|
||||
)
|
||||
</script>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
<template #text>
|
||||
<div class="flex flex-col gap-2 items-start">
|
||||
<CommonBadge
|
||||
v-if="isSsoRequired(ws.permissions?.canMoveProjectToWorkspace)"
|
||||
v-if="isSsoRequired(ws)"
|
||||
color="secondary"
|
||||
class="capitalize"
|
||||
rounded
|
||||
@@ -82,7 +82,7 @@ import { graphql } from '~~/lib/common/generated/gql'
|
||||
import type {
|
||||
WorkspaceMoveProjectManager_ProjectFragment,
|
||||
WorkspaceMoveProjectManager_WorkspaceFragment,
|
||||
FullPermissionCheckResultFragment
|
||||
WorkspacePermissionChecks
|
||||
} from '~~/lib/common/generated/gql/graphql'
|
||||
import { useQuery } from '@vue/apollo-composable'
|
||||
import { UserAvatarGroup } from '@speckle/ui-components'
|
||||
@@ -109,12 +109,7 @@ graphql(`
|
||||
|
||||
const props = defineProps<{
|
||||
project: WorkspaceMoveProjectManager_ProjectFragment
|
||||
canMoveToWorkspace: (permission: FullPermissionCheckResultFragment) => boolean
|
||||
isLimitReached: (permission: FullPermissionCheckResultFragment) => boolean
|
||||
isSsoRequired: (permission: FullPermissionCheckResultFragment) => boolean
|
||||
getDisabledTooltip: (
|
||||
permission: FullPermissionCheckResultFragment
|
||||
) => string | undefined
|
||||
workspacePermissions?: WorkspacePermissionChecks
|
||||
}>()
|
||||
|
||||
const emit = defineEmits<{
|
||||
@@ -157,31 +152,38 @@ const isWorkspaceDisabled = computed(
|
||||
return true
|
||||
}
|
||||
|
||||
return (
|
||||
!props.canMoveToWorkspace(workspace.permissions?.canMoveProjectToWorkspace) &&
|
||||
!props.isLimitReached(workspace.permissions?.canMoveProjectToWorkspace)
|
||||
)
|
||||
const permission = workspace.permissions?.canMoveProjectToWorkspace
|
||||
return !permission?.authorized && permission?.code !== 'WorkspaceLimitsReached'
|
||||
}
|
||||
)
|
||||
|
||||
const getWorkspaceTooltip = computed(
|
||||
() => (workspace: WorkspaceMoveProjectManager_WorkspaceFragment) => {
|
||||
if (workspace.permissions.canMoveProjectToWorkspace.authorized) {
|
||||
return undefined
|
||||
}
|
||||
if (
|
||||
workspace.permissions.canMoveProjectToWorkspace.code === 'WorkspaceLimitsReached'
|
||||
) {
|
||||
return undefined
|
||||
}
|
||||
if (!isWorkspaceAdmin.value(workspace)) {
|
||||
return 'Only workspace administrators can move projects to this workspace'
|
||||
}
|
||||
|
||||
return props.getDisabledTooltip(workspace.permissions?.canMoveProjectToWorkspace)
|
||||
const permission = workspace.permissions?.canMoveProjectToWorkspace
|
||||
return permission?.message
|
||||
}
|
||||
)
|
||||
|
||||
const sortedWorkspaces = computed(() => {
|
||||
return [...workspaces.value].sort((a, b) => {
|
||||
const aEnabled =
|
||||
props.canMoveToWorkspace(a.permissions?.canMoveProjectToWorkspace) ||
|
||||
props.isLimitReached(a.permissions?.canMoveProjectToWorkspace)
|
||||
a.permissions?.canMoveProjectToWorkspace?.authorized ||
|
||||
a.permissions?.canMoveProjectToWorkspace?.code === 'WorkspaceLimitsReached'
|
||||
const bEnabled =
|
||||
props.canMoveToWorkspace(b.permissions?.canMoveProjectToWorkspace) ||
|
||||
props.isLimitReached(b.permissions?.canMoveProjectToWorkspace)
|
||||
b.permissions?.canMoveProjectToWorkspace?.authorized ||
|
||||
b.permissions?.canMoveProjectToWorkspace?.code === 'WorkspaceLimitsReached'
|
||||
|
||||
if (aEnabled && !bEnabled) return -1
|
||||
if (!aEnabled && bEnabled) return 1
|
||||
@@ -192,14 +194,24 @@ const sortedWorkspaces = computed(() => {
|
||||
const handleWorkspaceClick = (
|
||||
workspace: WorkspaceMoveProjectManager_WorkspaceFragment
|
||||
) => {
|
||||
if (props.isLimitReached(workspace.permissions?.canMoveProjectToWorkspace)) {
|
||||
const permission = workspace.permissions?.canMoveProjectToWorkspace
|
||||
if (permission?.code === 'WorkspaceLimitsReached') {
|
||||
limitReachedWorkspace.value = workspace
|
||||
showLimitDialog.value = true
|
||||
return
|
||||
}
|
||||
|
||||
if (props.canMoveToWorkspace(workspace.permissions?.canMoveProjectToWorkspace)) {
|
||||
if (permission?.authorized) {
|
||||
emit('workspace-selected', workspace)
|
||||
}
|
||||
}
|
||||
|
||||
const isSsoRequired = computed(
|
||||
() => (workspace: WorkspaceMoveProjectManager_WorkspaceFragment) => {
|
||||
return (
|
||||
workspace.permissions?.canMoveProjectToWorkspace?.code ===
|
||||
'WorkspaceSsoSessionNoAccess'
|
||||
)
|
||||
}
|
||||
)
|
||||
</script>
|
||||
|
||||
@@ -136,12 +136,12 @@ type Documents = {
|
||||
"\n fragment ViewerModelVersionCardItem on Version {\n id\n message\n referencedObject\n sourceApplication\n createdAt\n previewUrl\n authorUser {\n ...LimitedUserAvatar\n }\n }\n": typeof types.ViewerModelVersionCardItemFragmentDoc,
|
||||
"\n fragment WorkspaceProjectList_Workspace on Workspace {\n id\n ...WorkspaceBase_Workspace\n ...WorkspaceTeam_Workspace\n ...WorkspaceSecurity_Workspace\n ...WorkspaceHeader_Workspace\n ...BillingAlert_Workspace\n ...InviteDialogWorkspace_Workspace\n projects {\n ...WorkspaceProjectList_ProjectCollection\n }\n creationState {\n completed\n state\n }\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n }\n }\n": typeof types.WorkspaceProjectList_WorkspaceFragmentDoc,
|
||||
"\n fragment WorkspaceProjectList_ProjectCollection on ProjectCollection {\n totalCount\n items {\n ...ProjectDashboardItem\n }\n cursor\n }\n": typeof types.WorkspaceProjectList_ProjectCollectionFragmentDoc,
|
||||
"\n fragment WorkspaceHeader_Workspace on Workspace {\n ...WorkspaceBase_Workspace\n ...WorkspaceTeam_Workspace\n ...BillingAlert_Workspace\n slug\n readOnly\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n }\n }\n": typeof types.WorkspaceHeader_WorkspaceFragmentDoc,
|
||||
"\n fragment WorkspaceHeader_Workspace on Workspace {\n ...WorkspaceBase_Workspace\n ...WorkspaceTeam_Workspace\n ...BillingAlert_Workspace\n slug\n readOnly\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n canMoveProjectToWorkspace {\n ...FullPermissionCheckResult\n }\n }\n }\n": typeof types.WorkspaceHeader_WorkspaceFragmentDoc,
|
||||
"\n fragment WorkspaceInviteBanner_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n invitedBy {\n id\n ...LimitedUserAvatar\n }\n workspaceId\n workspaceName\n token\n user {\n id\n }\n ...UseWorkspaceInviteManager_PendingWorkspaceCollaborator\n }\n": typeof types.WorkspaceInviteBanner_PendingWorkspaceCollaboratorFragmentDoc,
|
||||
"\n fragment WorkspaceInviteBlock_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n workspaceId\n workspaceName\n token\n user {\n id\n name\n ...LimitedUserAvatar\n }\n title\n email\n ...UseWorkspaceInviteManager_PendingWorkspaceCollaborator\n }\n": typeof types.WorkspaceInviteBlock_PendingWorkspaceCollaboratorFragmentDoc,
|
||||
"\n fragment WorkspaceJoinRequestApproveDialog_WorkspaceJoinRequest on WorkspaceJoinRequest {\n id\n user {\n id\n name\n }\n workspace {\n id\n }\n }\n": typeof types.WorkspaceJoinRequestApproveDialog_WorkspaceJoinRequestFragmentDoc,
|
||||
"\n fragment WorkspaceMoveProjectManager_ProjectBase on Project {\n id\n name\n modelCount: models(limit: 0) {\n totalCount\n }\n versions(limit: 0) {\n totalCount\n }\n }\n": typeof types.WorkspaceMoveProjectManager_ProjectBaseFragmentDoc,
|
||||
"\n fragment WorkspaceMoveProjectManager_Project on Project {\n ...WorkspaceMoveProjectManager_ProjectBase\n workspace {\n id\n permissions {\n canMoveProjectToWorkspace(projectId: $projectId) {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n": typeof types.WorkspaceMoveProjectManager_ProjectFragmentDoc,
|
||||
"\n fragment WorkspaceMoveProjectManager_Project on Project {\n ...WorkspaceMoveProjectManager_ProjectBase\n permissions {\n canMoveToWorkspace {\n ...FullPermissionCheckResult\n }\n }\n workspace {\n id\n permissions {\n canMoveProjectToWorkspace(projectId: $projectId) {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n": typeof types.WorkspaceMoveProjectManager_ProjectFragmentDoc,
|
||||
"\n fragment WorkspaceMoveProjectManager_Workspace on Workspace {\n id\n role\n name\n logo\n slug\n plan {\n name\n }\n permissions {\n canMoveProjectToWorkspace(projectId: $projectId) {\n ...FullPermissionCheckResult\n }\n }\n projects {\n totalCount\n }\n team {\n items {\n user {\n id\n name\n avatar\n }\n }\n }\n }\n": typeof types.WorkspaceMoveProjectManager_WorkspaceFragmentDoc,
|
||||
"\n fragment WorkspaceMoveProjectSelectWorkspace_User on User {\n workspaces {\n items {\n ...WorkspaceMoveProjectManager_Workspace\n }\n }\n projects(cursor: $cursor, filter: $filter) {\n items {\n ...WorkspaceMoveProjectManager_Project\n }\n cursor\n totalCount\n }\n }\n": typeof types.WorkspaceMoveProjectSelectWorkspace_UserFragmentDoc,
|
||||
"\n fragment WorkspaceSidebarAbout_Workspace on Workspace {\n ...WorkspaceDashboardAbout_Workspace\n }\n": typeof types.WorkspaceSidebarAbout_WorkspaceFragmentDoc,
|
||||
@@ -554,12 +554,12 @@ const documents: Documents = {
|
||||
"\n fragment ViewerModelVersionCardItem on Version {\n id\n message\n referencedObject\n sourceApplication\n createdAt\n previewUrl\n authorUser {\n ...LimitedUserAvatar\n }\n }\n": types.ViewerModelVersionCardItemFragmentDoc,
|
||||
"\n fragment WorkspaceProjectList_Workspace on Workspace {\n id\n ...WorkspaceBase_Workspace\n ...WorkspaceTeam_Workspace\n ...WorkspaceSecurity_Workspace\n ...WorkspaceHeader_Workspace\n ...BillingAlert_Workspace\n ...InviteDialogWorkspace_Workspace\n projects {\n ...WorkspaceProjectList_ProjectCollection\n }\n creationState {\n completed\n state\n }\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.WorkspaceProjectList_WorkspaceFragmentDoc,
|
||||
"\n fragment WorkspaceProjectList_ProjectCollection on ProjectCollection {\n totalCount\n items {\n ...ProjectDashboardItem\n }\n cursor\n }\n": types.WorkspaceProjectList_ProjectCollectionFragmentDoc,
|
||||
"\n fragment WorkspaceHeader_Workspace on Workspace {\n ...WorkspaceBase_Workspace\n ...WorkspaceTeam_Workspace\n ...BillingAlert_Workspace\n slug\n readOnly\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.WorkspaceHeader_WorkspaceFragmentDoc,
|
||||
"\n fragment WorkspaceHeader_Workspace on Workspace {\n ...WorkspaceBase_Workspace\n ...WorkspaceTeam_Workspace\n ...BillingAlert_Workspace\n slug\n readOnly\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n canMoveProjectToWorkspace {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.WorkspaceHeader_WorkspaceFragmentDoc,
|
||||
"\n fragment WorkspaceInviteBanner_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n invitedBy {\n id\n ...LimitedUserAvatar\n }\n workspaceId\n workspaceName\n token\n user {\n id\n }\n ...UseWorkspaceInviteManager_PendingWorkspaceCollaborator\n }\n": types.WorkspaceInviteBanner_PendingWorkspaceCollaboratorFragmentDoc,
|
||||
"\n fragment WorkspaceInviteBlock_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n workspaceId\n workspaceName\n token\n user {\n id\n name\n ...LimitedUserAvatar\n }\n title\n email\n ...UseWorkspaceInviteManager_PendingWorkspaceCollaborator\n }\n": types.WorkspaceInviteBlock_PendingWorkspaceCollaboratorFragmentDoc,
|
||||
"\n fragment WorkspaceJoinRequestApproveDialog_WorkspaceJoinRequest on WorkspaceJoinRequest {\n id\n user {\n id\n name\n }\n workspace {\n id\n }\n }\n": types.WorkspaceJoinRequestApproveDialog_WorkspaceJoinRequestFragmentDoc,
|
||||
"\n fragment WorkspaceMoveProjectManager_ProjectBase on Project {\n id\n name\n modelCount: models(limit: 0) {\n totalCount\n }\n versions(limit: 0) {\n totalCount\n }\n }\n": types.WorkspaceMoveProjectManager_ProjectBaseFragmentDoc,
|
||||
"\n fragment WorkspaceMoveProjectManager_Project on Project {\n ...WorkspaceMoveProjectManager_ProjectBase\n workspace {\n id\n permissions {\n canMoveProjectToWorkspace(projectId: $projectId) {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n": types.WorkspaceMoveProjectManager_ProjectFragmentDoc,
|
||||
"\n fragment WorkspaceMoveProjectManager_Project on Project {\n ...WorkspaceMoveProjectManager_ProjectBase\n permissions {\n canMoveToWorkspace {\n ...FullPermissionCheckResult\n }\n }\n workspace {\n id\n permissions {\n canMoveProjectToWorkspace(projectId: $projectId) {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n": types.WorkspaceMoveProjectManager_ProjectFragmentDoc,
|
||||
"\n fragment WorkspaceMoveProjectManager_Workspace on Workspace {\n id\n role\n name\n logo\n slug\n plan {\n name\n }\n permissions {\n canMoveProjectToWorkspace(projectId: $projectId) {\n ...FullPermissionCheckResult\n }\n }\n projects {\n totalCount\n }\n team {\n items {\n user {\n id\n name\n avatar\n }\n }\n }\n }\n": types.WorkspaceMoveProjectManager_WorkspaceFragmentDoc,
|
||||
"\n fragment WorkspaceMoveProjectSelectWorkspace_User on User {\n workspaces {\n items {\n ...WorkspaceMoveProjectManager_Workspace\n }\n }\n projects(cursor: $cursor, filter: $filter) {\n items {\n ...WorkspaceMoveProjectManager_Project\n }\n cursor\n totalCount\n }\n }\n": types.WorkspaceMoveProjectSelectWorkspace_UserFragmentDoc,
|
||||
"\n fragment WorkspaceSidebarAbout_Workspace on Workspace {\n ...WorkspaceDashboardAbout_Workspace\n }\n": types.WorkspaceSidebarAbout_WorkspaceFragmentDoc,
|
||||
@@ -1355,7 +1355,7 @@ export function graphql(source: "\n fragment WorkspaceProjectList_ProjectCollec
|
||||
/**
|
||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||
*/
|
||||
export function graphql(source: "\n fragment WorkspaceHeader_Workspace on Workspace {\n ...WorkspaceBase_Workspace\n ...WorkspaceTeam_Workspace\n ...BillingAlert_Workspace\n slug\n readOnly\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n }\n }\n"): (typeof documents)["\n fragment WorkspaceHeader_Workspace on Workspace {\n ...WorkspaceBase_Workspace\n ...WorkspaceTeam_Workspace\n ...BillingAlert_Workspace\n slug\n readOnly\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n }\n }\n"];
|
||||
export function graphql(source: "\n fragment WorkspaceHeader_Workspace on Workspace {\n ...WorkspaceBase_Workspace\n ...WorkspaceTeam_Workspace\n ...BillingAlert_Workspace\n slug\n readOnly\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n canMoveProjectToWorkspace {\n ...FullPermissionCheckResult\n }\n }\n }\n"): (typeof documents)["\n fragment WorkspaceHeader_Workspace on Workspace {\n ...WorkspaceBase_Workspace\n ...WorkspaceTeam_Workspace\n ...BillingAlert_Workspace\n slug\n readOnly\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n canMoveProjectToWorkspace {\n ...FullPermissionCheckResult\n }\n }\n }\n"];
|
||||
/**
|
||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||
*/
|
||||
@@ -1375,7 +1375,7 @@ export function graphql(source: "\n fragment WorkspaceMoveProjectManager_Projec
|
||||
/**
|
||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||
*/
|
||||
export function graphql(source: "\n fragment WorkspaceMoveProjectManager_Project on Project {\n ...WorkspaceMoveProjectManager_ProjectBase\n workspace {\n id\n permissions {\n canMoveProjectToWorkspace(projectId: $projectId) {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n"): (typeof documents)["\n fragment WorkspaceMoveProjectManager_Project on Project {\n ...WorkspaceMoveProjectManager_ProjectBase\n workspace {\n id\n permissions {\n canMoveProjectToWorkspace(projectId: $projectId) {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n"];
|
||||
export function graphql(source: "\n fragment WorkspaceMoveProjectManager_Project on Project {\n ...WorkspaceMoveProjectManager_ProjectBase\n permissions {\n canMoveToWorkspace {\n ...FullPermissionCheckResult\n }\n }\n workspace {\n id\n permissions {\n canMoveProjectToWorkspace(projectId: $projectId) {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n"): (typeof documents)["\n fragment WorkspaceMoveProjectManager_Project on Project {\n ...WorkspaceMoveProjectManager_ProjectBase\n permissions {\n canMoveToWorkspace {\n ...FullPermissionCheckResult\n }\n }\n workspace {\n id\n permissions {\n canMoveProjectToWorkspace(projectId: $projectId) {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n"];
|
||||
/**
|
||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||
*/
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -64,10 +64,10 @@
|
||||
</div>
|
||||
|
||||
<WorkspaceMoveProjectManager
|
||||
v-if="project"
|
||||
v-if="project && isWorkspacesEnabled"
|
||||
v-model:open="showMoveDialog"
|
||||
event-source="project-page"
|
||||
:project-id="project.id"
|
||||
:project-id="projectId"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
Reference in New Issue
Block a user