8ec0d364cb
* fix(workspaces): transact all simultaneous workspace-project role changes * fix(workspaces): more correct usage of transactions * fix(workspaces): add tests for transaction-based role changes * fix(workspaces): do not leak knex into domain * fix(workspaces): transaction-ify factory functions * fix(workspaces): factory-ify some old functions * fix(workspaces): missed a resolver * chore(workspaces): get tests in order * park it * chore(workspaces): failing tests * WHAT DO YOU WANT * fix(workspaces): i lived bitch * fix(workspaces): remove test that is no longer true * fix(workspaces): better repo/service boundaries * right * fix(workspaces): service in injected * fix(workspaces): repair references * refactor(workspaces): role management rework * chore(workspaces): adjust tests to match new behaviour * lint lint lint * fix(workspaces): fix tests --------- Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>
33 lines
1.0 KiB
TypeScript
33 lines
1.0 KiB
TypeScript
import { Roles, WorkspaceRoles } from '@speckle/shared'
|
|
import { WorkspaceAcl } from '@/modules/workspacesCore/domain/types'
|
|
import { WorkspaceRole } from '@/modules/core/graph/generated/graphql'
|
|
|
|
export const isUserLastWorkspaceAdmin = (
|
|
workspaceRoles: Pick<WorkspaceAcl, 'userId' | 'role'>[],
|
|
userId: string
|
|
): boolean => {
|
|
const workspaceAdmins = workspaceRoles.filter(
|
|
({ role }) => role === Roles.Workspace.Admin
|
|
)
|
|
const isUserAdmin = workspaceAdmins.some((role) => role.userId === userId)
|
|
|
|
return isUserAdmin && workspaceAdmins.length === 1
|
|
}
|
|
|
|
export const mapGqlWorkspaceRoleToMainRole = (
|
|
gqlRole: WorkspaceRole
|
|
): WorkspaceRoles => {
|
|
switch (gqlRole) {
|
|
case WorkspaceRole.Admin:
|
|
return Roles.Workspace.Admin
|
|
case WorkspaceRole.Member:
|
|
return Roles.Workspace.Member
|
|
case WorkspaceRole.Guest:
|
|
return Roles.Workspace.Guest
|
|
}
|
|
}
|
|
|
|
export const isWorkspaceRole = (role: string): role is WorkspaceRoles => {
|
|
return (Object.values(Roles.Workspace) as string[]).includes(role)
|
|
}
|