From de2dab32c0b48cf880f5e8d40d372383e1c270c7 Mon Sep 17 00:00:00 2001 From: darkskygit Date: Mon, 16 Dec 2024 04:45:12 +0000 Subject: [PATCH] feat(server): always send invite email (#9168) fix AF-1976 --- .../src/core/workspaces/resolvers/team.ts | 13 +++---- .../members/member-list.tsx | 35 ++++++++++--------- .../members/member-option.tsx | 6 +++- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/packages/backend/server/src/core/workspaces/resolvers/team.ts b/packages/backend/server/src/core/workspaces/resolvers/team.ts index 195e7fad99..a42eb6c576 100644 --- a/packages/backend/server/src/core/workspaces/resolvers/team.ts +++ b/packages/backend/server/src/core/workspaces/resolvers/team.ts @@ -118,7 +118,10 @@ export class TeamWorkspaceResolver { ? WorkspaceMemberStatus.NeedMoreSeat : WorkspaceMemberStatus.Pending ); - if (!needMoreSeat && sendInviteMail) { + // NOTE: we always send email even seat not enough + // because at this moment we cannot know whether the seat increase charge was successful + // after user click the invite link, we can check again and reject if charge failed + if (sendInviteMail) { try { await this.workspaceService.sendInviteMail(ret.inviteId, email); ret.sentSuccess = true; @@ -311,14 +314,6 @@ export class TeamWorkspaceResolver { } } - @OnEvent('workspace.team.seatAvailable') - async onSeatAvailable(payload: EventPayload<'workspace.team.seatAvailable'>) { - // send invite mail when seat is available for NeedMoreSeat member - for (const { inviteId, email } of payload) { - await this.workspaceService.sendInviteMail(inviteId, email); - } - } - @OnEvent('workspace.team.reviewRequest') async onReviewRequest({ inviteIds, diff --git a/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-list.tsx b/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-list.tsx index 84d6c04505..96e5cb6add 100644 --- a/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-list.tsx +++ b/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-list.tsx @@ -215,23 +215,24 @@ const MemberItem = ({ }; const getMemberStatus = (member: Member): I18nString => { - if (member.status === WorkspaceMemberStatus.Pending) { - return 'Pending'; - } else if (member.status === WorkspaceMemberStatus.UnderReview) { - return 'Under-Review'; - } else if (member.status === WorkspaceMemberStatus.Accepted) { - switch (member.permission) { - case Permission.Owner: - return 'Workspace Owner'; - case Permission.Admin: - return 'Admin'; - case Permission.Write: - return 'Collaborator'; - default: - return 'Member'; - } - } else { - return 'Need-More-Seats'; + switch (member.status) { + case WorkspaceMemberStatus.NeedMoreSeat: + case WorkspaceMemberStatus.NeedMoreSeatAndReview: + case WorkspaceMemberStatus.Pending: + return 'Pending'; + case WorkspaceMemberStatus.UnderReview: + return 'Under-Review'; + case WorkspaceMemberStatus.Accepted: + switch (member.permission) { + case Permission.Owner: + return 'Workspace Owner'; + case Permission.Admin: + return 'Admin'; + case Permission.Write: + return 'Collaborator'; + default: + return 'Member'; + } } }; diff --git a/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-option.tsx b/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-option.tsx index eb1306b1fe..85c79f20ae 100644 --- a/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-option.tsx +++ b/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/new-workspace-setting-detail/members/member-option.tsx @@ -181,7 +181,11 @@ export const MemberOptions = ({ onClick: handleRevoke, show: (isAdmin || isOwner) && - member.status === WorkspaceMemberStatus.Pending, + [ + WorkspaceMemberStatus.NeedMoreSeat, + WorkspaceMemberStatus.NeedMoreSeatAndReview, + WorkspaceMemberStatus.Pending, + ].includes(member.status), }, { label: t['com.affine.payment.member.team.remove'](),