Merge branch 'refactor/mobx-store' of https://github.com/makeplane/plane into refactor/mobx-store

This commit is contained in:
Aaryan Khandelwal 2023-12-12 13:36:07 +05:30
commit 004751b151
3 changed files with 72 additions and 32 deletions

View File

@ -1,21 +1,66 @@
import { action, makeObservable, observable } from "mobx"; import { action, makeObservable, observable } from "mobx";
import { ParsedUrlQuery } from "querystring";
export interface IRouterStore { export interface IRouterStore {
query: any; query: ParsedUrlQuery;
setQuery: (query: any) => void; setQuery: (query: ParsedUrlQuery) => void;
workspaceSlug: string | undefined;
projectId: string | undefined;
cycleId: string | undefined;
moduleId: string | undefined;
viewId: string | undefined;
userId: string | undefined;
peekId: string | undefined;
} }
export class RouterStore implements IRouterStore { export class RouterStore implements IRouterStore {
query = {}; query: ParsedUrlQuery = {};
constructor() { constructor() {
makeObservable(this, { makeObservable(this, {
query: observable, query: observable,
setQuery: action, setQuery: action,
//computed
workspaceSlug: action,
projectId: action,
cycleId: action,
moduleId: action,
viewId: action,
userId: action,
peekId: action,
}); });
} }
setQuery(query: any) { setQuery(query: ParsedUrlQuery) {
this.query = query; this.query = query;
} }
get workspaceSlug() {
return this.query?.workspace_slug?.toString();
}
get projectId() {
return this.query?.projectId?.toString();
}
get moduleId() {
return this.query?.moduleId?.toString();
}
get cycleId() {
return this.query?.cycleId?.toString();
}
get viewId() {
return this.query?.viewId?.toString();
}
get userId() {
return this.query?.userId?.toString();
}
get peekId() {
return this.query?.peekId?.toString();
}
} }

View File

