import isEmpty from "lodash/isEmpty"; import { autorun, makeObservable, observable } from "mobx"; // root store import { ICycle, IIssueLabel, IModule, IProject, IState, IUserLite } from "@plane/types"; import { IWorkspaceMembership } from "@/store/member/workspace-member.store"; import { RootStore } from "../root.store"; import { IStateStore, StateStore } from "../state.store"; // issues data store import { IArchivedIssuesFilter, ArchivedIssuesFilter, IArchivedIssues, ArchivedIssues } from "./archived"; import { ICycleIssuesFilter, CycleIssuesFilter, ICycleIssues, CycleIssues } from "./cycle"; import { IDraftIssuesFilter, DraftIssuesFilter, IDraftIssues, DraftIssues } from "./draft"; import { IIssueDetail, IssueDetail } from "./issue-details/root.store"; import { IIssueStore, IssueStore } from "./issue.store"; import { ICalendarStore, CalendarStore } from "./issue_calendar_view.store"; import { IIssueKanBanViewStore, IssueKanBanViewStore } from "./issue_kanban_view.store"; import { IModuleIssuesFilter, ModuleIssuesFilter, IModuleIssues, ModuleIssues } from "./module"; import { IProfileIssuesFilter, ProfileIssuesFilter, IProfileIssues, ProfileIssues } from "./profile"; import { IProjectIssuesFilter, ProjectIssuesFilter, IProjectIssues, ProjectIssues } from "./project"; import { IProjectViewIssuesFilter, ProjectViewIssuesFilter, IProjectViewIssues, ProjectViewIssues, } from "./project-views"; import { IWorkspaceIssuesFilter, WorkspaceIssuesFilter, IWorkspaceIssues, WorkspaceIssues } from "./workspace"; export interface IIssueRootStore { currentUserId: string | undefined; workspaceSlug: string | undefined; projectId: string | undefined; cycleId: string | undefined; moduleId: string | undefined; viewId: string | undefined; globalViewId: string | undefined; // all issues view id userId: string | undefined; // user profile detail Id stateMap: Record | undefined; stateDetails: IState[] | undefined; workspaceStateDetails: IState[] | undefined; labelMap: Record | undefined; workSpaceMemberRolesMap: Record | undefined; memberMap: Record | undefined; projectMap: Record | undefined; moduleMap: Record | undefined; cycleMap: Record | undefined; rootStore: RootStore; issues: IIssueStore; state: IStateStore; issueDetail: IIssueDetail; workspaceIssuesFilter: IWorkspaceIssuesFilter; workspaceIssues: IWorkspaceIssues; profileIssuesFilter: IProfileIssuesFilter; profileIssues: IProfileIssues; projectIssuesFilter: IProjectIssuesFilter; projectIssues: IProjectIssues; cycleIssuesFilter: ICycleIssuesFilter; cycleIssues: ICycleIssues; moduleIssuesFilter: IModuleIssuesFilter; moduleIssues: IModuleIssues; projectViewIssuesFilter: IProjectViewIssuesFilter; projectViewIssues: IProjectViewIssues; archivedIssuesFilter: IArchivedIssuesFilter; archivedIssues: IArchivedIssues; draftIssuesFilter: IDraftIssuesFilter; draftIssues: IDraftIssues; issueKanBanView: IIssueKanBanViewStore; issueCalendarView: ICalendarStore; } export class IssueRootStore implements IIssueRootStore { currentUserId: string | undefined = undefined; workspaceSlug: string | undefined = undefined; projectId: string | undefined = undefined; cycleId: string | undefined = undefined; moduleId: string | undefined = undefined; viewId: string | undefined = undefined; globalViewId: string | undefined = undefined; userId: string | undefined = undefined; stateMap: Record | undefined = undefined; stateDetails: IState[] | undefined = undefined; workspaceStateDetails: IState[] | undefined = undefined; labelMap: Record | undefined = undefined; workSpaceMemberRolesMap: Record | undefined = undefined; memberMap: Record | undefined = undefined; projectMap: Record | undefined = undefined; moduleMap: Record | undefined = undefined; cycleMap: Record | undefined = undefined; rootStore: RootStore; issues: IIssueStore; state: IStateStore; issueDetail: IIssueDetail; workspaceIssuesFilter: IWorkspaceIssuesFilter; workspaceIssues: IWorkspaceIssues; profileIssuesFilter: IProfileIssuesFilter; profileIssues: IProfileIssues; projectIssuesFilter: IProjectIssuesFilter; projectIssues: IProjectIssues; cycleIssuesFilter: ICycleIssuesFilter; cycleIssues: ICycleIssues; moduleIssuesFilter: IModuleIssuesFilter; moduleIssues: IModuleIssues; projectViewIssuesFilter: IProjectViewIssuesFilter; projectViewIssues: IProjectViewIssues; archivedIssuesFilter: IArchivedIssuesFilter; archivedIssues: IArchivedIssues; draftIssuesFilter: IDraftIssuesFilter; draftIssues: IDraftIssues; issueKanBanView: IIssueKanBanViewStore; issueCalendarView: ICalendarStore; constructor(rootStore: RootStore) { makeObservable(this, { workspaceSlug: observable.ref, projectId: observable.ref, cycleId: observable.ref, moduleId: observable.ref, viewId: observable.ref, userId: observable.ref, globalViewId: observable.ref, stateMap: observable, stateDetails: observable, workspaceStateDetails: observable, labelMap: observable, memberMap: observable, workSpaceMemberRolesMap: observable, projectMap: observable, moduleMap: observable, cycleMap: observable, }); this.rootStore = rootStore; autorun(() => { if (rootStore?.user?.data?.id) this.currentUserId = rootStore?.user?.data?.id; if (rootStore.router.workspaceSlug) this.workspaceSlug = rootStore.router.workspaceSlug; if (rootStore.router.projectId) this.projectId = rootStore.router.projectId; if (rootStore.router.cycleId) this.cycleId = rootStore.router.cycleId; if (rootStore.router.moduleId) this.moduleId = rootStore.router.moduleId; if (rootStore.router.viewId) this.viewId = rootStore.router.viewId; if (rootStore.router.globalViewId) this.globalViewId = rootStore.router.globalViewId; if (rootStore.router.userId) this.userId = rootStore.router.userId; if (!isEmpty(rootStore?.state?.stateMap)) this.stateMap = rootStore?.state?.stateMap; if (!isEmpty(rootStore?.state?.projectStates)) this.stateDetails = rootStore?.state?.projectStates; if (!isEmpty(rootStore?.state?.workspaceStates)) this.workspaceStateDetails = rootStore?.state?.workspaceStates; if (!isEmpty(rootStore?.label?.labelMap)) this.labelMap = rootStore?.label?.labelMap; if (!isEmpty(rootStore?.memberRoot?.workspace?.workspaceMemberMap)) this.workSpaceMemberRolesMap = rootStore?.memberRoot?.workspace?.memberMap || undefined; if (!isEmpty(rootStore?.memberRoot?.memberMap)) this.memberMap = rootStore?.memberRoot?.memberMap || undefined; if (!isEmpty(rootStore?.projectRoot?.project?.projectMap)) this.projectMap = rootStore?.projectRoot?.project?.projectMap; if (!isEmpty(rootStore?.module?.moduleMap)) this.moduleMap = rootStore?.module?.moduleMap; if (!isEmpty(rootStore?.cycle?.cycleMap)) this.cycleMap = rootStore?.cycle?.cycleMap; }); this.issues = new IssueStore(); this.state = new StateStore(rootStore); this.issueDetail = new IssueDetail(this); this.workspaceIssuesFilter = new WorkspaceIssuesFilter(this); this.workspaceIssues = new WorkspaceIssues(this); this.profileIssuesFilter = new ProfileIssuesFilter(this); this.profileIssues = new ProfileIssues(this); this.projectIssuesFilter = new ProjectIssuesFilter(this); this.projectIssues = new ProjectIssues(this); this.cycleIssuesFilter = new CycleIssuesFilter(this); this.cycleIssues = new CycleIssues(this); this.moduleIssuesFilter = new ModuleIssuesFilter(this); this.moduleIssues = new ModuleIssues(this); this.projectViewIssuesFilter = new ProjectViewIssuesFilter(this); this.projectViewIssues = new ProjectViewIssues(this); this.archivedIssuesFilter = new ArchivedIssuesFilter(this); this.archivedIssues = new ArchivedIssues(this); this.draftIssuesFilter = new DraftIssuesFilter(this); this.draftIssues = new DraftIssues(this); this.issueKanBanView = new IssueKanBanViewStore(this); this.issueCalendarView = new CalendarStore(); } }