Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion web/core/store/member/base-project-member.store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
24 changes: 15 additions & 9 deletions web/core/store/member/workspace-member.store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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() {
Expand All @@ -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
Expand Down Expand Up @@ -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);
Expand Down