Files
speckle-server/packages/frontend-2/lib/projects/composables/team.ts
T
Kristaps Fabians Geikins b02a07e2b6 feat: Frontend 2.0 MVP
2023-05-08 10:47:01 +03:00

60 lines
1.6 KiB
TypeScript

import { Roles } from '@speckle/shared'
import { useActiveUser } from '~~/lib/auth/composables/activeUser'
import { ProjectPageTeamDialogFragment } from '~~/lib/common/generated/gql/graphql'
import { ProjectCollaboratorListItem } from '~~/lib/projects/helpers/components'
export function useTeamDialogInternals(params: {
props: {
project: Ref<ProjectPageTeamDialogFragment>
}
}) {
const {
props: { project }
} = params
const { activeUser } = useActiveUser()
const collaboratorListItems = computed((): ProjectCollaboratorListItem[] => {
const results: ProjectCollaboratorListItem[] = []
for (const invitedUser of project.value.invitedTeam || []) {
results.push({
id: invitedUser.id,
title: invitedUser.title,
user: invitedUser.user || null,
role: invitedUser.role,
inviteId: invitedUser.inviteId
})
}
for (const collaborator of project.value.team) {
results.push({
id: collaborator.user.id,
title: collaborator.user.name,
user: collaborator.user,
role: collaborator.role,
inviteId: null
})
}
return results
})
const isOwner = computed(() => project.value.role === Roles.Stream.Owner)
const canLeaveProject = computed(() => {
if (!activeUser.value) return false
if (!project.value.role) return false
const userId = activeUser.value.id
const owners = project.value.team.filter((t) => t.role === Roles.Stream.Owner)
return owners.length !== 1 || owners[0].user.id !== userId
})
return {
collaboratorListItems,
isOwner,
canLeaveProject
}
}