069f64afc9
* feat: user guest role switching in FE1 * removed stream create buttons * fe1 done * fe1 - specifying role in invite dialogs * fe1 - bulk invites * WIP FE2 changes * fe1: allow role select condition fixes * xtra limitations on createForOnboarding * more invite creation validations * no longer able to set guest as project owner in invite * preparations for server role select in invite dialog * team management dialog done * server invite dialog updated * hiding invite dialog * fixed mocks
61 lines
2.0 KiB
TypeScript
61 lines
2.0 KiB
TypeScript
import { Roles } from '@speckle/shared'
|
|
import {
|
|
MutationStreamInviteUseArgs,
|
|
ProjectInviteCreateInput,
|
|
ProjectInviteUseInput,
|
|
StreamInviteCreateInput
|
|
} from '@/modules/core/graph/generated/graphql'
|
|
import { InviteCreateValidationError } from '@/modules/serverinvites/errors'
|
|
import {
|
|
buildUserTarget,
|
|
ResourceTargets
|
|
} from '@/modules/serverinvites/helpers/inviteHelper'
|
|
import { createAndSendInvite } from '@/modules/serverinvites/services/inviteCreationService'
|
|
import { has } from 'lodash'
|
|
import { finalizeStreamInvite } from '@/modules/serverinvites/services/inviteProcessingService'
|
|
|
|
type FullProjectInviteCreateInput = ProjectInviteCreateInput & { projectId: string }
|
|
|
|
const isStreamInviteCreateInput = (
|
|
i: StreamInviteCreateInput | FullProjectInviteCreateInput
|
|
): i is StreamInviteCreateInput => has(i, 'streamId')
|
|
|
|
export async function createStreamInviteAndNotify(
|
|
input: StreamInviteCreateInput | FullProjectInviteCreateInput,
|
|
inviterId: string
|
|
) {
|
|
const { email, userId, role } = input
|
|
|
|
if (!email && !userId) {
|
|
throw new InviteCreateValidationError('Either email or userId must be specified')
|
|
}
|
|
|
|
const target = userId ? buildUserTarget(userId) : (email as string)
|
|
await createAndSendInvite({
|
|
target,
|
|
inviterId,
|
|
resourceTarget: ResourceTargets.Streams,
|
|
resourceId: isStreamInviteCreateInput(input) ? input.streamId : input.projectId,
|
|
role: role || Roles.Stream.Contributor,
|
|
message: isStreamInviteCreateInput(input) ? input.message || undefined : undefined,
|
|
serverRole: input.serverRole || undefined
|
|
})
|
|
}
|
|
|
|
const isStreamInviteUseArgs = (
|
|
i: MutationStreamInviteUseArgs | ProjectInviteUseInput
|
|
): i is MutationStreamInviteUseArgs => has(i, 'streamId')
|
|
|
|
export async function useStreamInviteAndNotify(
|
|
input: MutationStreamInviteUseArgs | ProjectInviteUseInput,
|
|
userId: string
|
|
) {
|
|
const { accept, token } = input
|
|
await finalizeStreamInvite(
|
|
accept,
|
|
isStreamInviteUseArgs(input) ? input.streamId : input.projectId,
|
|
token,
|
|
userId
|
|
)
|
|
}
|