[WEB-4311] fix: membership data handling and state reversal on error (#7205)
This commit is contained in:
parent
0fa9c8b015
commit
cf595de7c7
2 changed files with 16 additions and 10 deletions
|
|
@ -273,7 +273,7 @@ export abstract class BaseProjectMemberStore implements IBaseProjectMemberStore
|
|||
if (!memberDetails || !memberDetails?.id) throw new Error("Member not found");
|
||||
// original data to revert back in case of error
|
||||
const isCurrentUser = this.rootStore.user.data?.id === userId;
|
||||
const membershipBeforeUpdate = this.getProjectMembershipByUserId(userId, projectId);
|
||||
const membershipBeforeUpdate = { ...this.getProjectMembershipByUserId(userId, projectId) };
|
||||
const permissionBeforeUpdate = isCurrentUser
|
||||
? this.rootStore.user.permission.getProjectRoleByWorkspaceSlugAndProjectId(workspaceSlug, projectId)
|
||||
: undefined;
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ export interface IWorkspaceMemberStore {
|
|||
workspaceMemberInvitationIds: string[] | null;
|
||||
memberMap: Record<string, IWorkspaceMembership> | null;
|
||||
// computed actions
|
||||
getWorkspaceMemberIds: (workspaceSlug: string) => string[];
|
||||
getSearchedWorkspaceMemberIds: (searchQuery: string) => string[] | null;
|
||||
getSearchedWorkspaceInvitationIds: (searchQuery: string) => string[] | null;
|
||||
getWorkspaceMemberDetails: (workspaceMemberId: string) => IWorkspaceMember | null;
|
||||
|
|
@ -95,14 +96,8 @@ export class WorkspaceMemberStore implements IWorkspaceMemberStore {
|
|||
get workspaceMemberIds() {
|
||||
const workspaceSlug = this.routerStore.workspaceSlug;
|
||||
if (!workspaceSlug) return null;
|
||||
let members = Object.values(this.workspaceMemberMap?.[workspaceSlug] ?? {});
|
||||
members = sortBy(members, [
|
||||
(m) => m.member !== this.userStore?.data?.id,
|
||||
(m) => this.memberRoot?.memberMap?.[m.member]?.display_name?.toLowerCase(),
|
||||
]);
|
||||
//filter out bots
|
||||
const memberIds = members.filter((m) => !this.memberRoot?.memberMap?.[m.member]?.is_bot).map((m) => m.member);
|
||||
return memberIds;
|
||||
|
||||
return this.getWorkspaceMemberIds(workspaceSlug);
|
||||
}
|
||||
|
||||
get memberMap() {
|
||||
|
|
@ -117,6 +112,17 @@ export class WorkspaceMemberStore implements IWorkspaceMemberStore {
|
|||
return this.workspaceMemberInvitations?.[workspaceSlug]?.map((inv) => inv.id);
|
||||
}
|
||||
|
||||
getWorkspaceMemberIds = computedFn((workspaceSlug: string) => {
|
||||
let members = Object.values(this.workspaceMemberMap?.[workspaceSlug] ?? {});
|
||||
members = sortBy(members, [
|
||||
(m) => m.member !== this.userStore?.data?.id,
|
||||
(m) => this.memberRoot?.memberMap?.[m.member]?.display_name?.toLowerCase(),
|
||||
]);
|
||||
//filter out bots
|
||||
const memberIds = members.filter((m) => !this.memberRoot?.memberMap?.[m.member]?.is_bot).map((m) => m.member);
|
||||
return memberIds;
|
||||
});
|
||||
|
||||
/**
|
||||
* @description get the list of all the user ids that match the search query of all the members of the current workspace
|
||||
* @param searchQuery
|
||||
|
|
@ -217,7 +223,7 @@ export class WorkspaceMemberStore implements IWorkspaceMemberStore {
|
|||
const memberDetails = this.getWorkspaceMemberDetails(userId);
|
||||
if (!memberDetails) throw new Error("Member not found");
|
||||
// original data to revert back in case of error
|
||||
const originalProjectMemberData = this.workspaceMemberMap?.[workspaceSlug]?.[userId];
|
||||
const originalProjectMemberData = { ...this.workspaceMemberMap?.[workspaceSlug]?.[userId] };
|
||||
try {
|
||||
runInAction(() => {
|
||||
set(this.workspaceMemberMap, [workspaceSlug, userId, "role"], data.role);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue