mirror of
https://github.com/makeplane/plane.git
synced 2026-02-09 07:38:52 -06:00
[WEB-4311] fix: membership data handling and state reversal on error (#7205)
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user