[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");
|
if (!memberDetails || !memberDetails?.id) throw new Error("Member not found");
|
||||||
// original data to revert back in case of error
|
// original data to revert back in case of error
|
||||||
const isCurrentUser = this.rootStore.user.data?.id === userId;
|
const isCurrentUser = this.rootStore.user.data?.id === userId;
|
||||||
const membershipBeforeUpdate = this.getProjectMembershipByUserId(userId, projectId);
|
const membershipBeforeUpdate = { ...this.getProjectMembershipByUserId(userId, projectId) };
|
||||||
const permissionBeforeUpdate = isCurrentUser
|
const permissionBeforeUpdate = isCurrentUser
|
||||||
? this.rootStore.user.permission.getProjectRoleByWorkspaceSlugAndProjectId(workspaceSlug, projectId)
|
? this.rootStore.user.permission.getProjectRoleByWorkspaceSlugAndProjectId(workspaceSlug, projectId)
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ export interface IWorkspaceMemberStore {
|
||||||
workspaceMemberInvitationIds: string[] | null;
|
workspaceMemberInvitationIds: string[] | null;
|
||||||
memberMap: Record<string, IWorkspaceMembership> | null;
|
memberMap: Record<string, IWorkspaceMembership> | null;
|
||||||
// computed actions
|
// computed actions
|
||||||
|
getWorkspaceMemberIds: (workspaceSlug: string) => string[];
|
||||||
getSearchedWorkspaceMemberIds: (searchQuery: string) => string[] | null;
|
getSearchedWorkspaceMemberIds: (searchQuery: string) => string[] | null;
|
||||||
getSearchedWorkspaceInvitationIds: (searchQuery: string) => string[] | null;
|
getSearchedWorkspaceInvitationIds: (searchQuery: string) => string[] | null;
|
||||||
getWorkspaceMemberDetails: (workspaceMemberId: string) => IWorkspaceMember | null;
|
getWorkspaceMemberDetails: (workspaceMemberId: string) => IWorkspaceMember | null;
|
||||||
|
|
@ -95,14 +96,8 @@ export class WorkspaceMemberStore implements IWorkspaceMemberStore {
|
||||||
get workspaceMemberIds() {
|
get workspaceMemberIds() {
|
||||||
const workspaceSlug = this.routerStore.workspaceSlug;
|
const workspaceSlug = this.routerStore.workspaceSlug;
|
||||||
if (!workspaceSlug) return null;
|
if (!workspaceSlug) return null;
|
||||||
let members = Object.values(this.workspaceMemberMap?.[workspaceSlug] ?? {});
|
|
||||||
members = sortBy(members, [
|
return this.getWorkspaceMemberIds(workspaceSlug);
|
||||||
(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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get memberMap() {
|
get memberMap() {
|
||||||
|
|
@ -117,6 +112,17 @@ export class WorkspaceMemberStore implements IWorkspaceMemberStore {
|
||||||
return this.workspaceMemberInvitations?.[workspaceSlug]?.map((inv) => inv.id);
|
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
|
* @description get the list of all the user ids that match the search query of all the members of the current workspace
|
||||||
* @param searchQuery
|
* @param searchQuery
|
||||||
|
|
@ -217,7 +223,7 @@ export class WorkspaceMemberStore implements IWorkspaceMemberStore {
|
||||||
const memberDetails = this.getWorkspaceMemberDetails(userId);
|
const memberDetails = this.getWorkspaceMemberDetails(userId);
|
||||||
if (!memberDetails) throw new Error("Member not found");
|
if (!memberDetails) throw new Error("Member not found");
|
||||||
// original data to revert back in case of error
|
// original data to revert back in case of error
|
||||||
const originalProjectMemberData = this.workspaceMemberMap?.[workspaceSlug]?.[userId];
|
const originalProjectMemberData = { ...this.workspaceMemberMap?.[workspaceSlug]?.[userId] };
|
||||||
try {
|
try {
|
||||||
runInAction(() => {
|
runInAction(() => {
|
||||||
set(this.workspaceMemberMap, [workspaceSlug, userId, "role"], data.role);
|
set(this.workspaceMemberMap, [workspaceSlug, userId, "role"], data.role);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue