mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-25 18:26:05 +08:00
refactor(core): adjust merbers module apis (#9695)
This commit is contained in:
@@ -95,19 +95,18 @@ export const CloudWorkspaceMembersPanel = ({
|
|||||||
|
|
||||||
const onGenerateInviteLink = useCallback(
|
const onGenerateInviteLink = useCallback(
|
||||||
async (expireTime: WorkspaceInviteLinkExpireTime) => {
|
async (expireTime: WorkspaceInviteLinkExpireTime) => {
|
||||||
const { link } =
|
const { link } = await membersService.generateInviteLink(expireTime);
|
||||||
await permissionService.permission.generateInviteLink(expireTime);
|
|
||||||
workspaceShareSettingService.sharePreview.revalidate();
|
workspaceShareSettingService.sharePreview.revalidate();
|
||||||
return link;
|
return link;
|
||||||
},
|
},
|
||||||
[permissionService.permission, workspaceShareSettingService.sharePreview]
|
[membersService, workspaceShareSettingService.sharePreview]
|
||||||
);
|
);
|
||||||
|
|
||||||
const onRevokeInviteLink = useCallback(async () => {
|
const onRevokeInviteLink = useCallback(async () => {
|
||||||
const success = await permissionService.permission.revokeInviteLink();
|
const success = await membersService.revokeInviteLink();
|
||||||
workspaceShareSettingService.sharePreview.revalidate();
|
workspaceShareSettingService.sharePreview.revalidate();
|
||||||
return success;
|
return success;
|
||||||
}, [permissionService.permission, workspaceShareSettingService.sharePreview]);
|
}, [membersService, workspaceShareSettingService.sharePreview]);
|
||||||
|
|
||||||
const onInviteBatchConfirm = useAsyncCallback(
|
const onInviteBatchConfirm = useAsyncCallback(
|
||||||
async ({
|
async ({
|
||||||
@@ -125,10 +124,7 @@ export const CloudWorkspaceMembersPanel = ({
|
|||||||
setIsMutating(false);
|
setIsMutating(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const results = await permissionService.permission.inviteMembers(
|
const results = await membersService.inviteMembers(uniqueEmails, true);
|
||||||
uniqueEmails,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
const unSuccessInvites = results.reduce<string[]>((acc, result) => {
|
const unSuccessInvites = results.reduce<string[]>((acc, result) => {
|
||||||
if (!result.sentSuccess) {
|
if (!result.sentSuccess) {
|
||||||
acc.push(result.email);
|
acc.push(result.email);
|
||||||
@@ -151,14 +147,7 @@ export const CloudWorkspaceMembersPanel = ({
|
|||||||
}
|
}
|
||||||
setIsMutating(false);
|
setIsMutating(false);
|
||||||
},
|
},
|
||||||
[
|
[isTeam, membersService, t, workspaceQuota, workspaceQuotaService.quota]
|
||||||
isTeam,
|
|
||||||
membersService.members,
|
|
||||||
permissionService.permission,
|
|
||||||
t,
|
|
||||||
workspaceQuota,
|
|
||||||
workspaceQuotaService.quota,
|
|
||||||
]
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const onImportCSV = useAsyncCallback(
|
const onImportCSV = useAsyncCallback(
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import { type AuthAccountInfo, AuthService } from '@affine/core/modules/cloud';
|
|||||||
import {
|
import {
|
||||||
type Member,
|
type Member,
|
||||||
WorkspaceMembersService,
|
WorkspaceMembersService,
|
||||||
WorkspacePermissionService,
|
|
||||||
} from '@affine/core/modules/permissions';
|
} from '@affine/core/modules/permissions';
|
||||||
import { WorkspaceService } from '@affine/core/modules/workspace';
|
import { WorkspaceService } from '@affine/core/modules/workspace';
|
||||||
import {
|
import {
|
||||||
@@ -143,7 +142,6 @@ const MemberItem = ({
|
|||||||
const membersService = useService(WorkspaceMembersService);
|
const membersService = useService(WorkspaceMembersService);
|
||||||
const workspace = useService(WorkspaceService).workspace;
|
const workspace = useService(WorkspaceService).workspace;
|
||||||
const workspaceName = useLiveData(workspace.name$);
|
const workspaceName = useLiveData(workspace.name$);
|
||||||
const permission = useService(WorkspacePermissionService).permission;
|
|
||||||
const isEquals = workspaceName === inputValue;
|
const isEquals = workspaceName === inputValue;
|
||||||
|
|
||||||
const show = useMemo(
|
const show = useMemo(
|
||||||
@@ -163,7 +161,7 @@ const MemberItem = ({
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const confirmAssign = useCallback(() => {
|
const confirmAssign = useCallback(() => {
|
||||||
permission
|
membersService
|
||||||
.adjustMemberPermission(member.id, Permission.Owner)
|
.adjustMemberPermission(member.id, Permission.Owner)
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if (result) {
|
if (result) {
|
||||||
@@ -183,7 +181,7 @@ const MemberItem = ({
|
|||||||
message: error.message,
|
message: error.message,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}, [permission, member, t, membersService]);
|
}, [member, t, membersService]);
|
||||||
|
|
||||||
const memberStatus = useMemo(() => getMemberStatus(member), [member]);
|
const memberStatus = useMemo(() => getMemberStatus(member), [member]);
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ export const MemberOptions = ({
|
|||||||
variant: 'error',
|
variant: 'error',
|
||||||
},
|
},
|
||||||
onConfirm: () =>
|
onConfirm: () =>
|
||||||
permission
|
membersService
|
||||||
.revokeMember(member.id)
|
.revokeMember(member.id)
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if (result) {
|
if (result) {
|
||||||
@@ -58,7 +58,7 @@ export const MemberOptions = ({
|
|||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[member, membersService, openConfirmModal, permission, t]
|
[member, membersService, openConfirmModal, t]
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleAssignOwner = useCallback(() => {
|
const handleAssignOwner = useCallback(() => {
|
||||||
@@ -75,7 +75,7 @@ export const MemberOptions = ({
|
|||||||
}, [openRemoveConfirmModal, member, t]);
|
}, [openRemoveConfirmModal, member, t]);
|
||||||
|
|
||||||
const handleApprove = useCallback(() => {
|
const handleApprove = useCallback(() => {
|
||||||
permission
|
membersService
|
||||||
.approveMember(member.id)
|
.approveMember(member.id)
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if (result) {
|
if (result) {
|
||||||
@@ -96,7 +96,7 @@ export const MemberOptions = ({
|
|||||||
message: error.message,
|
message: error.message,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}, [member, membersService, permission, t]);
|
}, [member, membersService, t]);
|
||||||
|
|
||||||
const handleDecline = useCallback(() => {
|
const handleDecline = useCallback(() => {
|
||||||
openRemoveConfirmModal({
|
openRemoveConfirmModal({
|
||||||
@@ -117,7 +117,7 @@ export const MemberOptions = ({
|
|||||||
}, [member, openRemoveConfirmModal, t]);
|
}, [member, openRemoveConfirmModal, t]);
|
||||||
|
|
||||||
const handleChangeToAdmin = useCallback(() => {
|
const handleChangeToAdmin = useCallback(() => {
|
||||||
permission
|
membersService
|
||||||
.adjustMemberPermission(member.id, Permission.Admin)
|
.adjustMemberPermission(member.id, Permission.Admin)
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if (result) {
|
if (result) {
|
||||||
@@ -138,9 +138,9 @@ export const MemberOptions = ({
|
|||||||
message: error.message,
|
message: error.message,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}, [member, membersService, permission, t]);
|
}, [member, membersService, t]);
|
||||||
const handleChangeToCollaborator = useCallback(() => {
|
const handleChangeToCollaborator = useCallback(() => {
|
||||||
permission
|
membersService
|
||||||
.adjustMemberPermission(member.id, Permission.Write)
|
.adjustMemberPermission(member.id, Permission.Write)
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if (result) {
|
if (result) {
|
||||||
@@ -161,7 +161,7 @@ export const MemberOptions = ({
|
|||||||
message: error.message,
|
message: error.message,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}, [member, membersService, permission, t]);
|
}, [member, membersService, t]);
|
||||||
|
|
||||||
const operationButtonInfo = useMemo(() => {
|
const operationButtonInfo = useMemo(() => {
|
||||||
return [
|
return [
|
||||||
|
|||||||
@@ -1,8 +1,4 @@
|
|||||||
import { DebugLogger } from '@affine/debug';
|
import { DebugLogger } from '@affine/debug';
|
||||||
import type {
|
|
||||||
Permission,
|
|
||||||
WorkspaceInviteLinkExpireTime,
|
|
||||||
} from '@affine/graphql';
|
|
||||||
import {
|
import {
|
||||||
backoffRetry,
|
backoffRetry,
|
||||||
catchErrorInto,
|
catchErrorInto,
|
||||||
@@ -75,65 +71,6 @@ export class WorkspacePermission extends Entity {
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
async inviteMember(email: string, sendInviteMail?: boolean) {
|
|
||||||
return await this.store.inviteMember(
|
|
||||||
this.workspaceService.workspace.id,
|
|
||||||
email,
|
|
||||||
sendInviteMail
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async inviteMembers(emails: string[], sendInviteMail?: boolean) {
|
|
||||||
return await this.store.inviteBatch(
|
|
||||||
this.workspaceService.workspace.id,
|
|
||||||
emails,
|
|
||||||
sendInviteMail
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async generateInviteLink(expireTime: WorkspaceInviteLinkExpireTime) {
|
|
||||||
return await this.store.generateInviteLink(
|
|
||||||
this.workspaceService.workspace.id,
|
|
||||||
expireTime
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async revokeInviteLink() {
|
|
||||||
return await this.store.revokeInviteLink(
|
|
||||||
this.workspaceService.workspace.id
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async revokeMember(userId: string) {
|
|
||||||
return await this.store.revokeMemberPermission(
|
|
||||||
this.workspaceService.workspace.id,
|
|
||||||
userId
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async acceptInvite(inviteId: string, sendAcceptMail?: boolean) {
|
|
||||||
return await this.store.acceptInvite(
|
|
||||||
this.workspaceService.workspace.id,
|
|
||||||
inviteId,
|
|
||||||
sendAcceptMail
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async approveMember(userId: string) {
|
|
||||||
return await this.store.approveMember(
|
|
||||||
this.workspaceService.workspace.id,
|
|
||||||
userId
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async adjustMemberPermission(userId: string, permission: Permission) {
|
|
||||||
return await this.store.adjustMemberPermission(
|
|
||||||
this.workspaceService.workspace.id,
|
|
||||||
userId,
|
|
||||||
permission
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
override dispose(): void {
|
override dispose(): void {
|
||||||
this.revalidate.unsubscribe();
|
this.revalidate.unsubscribe();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ export function configurePermissionsModule(framework: Framework) {
|
|||||||
])
|
])
|
||||||
.store(WorkspacePermissionStore, [WorkspaceServerService])
|
.store(WorkspacePermissionStore, [WorkspaceServerService])
|
||||||
.entity(WorkspacePermission, [WorkspaceService, WorkspacePermissionStore])
|
.entity(WorkspacePermission, [WorkspaceService, WorkspacePermissionStore])
|
||||||
.service(WorkspaceMembersService)
|
.service(WorkspaceMembersService, [WorkspaceMembersStore, WorkspaceService])
|
||||||
.store(WorkspaceMembersStore, [WorkspaceServerService])
|
.store(WorkspaceMembersStore, [WorkspaceServerService])
|
||||||
.entity(WorkspaceMembers, [WorkspaceMembersStore, WorkspaceService]);
|
.entity(WorkspaceMembers, [WorkspaceMembersStore, WorkspaceService]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,71 @@
|
|||||||
|
import type {
|
||||||
|
Permission,
|
||||||
|
WorkspaceInviteLinkExpireTime,
|
||||||
|
} from '@affine/graphql';
|
||||||
import { Service } from '@toeverything/infra';
|
import { Service } from '@toeverything/infra';
|
||||||
|
|
||||||
|
import type { WorkspaceService } from '../../workspace';
|
||||||
import { WorkspaceMembers } from '../entities/members';
|
import { WorkspaceMembers } from '../entities/members';
|
||||||
|
import type { WorkspaceMembersStore } from '../stores/members';
|
||||||
|
|
||||||
export class WorkspaceMembersService extends Service {
|
export class WorkspaceMembersService extends Service {
|
||||||
|
constructor(
|
||||||
|
private readonly store: WorkspaceMembersStore,
|
||||||
|
private readonly workspaceService: WorkspaceService
|
||||||
|
) {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
members = this.framework.createEntity(WorkspaceMembers);
|
members = this.framework.createEntity(WorkspaceMembers);
|
||||||
|
|
||||||
|
async inviteMember(email: string, sendInviteMail?: boolean) {
|
||||||
|
return await this.store.inviteMember(
|
||||||
|
this.workspaceService.workspace.id,
|
||||||
|
email,
|
||||||
|
sendInviteMail
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async inviteMembers(emails: string[], sendInviteMail?: boolean) {
|
||||||
|
return await this.store.inviteBatch(
|
||||||
|
this.workspaceService.workspace.id,
|
||||||
|
emails,
|
||||||
|
sendInviteMail
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async generateInviteLink(expireTime: WorkspaceInviteLinkExpireTime) {
|
||||||
|
return await this.store.generateInviteLink(
|
||||||
|
this.workspaceService.workspace.id,
|
||||||
|
expireTime
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async revokeInviteLink() {
|
||||||
|
return await this.store.revokeInviteLink(
|
||||||
|
this.workspaceService.workspace.id
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async revokeMember(userId: string) {
|
||||||
|
return await this.store.revokeMemberPermission(
|
||||||
|
this.workspaceService.workspace.id,
|
||||||
|
userId
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async approveMember(userId: string) {
|
||||||
|
return await this.store.approveMember(
|
||||||
|
this.workspaceService.workspace.id,
|
||||||
|
userId
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async adjustMemberPermission(userId: string, permission: Permission) {
|
||||||
|
return await this.store.adjustMemberPermission(
|
||||||
|
this.workspaceService.workspace.id,
|
||||||
|
userId,
|
||||||
|
permission
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,15 @@
|
|||||||
import { getMembersByWorkspaceIdQuery } from '@affine/graphql';
|
import {
|
||||||
|
approveWorkspaceTeamMemberMutation,
|
||||||
|
createInviteLinkMutation,
|
||||||
|
getMembersByWorkspaceIdQuery,
|
||||||
|
grantWorkspaceTeamMemberMutation,
|
||||||
|
inviteByEmailMutation,
|
||||||
|
inviteByEmailsMutation,
|
||||||
|
type Permission,
|
||||||
|
revokeInviteLinkMutation,
|
||||||
|
revokeMemberPermissionMutation,
|
||||||
|
type WorkspaceInviteLinkExpireTime,
|
||||||
|
} from '@affine/graphql';
|
||||||
import { Store } from '@toeverything/infra';
|
import { Store } from '@toeverything/infra';
|
||||||
|
|
||||||
import type { WorkspaceServerService } from '../../cloud';
|
import type { WorkspaceServerService } from '../../cloud';
|
||||||
@@ -31,4 +42,125 @@ export class WorkspaceMembersStore extends Store {
|
|||||||
|
|
||||||
return data.workspace;
|
return data.workspace;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async inviteMember(
|
||||||
|
workspaceId: string,
|
||||||
|
email: string,
|
||||||
|
sendInviteMail = false
|
||||||
|
) {
|
||||||
|
if (!this.workspaceServerService.server) {
|
||||||
|
throw new Error('No Server');
|
||||||
|
}
|
||||||
|
const invite = await this.workspaceServerService.server.gql({
|
||||||
|
query: inviteByEmailMutation,
|
||||||
|
variables: {
|
||||||
|
workspaceId,
|
||||||
|
email,
|
||||||
|
sendInviteMail,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return invite.invite;
|
||||||
|
}
|
||||||
|
|
||||||
|
async inviteBatch(
|
||||||
|
workspaceId: string,
|
||||||
|
emails: string[],
|
||||||
|
sendInviteMail = false
|
||||||
|
) {
|
||||||
|
if (!this.workspaceServerService.server) {
|
||||||
|
throw new Error('No Server');
|
||||||
|
}
|
||||||
|
const inviteBatch = await this.workspaceServerService.server.gql({
|
||||||
|
query: inviteByEmailsMutation,
|
||||||
|
variables: {
|
||||||
|
workspaceId,
|
||||||
|
emails,
|
||||||
|
sendInviteMail,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return inviteBatch.inviteBatch;
|
||||||
|
}
|
||||||
|
|
||||||
|
async generateInviteLink(
|
||||||
|
workspaceId: string,
|
||||||
|
expireTime: WorkspaceInviteLinkExpireTime
|
||||||
|
) {
|
||||||
|
if (!this.workspaceServerService.server) {
|
||||||
|
throw new Error('No Server');
|
||||||
|
}
|
||||||
|
const inviteLink = await this.workspaceServerService.server.gql({
|
||||||
|
query: createInviteLinkMutation,
|
||||||
|
variables: {
|
||||||
|
workspaceId,
|
||||||
|
expireTime,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return inviteLink.createInviteLink;
|
||||||
|
}
|
||||||
|
|
||||||
|
async revokeInviteLink(workspaceId: string, signal?: AbortSignal) {
|
||||||
|
if (!this.workspaceServerService.server) {
|
||||||
|
throw new Error('No Server');
|
||||||
|
}
|
||||||
|
const revoke = await this.workspaceServerService.server.gql({
|
||||||
|
query: revokeInviteLinkMutation,
|
||||||
|
variables: {
|
||||||
|
workspaceId,
|
||||||
|
},
|
||||||
|
context: { signal },
|
||||||
|
});
|
||||||
|
return revoke.revokeInviteLink;
|
||||||
|
}
|
||||||
|
|
||||||
|
async revokeMemberPermission(
|
||||||
|
workspaceId: string,
|
||||||
|
userId: string,
|
||||||
|
signal?: AbortSignal
|
||||||
|
) {
|
||||||
|
if (!this.workspaceServerService.server) {
|
||||||
|
throw new Error('No Server');
|
||||||
|
}
|
||||||
|
const revoke = await this.workspaceServerService.server.gql({
|
||||||
|
query: revokeMemberPermissionMutation,
|
||||||
|
variables: {
|
||||||
|
workspaceId,
|
||||||
|
userId,
|
||||||
|
},
|
||||||
|
context: { signal },
|
||||||
|
});
|
||||||
|
return revoke.revoke;
|
||||||
|
}
|
||||||
|
|
||||||
|
async approveMember(workspaceId: string, userId: string) {
|
||||||
|
if (!this.workspaceServerService.server) {
|
||||||
|
throw new Error('No Server');
|
||||||
|
}
|
||||||
|
const member = await this.workspaceServerService.server.gql({
|
||||||
|
query: approveWorkspaceTeamMemberMutation,
|
||||||
|
variables: {
|
||||||
|
workspaceId,
|
||||||
|
userId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return member.approveMember;
|
||||||
|
}
|
||||||
|
|
||||||
|
async adjustMemberPermission(
|
||||||
|
workspaceId: string,
|
||||||
|
userId: string,
|
||||||
|
permission: Permission
|
||||||
|
) {
|
||||||
|
if (!this.workspaceServerService.server) {
|
||||||
|
throw new Error('No Server');
|
||||||
|
}
|
||||||
|
const member = await this.workspaceServerService.server.gql({
|
||||||
|
query: grantWorkspaceTeamMemberMutation,
|
||||||
|
variables: {
|
||||||
|
workspaceId,
|
||||||
|
userId,
|
||||||
|
permission,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return member.grantMember;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,5 @@
|
|||||||
import type { WorkspaceServerService } from '@affine/core/modules/cloud';
|
import type { WorkspaceServerService } from '@affine/core/modules/cloud';
|
||||||
import {
|
import { getWorkspaceInfoQuery, leaveWorkspaceMutation } from '@affine/graphql';
|
||||||
acceptInviteByInviteIdMutation,
|
|
||||||
approveWorkspaceTeamMemberMutation,
|
|
||||||
createInviteLinkMutation,
|
|
||||||
getWorkspaceInfoQuery,
|
|
||||||
grantWorkspaceTeamMemberMutation,
|
|
||||||
inviteByEmailMutation,
|
|
||||||
inviteByEmailsMutation,
|
|
||||||
leaveWorkspaceMutation,
|
|
||||||
type Permission,
|
|
||||||
revokeInviteLinkMutation,
|
|
||||||
revokeMemberPermissionMutation,
|
|
||||||
type WorkspaceInviteLinkExpireTime,
|
|
||||||
} from '@affine/graphql';
|
|
||||||
import { Store } from '@toeverything/infra';
|
import { Store } from '@toeverything/infra';
|
||||||
|
|
||||||
export class WorkspacePermissionStore extends Store {
|
export class WorkspacePermissionStore extends Store {
|
||||||
@@ -35,146 +22,6 @@ export class WorkspacePermissionStore extends Store {
|
|||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
async inviteMember(
|
|
||||||
workspaceId: string,
|
|
||||||
email: string,
|
|
||||||
sendInviteMail = false
|
|
||||||
) {
|
|
||||||
if (!this.workspaceServerService.server) {
|
|
||||||
throw new Error('No Server');
|
|
||||||
}
|
|
||||||
const invite = await this.workspaceServerService.server.gql({
|
|
||||||
query: inviteByEmailMutation,
|
|
||||||
variables: {
|
|
||||||
workspaceId,
|
|
||||||
email,
|
|
||||||
sendInviteMail,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
return invite.invite;
|
|
||||||
}
|
|
||||||
|
|
||||||
async inviteBatch(
|
|
||||||
workspaceId: string,
|
|
||||||
emails: string[],
|
|
||||||
sendInviteMail = false
|
|
||||||
) {
|
|
||||||
if (!this.workspaceServerService.server) {
|
|
||||||
throw new Error('No Server');
|
|
||||||
}
|
|
||||||
const inviteBatch = await this.workspaceServerService.server.gql({
|
|
||||||
query: inviteByEmailsMutation,
|
|
||||||
variables: {
|
|
||||||
workspaceId,
|
|
||||||
emails,
|
|
||||||
sendInviteMail,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
return inviteBatch.inviteBatch;
|
|
||||||
}
|
|
||||||
|
|
||||||
async generateInviteLink(
|
|
||||||
workspaceId: string,
|
|
||||||
expireTime: WorkspaceInviteLinkExpireTime
|
|
||||||
) {
|
|
||||||
if (!this.workspaceServerService.server) {
|
|
||||||
throw new Error('No Server');
|
|
||||||
}
|
|
||||||
const inviteLink = await this.workspaceServerService.server.gql({
|
|
||||||
query: createInviteLinkMutation,
|
|
||||||
variables: {
|
|
||||||
workspaceId,
|
|
||||||
expireTime,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
return inviteLink.createInviteLink;
|
|
||||||
}
|
|
||||||
|
|
||||||
async revokeInviteLink(workspaceId: string, signal?: AbortSignal) {
|
|
||||||
if (!this.workspaceServerService.server) {
|
|
||||||
throw new Error('No Server');
|
|
||||||
}
|
|
||||||
const revoke = await this.workspaceServerService.server.gql({
|
|
||||||
query: revokeInviteLinkMutation,
|
|
||||||
variables: {
|
|
||||||
workspaceId,
|
|
||||||
},
|
|
||||||
context: { signal },
|
|
||||||
});
|
|
||||||
return revoke.revokeInviteLink;
|
|
||||||
}
|
|
||||||
|
|
||||||
async revokeMemberPermission(
|
|
||||||
workspaceId: string,
|
|
||||||
userId: string,
|
|
||||||
signal?: AbortSignal
|
|
||||||
) {
|
|
||||||
if (!this.workspaceServerService.server) {
|
|
||||||
throw new Error('No Server');
|
|
||||||
}
|
|
||||||
const revoke = await this.workspaceServerService.server.gql({
|
|
||||||
query: revokeMemberPermissionMutation,
|
|
||||||
variables: {
|
|
||||||
workspaceId,
|
|
||||||
userId,
|
|
||||||
},
|
|
||||||
context: { signal },
|
|
||||||
});
|
|
||||||
return revoke.revoke;
|
|
||||||
}
|
|
||||||
|
|
||||||
async acceptInvite(
|
|
||||||
workspaceId: string,
|
|
||||||
inviteId: string,
|
|
||||||
sendAcceptMail = false
|
|
||||||
) {
|
|
||||||
if (!this.workspaceServerService.server) {
|
|
||||||
throw new Error('No Server');
|
|
||||||
}
|
|
||||||
const accept = await this.workspaceServerService.server.gql({
|
|
||||||
query: acceptInviteByInviteIdMutation,
|
|
||||||
variables: {
|
|
||||||
workspaceId,
|
|
||||||
inviteId,
|
|
||||||
sendAcceptMail,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
return accept.acceptInviteById;
|
|
||||||
}
|
|
||||||
|
|
||||||
async approveMember(workspaceId: string, userId: string) {
|
|
||||||
if (!this.workspaceServerService.server) {
|
|
||||||
throw new Error('No Server');
|
|
||||||
}
|
|
||||||
const member = await this.workspaceServerService.server.gql({
|
|
||||||
query: approveWorkspaceTeamMemberMutation,
|
|
||||||
variables: {
|
|
||||||
workspaceId,
|
|
||||||
userId,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
return member.approveMember;
|
|
||||||
}
|
|
||||||
|
|
||||||
async adjustMemberPermission(
|
|
||||||
workspaceId: string,
|
|
||||||
userId: string,
|
|
||||||
permission: Permission
|
|
||||||
) {
|
|
||||||
if (!this.workspaceServerService.server) {
|
|
||||||
throw new Error('No Server');
|
|
||||||
}
|
|
||||||
const member = await this.workspaceServerService.server.gql({
|
|
||||||
query: grantWorkspaceTeamMemberMutation,
|
|
||||||
variables: {
|
|
||||||
workspaceId,
|
|
||||||
userId,
|
|
||||||
permission,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
return member.grantMember;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param workspaceName for send email
|
* @param workspaceName for send email
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user