Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1aac9ce36b |
@@ -41,13 +41,4 @@ export class ProjectMemberStore extends BaseProjectMemberStore implements IProje
|
||||
* @param userId - The ID of the user to remove from the project
|
||||
*/
|
||||
processMemberRemoval = (projectId: string, userId: string) => this.handleMemberRemoval(projectId, userId);
|
||||
|
||||
/**
|
||||
* @description Mutate project members activity
|
||||
* @param workspaceSlug
|
||||
* @param projectId
|
||||
*/
|
||||
mutateProjectMembersActivity = async (_workspaceSlug: string, _projectId: string) => {
|
||||
// No-op in default/CE version
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// store
|
||||
import type { IBaseWorkspaceMemberStore } from "@/store/member/workspace/workspace-member.store";
|
||||
import { BaseWorkspaceMemberStore } from "@/store/member/workspace/workspace-member.store";
|
||||
import type { RootStore } from "@/plane-web/store/root.store";
|
||||
import type { IMemberRootStore } from "@/store/member";
|
||||
|
||||
export type IWorkspaceMemberStore = IBaseWorkspaceMemberStore;
|
||||
|
||||
export class WorkspaceMemberStore extends BaseWorkspaceMemberStore implements IWorkspaceMemberStore {
|
||||
constructor(_memberRoot: IMemberRootStore, _rootStore: RootStore) {
|
||||
super(_memberRoot, _rootStore);
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
// store
|
||||
import { BaseWorkspaceRootStore } from "@/store/workspace";
|
||||
import type { RootStore } from "@/plane-web/store/root.store";
|
||||
|
||||
export class WorkspaceRootStore extends BaseWorkspaceRootStore {
|
||||
constructor(_rootStore: RootStore) {
|
||||
super(_rootStore);
|
||||
}
|
||||
|
||||
// actions
|
||||
/**
|
||||
* Mutate workspace members activity
|
||||
* @param workspaceSlug
|
||||
*/
|
||||
mutateWorkspaceMembersActivity = async (_workspaceSlug: string) => {
|
||||
// No-op in default/CE version
|
||||
};
|
||||
}
|
||||
@@ -5,10 +5,9 @@ import type { IUserLite } from "@plane/types";
|
||||
// plane web imports
|
||||
import type { IProjectMemberStore } from "@/plane-web/store/member/project-member.store";
|
||||
import { ProjectMemberStore } from "@/plane-web/store/member/project-member.store";
|
||||
import type { IWorkspaceMemberStore } from "@/plane-web/store/member/workspace-member.store";
|
||||
import { WorkspaceMemberStore } from "@/plane-web/store/member/workspace-member.store";
|
||||
import type { RootStore } from "@/plane-web/store/root.store";
|
||||
// local imports
|
||||
import type { IWorkspaceMemberStore } from "./workspace/workspace-member.store";
|
||||
import { WorkspaceMemberStore } from "./workspace/workspace-member.store";
|
||||
|
||||
export interface IMemberRootStore {
|
||||
// observables
|
||||
|
||||
@@ -81,7 +81,6 @@ export interface IBaseProjectMemberStore {
|
||||
role: EUserProjectRoles
|
||||
) => Promise<TProjectMembership>;
|
||||
removeMemberFromProject: (workspaceSlug: string, projectId: string, userId: string) => Promise<void>;
|
||||
mutateProjectMembersActivity: (workspaceSlug: string, projectId: string) => Promise<void>;
|
||||
}
|
||||
|
||||
export abstract class BaseProjectMemberStore implements IBaseProjectMemberStore {
|
||||
@@ -305,8 +304,8 @@ export abstract class BaseProjectMemberStore implements IBaseProjectMemberStore
|
||||
* @param data
|
||||
* @returns Promise<TProjectMembership[]>
|
||||
*/
|
||||
bulkAddMembersToProject = async (workspaceSlug: string, projectId: string, data: IProjectBulkAddFormData) =>
|
||||
await this.projectMemberService.bulkAddMembersToProject(workspaceSlug, projectId, data).then((response) => {
|
||||
async bulkAddMembersToProject(workspaceSlug: string, projectId: string, data: IProjectBulkAddFormData) {
|
||||
return await this.projectMemberService.bulkAddMembersToProject(workspaceSlug, projectId, data).then((response) => {
|
||||
runInAction(() => {
|
||||
response.forEach((member) => {
|
||||
set(this.projectMemberMap, [projectId, member.member], {
|
||||
@@ -322,9 +321,10 @@ export abstract class BaseProjectMemberStore implements IBaseProjectMemberStore
|
||||
this.projectRoot.projectMap[projectId].members = this.projectRoot.projectMap?.[projectId]?.members?.concat(
|
||||
data.members.map((m) => m.member_id)
|
||||
);
|
||||
void this.mutateProjectMembersActivity(workspaceSlug, projectId);
|
||||
|
||||
return response;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @description update the role of a member in a project
|
||||
@@ -345,7 +345,7 @@ export abstract class BaseProjectMemberStore implements IBaseProjectMemberStore
|
||||
* @param userId
|
||||
* @param data
|
||||
*/
|
||||
updateMemberRole = async (workspaceSlug: string, projectId: string, userId: string, role: EUserProjectRoles) => {
|
||||
async updateMemberRole(workspaceSlug: string, projectId: string, userId: string, role: EUserProjectRoles) {
|
||||
const memberDetails = this.getProjectMemberDetails(userId, projectId);
|
||||
if (!memberDetails || !memberDetails?.id) throw new Error("Member not found");
|
||||
// original data to revert back in case of error
|
||||
@@ -376,7 +376,7 @@ export abstract class BaseProjectMemberStore implements IBaseProjectMemberStore
|
||||
role,
|
||||
}
|
||||
);
|
||||
void this.mutateProjectMembersActivity(workspaceSlug, projectId);
|
||||
|
||||
return response;
|
||||
} catch (error) {
|
||||
// revert back to original members in case of error
|
||||
@@ -398,7 +398,7 @@ export abstract class BaseProjectMemberStore implements IBaseProjectMemberStore
|
||||
});
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @description Handles the removal of a member from a project
|
||||
@@ -428,15 +428,14 @@ export abstract class BaseProjectMemberStore implements IBaseProjectMemberStore
|
||||
* @param projectId
|
||||
* @param userId
|
||||
*/
|
||||
removeMemberFromProject = async (workspaceSlug: string, projectId: string, userId: string) => {
|
||||
async removeMemberFromProject(workspaceSlug: string, projectId: string, userId: string) {
|
||||
const memberDetails = this.getProjectMemberDetails(userId, projectId);
|
||||
if (!memberDetails || !memberDetails?.id) throw new Error("Member not found");
|
||||
await this.projectMemberService.deleteProjectMember(workspaceSlug, projectId, memberDetails?.id);
|
||||
runInAction(() => {
|
||||
this.processMemberRemoval(projectId, userId);
|
||||
});
|
||||
void this.mutateProjectMembersActivity(workspaceSlug, projectId);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @description get project member preferences
|
||||
@@ -503,11 +502,4 @@ export abstract class BaseProjectMemberStore implements IBaseProjectMemberStore
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Mutate project members activity
|
||||
* @param workspaceSlug
|
||||
* @param projectId
|
||||
*/
|
||||
abstract mutateProjectMembersActivity(workspaceSlug: string, projectId: string): Promise<void>;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ export interface IWorkspaceMembership {
|
||||
is_active?: boolean;
|
||||
}
|
||||
|
||||
export interface IWorkspaceMemberStore {
|
||||
export interface IBaseWorkspaceMemberStore {
|
||||
// observables
|
||||
workspaceMemberMap: Record<string, Record<string, IWorkspaceMembership>>;
|
||||
workspaceMemberInvitations: Record<string, IWorkspaceMemberInvitation[]>;
|
||||
@@ -57,7 +57,7 @@ export interface IWorkspaceMemberStore {
|
||||
isUserSuspended: (userId: string, workspaceSlug: string) => boolean;
|
||||
}
|
||||
|
||||
export class WorkspaceMemberStore implements IWorkspaceMemberStore {
|
||||
export abstract class BaseWorkspaceMemberStore implements IBaseWorkspaceMemberStore {
|
||||
// observables
|
||||
workspaceMemberMap: {
|
||||
[workspaceSlug: string]: Record<string, IWorkspaceMembership>;
|
||||
@@ -251,7 +251,7 @@ export class WorkspaceMemberStore implements IWorkspaceMemberStore {
|
||||
* @param userId
|
||||
* @param data
|
||||
*/
|
||||
updateMember = async (workspaceSlug: string, userId: string, data: { role: EUserPermissions }) => {
|
||||
async updateMember(workspaceSlug: string, userId: string, data: { role: EUserPermissions }) {
|
||||
const memberDetails = this.getWorkspaceMemberDetails(userId);
|
||||
if (!memberDetails) throw new Error("Member not found");
|
||||
// original data to revert back in case of error
|
||||
@@ -261,7 +261,6 @@ export class WorkspaceMemberStore implements IWorkspaceMemberStore {
|
||||
set(this.workspaceMemberMap, [workspaceSlug, userId, "role"], data.role);
|
||||
});
|
||||
await this.workspaceService.updateWorkspaceMember(workspaceSlug, memberDetails.id, data);
|
||||
void this.rootStore.workspaceRoot.mutateWorkspaceMembersActivity(workspaceSlug);
|
||||
} catch (error) {
|
||||
// revert back to original members in case of error
|
||||
runInAction(() => {
|
||||
@@ -269,22 +268,21 @@ export class WorkspaceMemberStore implements IWorkspaceMemberStore {
|
||||
});
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @description remove a member from workspace
|
||||
* @param workspaceSlug
|
||||
* @param userId
|
||||
*/
|
||||
removeMemberFromWorkspace = async (workspaceSlug: string, userId: string) => {
|
||||
async removeMemberFromWorkspace(workspaceSlug: string, userId: string) {
|
||||
const memberDetails = this.getWorkspaceMemberDetails(userId);
|
||||
if (!memberDetails) throw new Error("Member not found");
|
||||
await this.workspaceService.deleteWorkspaceMember(workspaceSlug, memberDetails?.id);
|
||||
runInAction(() => {
|
||||
set(this.workspaceMemberMap, [workspaceSlug, userId, "is_active"], false);
|
||||
});
|
||||
void this.rootStore.workspaceRoot.mutateWorkspaceMembersActivity(workspaceSlug);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @description fetch all the member invitations of a workspace
|
||||
@@ -303,11 +301,10 @@ export class WorkspaceMemberStore implements IWorkspaceMemberStore {
|
||||
* @param workspaceSlug
|
||||
* @param data
|
||||
*/
|
||||
inviteMembersToWorkspace = async (workspaceSlug: string, data: IWorkspaceBulkInviteFormData) => {
|
||||
async inviteMembersToWorkspace(workspaceSlug: string, data: IWorkspaceBulkInviteFormData) {
|
||||
await this.workspaceService.inviteWorkspace(workspaceSlug, data);
|
||||
await this.fetchWorkspaceMemberInvitations(workspaceSlug);
|
||||
void this.rootStore.workspaceRoot.mutateWorkspaceMembersActivity(workspaceSlug);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @description update the role of a member invitation
|
||||
@@ -345,15 +342,14 @@ export class WorkspaceMemberStore implements IWorkspaceMemberStore {
|
||||
* @param workspaceSlug
|
||||
* @param memberId
|
||||
*/
|
||||
deleteMemberInvitation = async (workspaceSlug: string, invitationId: string) => {
|
||||
async deleteMemberInvitation(workspaceSlug: string, invitationId: string) {
|
||||
await this.workspaceService.deleteWorkspaceInvitations(workspaceSlug.toString(), invitationId);
|
||||
runInAction(() => {
|
||||
this.workspaceMemberInvitations[workspaceSlug] = this.workspaceMemberInvitations[workspaceSlug].filter(
|
||||
(inv) => inv.id !== invitationId
|
||||
);
|
||||
});
|
||||
void this.rootStore.workspaceRoot.mutateWorkspaceMembersActivity(workspaceSlug);
|
||||
};
|
||||
}
|
||||
|
||||
isUserSuspended = computedFn((userId: string, workspaceSlug: string) => {
|
||||
if (!workspaceSlug) return false;
|
||||
|
||||
@@ -13,7 +13,6 @@ import type { IPowerKStore } from "@/plane-web/store/power-k.store";
|
||||
import type { RootStore } from "@/plane-web/store/root.store";
|
||||
import type { IStateStore } from "@/plane-web/store/state.store";
|
||||
import { StateStore } from "@/plane-web/store/state.store";
|
||||
import { WorkspaceRootStore } from "@/plane-web/store/workspace";
|
||||
// stores
|
||||
import type { ICycleStore } from "./cycle.store";
|
||||
import { CycleStore } from "./cycle.store";
|
||||
@@ -62,6 +61,7 @@ import { ThemeStore } from "./theme.store";
|
||||
import type { IUserStore } from "./user";
|
||||
import { UserStore } from "./user";
|
||||
import type { IWorkspaceRootStore } from "./workspace";
|
||||
import { WorkspaceRootStore } from "./workspace";
|
||||
|
||||
enableStaticRendering(typeof window === "undefined");
|
||||
|
||||
|
||||
@@ -57,14 +57,13 @@ export interface IWorkspaceRootStore {
|
||||
workspaceSlug: string,
|
||||
data: Partial<IWorkspaceUserPropertiesResponse>
|
||||
) => Promise<void>;
|
||||
mutateWorkspaceMembersActivity: (workspaceSlug: string) => Promise<void>;
|
||||
// sub-stores
|
||||
webhook: IWebhookStore;
|
||||
apiToken: IApiTokenStore;
|
||||
home: IHomeStore;
|
||||
}
|
||||
|
||||
export abstract class BaseWorkspaceRootStore implements IWorkspaceRootStore {
|
||||
export class WorkspaceRootStore implements IWorkspaceRootStore {
|
||||
loader: boolean = false;
|
||||
// observables
|
||||
workspaces: Record<string, IWorkspace> = {};
|
||||
@@ -375,10 +374,4 @@ export abstract class BaseWorkspaceRootStore implements IWorkspaceRootStore {
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Mutate workspace members activity
|
||||
* @param workspaceSlug
|
||||
*/
|
||||
abstract mutateWorkspaceMembersActivity(workspaceSlug: string): Promise<void>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user