@ -104,9 +104,9 @@ export class ProjectsStore implements IProjectsStore {
} }
get searchedProjects() { get searchedProjects() {
if (!this.rootStore.workspace.workspaceSlug) return []; if (!this.rootStore.app.router.query.workspaceSlug) return [];
const currentProjectsMap = this.projectsMap[this.rootStore.workspace.workspaceSlug]; const currentProjectsMap = this.projectsMap[this.rootStore.app.router.query.workspaceSlug.toString()];
const projectIds = Object.keys(currentProjectsMap); const projectIds = Object.keys(currentProjectsMap);
return this.searchQuery === "" return this.searchQuery === ""
? projectIds ? projectIds
@ -117,8 +117,8 @@ export class ProjectsStore implements IProjectsStore {
} }
get workspaceProjects() { get workspaceProjects() {
if (!this.rootStore.workspace.workspaceSlug) return null; if (!this.rootStore.app.router.workspaceSlug) return null;
const currentProjectsMap = this.projectsMap[this.rootStore.workspace.workspaceSlug]; const currentProjectsMap = this.projectsMap[this.rootStore.app.router.query.workspaceSlug.toString()];
const projectIds = Object.keys(currentProjectsMap); const projectIds = Object.keys(currentProjectsMap);
if (!projectIds) return null; if (!projectIds) return null;
@ -126,8 +126,8 @@ export class ProjectsStore implements IProjectsStore {
} }
get currentProjectDetails() { get currentProjectDetails() {
if (!this.projectId || !this.rootStore.workspace.workspaceSlug) return; if (!this.rootStore.app.router.query.projectId || !this.rootStore.app.router.query.workspaceSlug) return;
return this.projectsMap[this.rootStore.workspace.workspaceSlug][this.projectId]; return this.projectsMap[!this.rootStore.app.router.query.workspaceSlug][this.projectId];
} }
get joinedProjects() { get joinedProjects() {

View File

@ -1,12 +1,10 @@
// mobx // mobx
import { action, observable, runInAction, makeObservable, computed } from "mobx"; import { action, observable, runInAction, makeObservable, computed } from "mobx";
// services // services
import { ProjectMemberService, ProjectService } from "services/project"; import { ProjectMemberService } from "services/project";
import { UserService } from "services/user.service"; import { UserService } from "services/user.service";
import { WorkspaceService } from "services/workspace.service"; import { WorkspaceService } from "services/workspace.service";
import { AuthService } from "services/auth.service";
// interfaces // interfaces
import { IUser, IUserSettings } from "types/users";
import { IWorkspaceMemberMe, IProjectMember, TUserProjectRole, TUserWorkspaceRole } from "types"; import { IWorkspaceMemberMe, IProjectMember, TUserProjectRole, TUserWorkspaceRole } from "types";
import { RootStore } from "../root.store"; import { RootStore } from "../root.store";
@ -53,14 +51,12 @@ export class UserMembershipStore implements IUserMembershipStore {
hasPermissionToProject: { hasPermissionToProject: {
[projectId: string]: boolean; [projectId: string]: boolean;
} = {}; } = {};
// root store // stores
rootStore; router;
// services // services
userService; userService;
workspaceService; workspaceService;
projectService;
projectMemberService; projectMemberService;
authService;
constructor(_rootStore: RootStore) { constructor(_rootStore: RootStore) {
makeObservable(this, { makeObservable(this, {
@ -83,42 +79,41 @@ export class UserMembershipStore implements IUserMembershipStore {
hasPermissionToCurrentWorkspace: computed, hasPermissionToCurrentWorkspace: computed,
hasPermissionToCurrentProject: computed, hasPermissionToCurrentProject: computed,
}); });
this.rootStore = _rootStore; this.router = _rootStore.app.router;
// services
this.userService = new UserService(); this.userService = new UserService();
this.workspaceService = new WorkspaceService(); this.workspaceService = new WorkspaceService();
this.projectService = new ProjectService();
this.projectMemberService = new ProjectMemberService(); this.projectMemberService = new ProjectMemberService();
this.authService = new AuthService();
} }
get currentWorkspaceMemberInfo() { get currentWorkspaceMemberInfo() {
if (!this.rootStore.workspace.workspaceSlug) return; if (!this.router.query?.workspaceSlug) return;
return this.workspaceMemberInfo[this.rootStore.workspace.workspaceSlug]; return this.workspaceMemberInfo[this.router.query?.workspaceSlug];
} }
get currentWorkspaceRole() { get currentWorkspaceRole() {
if (!this.rootStore.workspace.workspaceSlug) return; if (!this.router.query?.workspaceSlug) return;
return this.workspaceMemberInfo[this.rootStore.workspace.workspaceSlug]?.role; return this.workspaceMemberInfo[this.router.query?.workspaceSlug]?.role;
} }
get currentProjectMemberInfo() { get currentProjectMemberInfo() {
if (!this.rootStore.project.projectId) return; if (!this.router.query?.projectId) return;
return this.projectMemberInfo[this.rootStore.project.projectId]; return this.projectMemberInfo[this.router.query?.projectId];
} }
get currentProjectRole() { get currentProjectRole() {
if (!this.rootStore.project.projectId) return; if (!this.router.query?.projectId) return;
return this.projectMemberInfo[this.rootStore.project.projectId]?.role; return this.projectMemberInfo[this.router.query?.projectId]?.role;
} }
get hasPermissionToCurrentWorkspace() { get hasPermissionToCurrentWorkspace() {
if (!this.rootStore.workspace.workspaceSlug) return; if (!this.router.query?.workspaceSlug) return;
return this.hasPermissionToWorkspace[this.rootStore.workspace.workspaceSlug]; return this.hasPermissionToWorkspace[this.router.query?.workspaceSlug];
} }
get hasPermissionToCurrentProject() { get hasPermissionToCurrentProject() {
if (!this.rootStore.project.projectId) return; if (!this.router.query?.projectId) return;
return this.hasPermissionToProject[this.rootStore.project.projectId]; return this.hasPermissionToProject[this.router.query?.projectId];
} }
fetchUserWorkspaceInfo = async (workspaceSlug: string) => { fetchUserWorkspaceInfo = async (workspaceSlug: string) => {