feat(fe2): invite + list workspace invites (#2629)
* list invites table * invites list works * update last reminded date on resend * fix FE * WIP invitedialog + updated debounced utility * invite create works * exclude users correctly * more adjustments * minor cleanup * using workspace invite server role * test fix * fixed multiple root eslint issues * minor adjustments
This commit is contained in:
committed by
GitHub
parent
03db1cca94
commit
4dae1569cd
@@ -41,13 +41,15 @@ export const onProjectCreatedFactory =
|
||||
const workspaceMembers = await getWorkspaceRoles({ workspaceId })
|
||||
|
||||
await Promise.all(
|
||||
workspaceMembers.map(({ userId, role: workspaceRole }) =>
|
||||
grantStreamPermissions({
|
||||
workspaceMembers.map(({ userId, role: workspaceRole }) => {
|
||||
if (workspaceRole === Roles.Workspace.Guest) return
|
||||
|
||||
return grantStreamPermissions({
|
||||
streamId: projectId,
|
||||
userId,
|
||||
role: mapWorkspaceRoleToProjectRole(workspaceRole)
|
||||
})
|
||||
)
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -435,7 +435,7 @@ export = FF_WORKSPACES_MODULE_ENABLED
|
||||
|
||||
return collaborators
|
||||
},
|
||||
invitedTeam: async (parent) => {
|
||||
invitedTeam: async (parent, args) => {
|
||||
const getPendingTeam = getPendingWorkspaceCollaboratorsFactory({
|
||||
queryAllResourceInvites: queryAllResourceInvitesFactory({
|
||||
db,
|
||||
@@ -444,7 +444,7 @@ export = FF_WORKSPACES_MODULE_ENABLED
|
||||
getInvitationTargetUsers: getInvitationTargetUsersFactory({ getUsers })
|
||||
})
|
||||
|
||||
return await getPendingTeam({ workspaceId: parent.id })
|
||||
return await getPendingTeam({ workspaceId: parent.id, filter: args.filter })
|
||||
},
|
||||
projects: async (parent, args) => {
|
||||
const getWorkspaceProjects = getWorkspaceProjectsFactory({ getStreams })
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
import { TokenResourceIdentifier } from '@/modules/core/domain/tokens/types'
|
||||
import {
|
||||
PendingWorkspaceCollaboratorsFilter,
|
||||
TokenResourceIdentifierType,
|
||||
WorkspaceInviteCreateInput
|
||||
} from '@/modules/core/graph/generated/graphql'
|
||||
import { mapServerRoleToValue } from '@/modules/core/helpers/graphTypes'
|
||||
import { getWorkspaceRoute } from '@/modules/core/helpers/routeHelper'
|
||||
import { isResourceAllowed } from '@/modules/core/helpers/token'
|
||||
import { LimitedUserRecord } from '@/modules/core/helpers/types'
|
||||
import { removePrivateFields } from '@/modules/core/helpers/userHelper'
|
||||
import { getUser } from '@/modules/core/repositories/users'
|
||||
import { ServerInviteResourceType } from '@/modules/serverinvites/domain/constants'
|
||||
import {
|
||||
FindInvite,
|
||||
QueryAllResourceInvites,
|
||||
@@ -82,7 +85,12 @@ export const createWorkspaceInviteFactory =
|
||||
role:
|
||||
(input.role ? mapGqlWorkspaceRoleToMainRole(input.role) : null) ||
|
||||
Roles.Workspace.Member,
|
||||
primary: true
|
||||
primary: true,
|
||||
secondaryResourceRoles: {
|
||||
...(input.serverRole
|
||||
? { [ServerInviteResourceType]: mapServerRoleToValue(input.serverRole) }
|
||||
: {})
|
||||
}
|
||||
}
|
||||
|
||||
return await deps.createAndSendInvite(
|
||||
@@ -241,7 +249,8 @@ function buildPendingWorkspaceCollaboratorModel(
|
||||
title: resolveInviteTargetTitle(invite, targetUser),
|
||||
role: invite.resource.role || Roles.Workspace.Member,
|
||||
invitedById: invite.inviterId,
|
||||
user: targetUser
|
||||
user: targetUser,
|
||||
updatedAt: invite.updatedAt
|
||||
}
|
||||
}
|
||||
|
||||
@@ -306,8 +315,9 @@ export const getPendingWorkspaceCollaboratorsFactory =
|
||||
}) =>
|
||||
async (params: {
|
||||
workspaceId: string
|
||||
filter?: MaybeNullOrUndefined<PendingWorkspaceCollaboratorsFilter>
|
||||
}): Promise<PendingWorkspaceCollaboratorGraphQLReturn[]> => {
|
||||
const { workspaceId } = params
|
||||
const { workspaceId, filter } = params
|
||||
|
||||
// Get all pending invites
|
||||
const invites = await deps.queryAllResourceInvites<
|
||||
@@ -315,7 +325,8 @@ export const getPendingWorkspaceCollaboratorsFactory =
|
||||
WorkspaceRoles
|
||||
>({
|
||||
resourceId: workspaceId,
|
||||
resourceType: WorkspaceInviteResourceType
|
||||
resourceType: WorkspaceInviteResourceType,
|
||||
search: filter?.search || undefined
|
||||
})
|
||||
|
||||
// Get all target users, if any
|
||||
|
||||
@@ -7,7 +7,7 @@ import { expect } from 'chai'
|
||||
|
||||
describe('Event handlers', () => {
|
||||
describe('onProjectCreatedFactory creates a function, that', () => {
|
||||
it('grants project roles for all workspace members', async () => {
|
||||
it('grants project roles for all workspace members, except guests', async () => {
|
||||
const workspaceId = cryptoRandomString({ length: 10 })
|
||||
const projectId = cryptoRandomString({ length: 10 })
|
||||
|
||||
@@ -48,7 +48,7 @@ describe('Event handlers', () => {
|
||||
project: { workspaceId, id: projectId } as StreamRecord
|
||||
})
|
||||
|
||||
expect(projectRoles.length).to.equal(3)
|
||||
expect(projectRoles.length).to.equal(2)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user