diff --git a/apps/web/ce/store/member/project-member.store.ts b/apps/web/ce/store/member/project-member.store.ts index 1be3ee1c1cd..f0e5b3069d7 100644 --- a/apps/web/ce/store/member/project-member.store.ts +++ b/apps/web/ce/store/member/project-member.store.ts @@ -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 - }; } diff --git a/apps/web/ce/store/member/workspace-member.store.ts b/apps/web/ce/store/member/workspace-member.store.ts new file mode 100644 index 00000000000..446d562fc99 --- /dev/null +++ b/apps/web/ce/store/member/workspace-member.store.ts @@ -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); + } +} diff --git a/apps/web/ce/store/workspace/index.ts b/apps/web/ce/store/workspace/index.ts deleted file mode 100644 index 086063cb4d2..00000000000 --- a/apps/web/ce/store/workspace/index.ts +++ /dev/null @@ -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 - }; -} diff --git a/apps/web/core/store/member/index.ts b/apps/web/core/store/member/index.ts index 50e51d17365..0000658533a 100644 --- a/apps/web/core/store/member/index.ts +++ b/apps/web/core/store/member/index.ts @@ -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 diff --git a/apps/web/core/store/member/project/base-project-member.store.ts b/apps/web/core/store/member/project/base-project-member.store.ts index 3252b1948fd..5ed71d1867d 100644 --- a/apps/web/core/store/member/project/base-project-member.store.ts +++ b/apps/web/core/store/member/project/base-project-member.store.ts @@ -81,7 +81,6 @@ export interface IBaseProjectMemberStore { role: EUserProjectRoles ) => Promise; removeMemberFromProject: (workspaceSlug: string, projectId: string, userId: string) => Promise; - mutateProjectMembersActivity: (workspaceSlug: string, projectId: string) => Promise; } export abstract class BaseProjectMemberStore implements IBaseProjectMemberStore { @@ -305,8 +304,8 @@ export abstract class BaseProjectMemberStore implements IBaseProjectMemberStore * @param data * @returns Promise */ - 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; } diff --git a/apps/web/core/store/member/workspace/workspace-member.store.ts b/apps/web/core/store/member/workspace/workspace-member.store.ts index 1d820d66286..ed27873f6fb 100644 --- a/apps/web/core/store/member/workspace/workspace-member.store.ts +++ b/apps/web/core/store/member/workspace/workspace-member.store.ts @@ -23,7 +23,7 @@ export interface IWorkspaceMembership { is_active?: boolean; } -export interface IWorkspaceMemberStore { +export interface IBaseWorkspaceMemberStore { // observables workspaceMemberMap: Record>; workspaceMemberInvitations: Record; @@ -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; @@ -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; diff --git a/apps/web/core/store/root.store.ts b/apps/web/core/store/root.store.ts index db08030a495..5cc37bc4fd0 100644 --- a/apps/web/core/store/root.store.ts +++ b/apps/web/core/store/root.store.ts @@ -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"); diff --git a/apps/web/core/store/workspace/index.ts b/apps/web/core/store/workspace/index.ts index 797398a1fd1..4f22e80b3a1 100644 --- a/apps/web/core/store/workspace/index.ts +++ b/apps/web/core/store/workspace/index.ts @@ -57,14 +57,13 @@ export interface IWorkspaceRootStore { workspaceSlug: string, data: Partial ) => Promise; - mutateWorkspaceMembersActivity: (workspaceSlug: string) => Promise; // 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 = {}; @@ -375,10 +374,4 @@ export abstract class BaseWorkspaceRootStore implements IWorkspaceRootStore { throw error; } }; - - /** - * Mutate workspace members activity - * @param workspaceSlug - */ - abstract mutateWorkspaceMembersActivity(workspaceSlug: string): Promise; }