feat(server): always send invite email (#9168)

fix AF-1976
This commit is contained in:
darkskygit
2024-12-16 04:45:12 +00:00
parent 87bbcae5e2
commit de2dab32c0
3 changed files with 27 additions and 27 deletions
@@ -118,7 +118,10 @@ export class TeamWorkspaceResolver {
? WorkspaceMemberStatus.NeedMoreSeat ? WorkspaceMemberStatus.NeedMoreSeat
: WorkspaceMemberStatus.Pending : 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 { try {
await this.workspaceService.sendInviteMail(ret.inviteId, email); await this.workspaceService.sendInviteMail(ret.inviteId, email);
ret.sentSuccess = true; 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') @OnEvent('workspace.team.reviewRequest')
async onReviewRequest({ async onReviewRequest({
inviteIds, inviteIds,
@@ -215,23 +215,24 @@ const MemberItem = ({
}; };
const getMemberStatus = (member: Member): I18nString => { const getMemberStatus = (member: Member): I18nString => {
if (member.status === WorkspaceMemberStatus.Pending) { switch (member.status) {
return 'Pending'; case WorkspaceMemberStatus.NeedMoreSeat:
} else if (member.status === WorkspaceMemberStatus.UnderReview) { case WorkspaceMemberStatus.NeedMoreSeatAndReview:
return 'Under-Review'; case WorkspaceMemberStatus.Pending:
} else if (member.status === WorkspaceMemberStatus.Accepted) { return 'Pending';
switch (member.permission) { case WorkspaceMemberStatus.UnderReview:
case Permission.Owner: return 'Under-Review';
return 'Workspace Owner'; case WorkspaceMemberStatus.Accepted:
case Permission.Admin: switch (member.permission) {
return 'Admin'; case Permission.Owner:
case Permission.Write: return 'Workspace Owner';
return 'Collaborator'; case Permission.Admin:
default: return 'Admin';
return 'Member'; case Permission.Write:
} return 'Collaborator';
} else { default:
return 'Need-More-Seats'; return 'Member';
}
} }
}; };
@@ -181,7 +181,11 @@ export const MemberOptions = ({
onClick: handleRevoke, onClick: handleRevoke,
show: show:
(isAdmin || isOwner) && (isAdmin || isOwner) &&
member.status === WorkspaceMemberStatus.Pending, [
WorkspaceMemberStatus.NeedMoreSeat,
WorkspaceMemberStatus.NeedMoreSeatAndReview,
WorkspaceMemberStatus.Pending,
].includes(member.status),
}, },
{ {
label: t['com.affine.payment.member.team.remove'](), label: t['com.affine.payment.member.team.remove'](),