mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
chore: create new store context and update hooks
This commit is contained in:
parent
d14dc13542
commit
cc56140912
19
web/contexts/store-context.tsx
Normal file
19
web/contexts/store-context.tsx
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import { createContext } from "react";
|
||||||
|
// mobx store
|
||||||
|
import { RootStore } from "store/root.store";
|
||||||
|
|
||||||
|
let rootStore: RootStore = new RootStore();
|
||||||
|
|
||||||
|
export const StoreContext = createContext<RootStore>(rootStore);
|
||||||
|
|
||||||
|
const initializeStore = () => {
|
||||||
|
const _rootStore: RootStore = rootStore ?? new RootStore();
|
||||||
|
if (typeof window === "undefined") return _rootStore;
|
||||||
|
if (!rootStore) rootStore = _rootStore;
|
||||||
|
return _rootStore;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const StoreProvider = ({ children }: any) => {
|
||||||
|
const store = initializeStore();
|
||||||
|
return <StoreContext.Provider value={store}>{children}</StoreContext.Provider>;
|
||||||
|
};
|
@ -1,11 +1,11 @@
|
|||||||
import { useContext } from "react";
|
import { useContext } from "react";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { MobxStoreContext } from "lib/mobx/store-provider";
|
import { StoreContext } from "contexts/store-context";
|
||||||
// types
|
// types
|
||||||
import { IAppRootStore } from "store/application";
|
import { IAppRootStore } from "store/application";
|
||||||
|
|
||||||
export const useApplication = (): IAppRootStore => {
|
export const useApplication = (): IAppRootStore => {
|
||||||
const context = useContext(MobxStoreContext);
|
const context = useContext(StoreContext);
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
if (context === undefined) throw new Error("useApplication must be used within StoreProvider");
|
||||||
return context.app;
|
return context.app;
|
||||||
};
|
};
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { useContext } from "react";
|
import { useContext } from "react";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { MobxStoreContext } from "lib/mobx/store-provider";
|
import { StoreContext } from "contexts/store-context";
|
||||||
// types
|
// types
|
||||||
import { ICycleStore } from "store/cycle.store";
|
import { ICycleStore } from "store/cycle.store";
|
||||||
|
|
||||||
export const useCycle = (): ICycleStore => {
|
export const useCycle = (): ICycleStore => {
|
||||||
const context = useContext(MobxStoreContext);
|
const context = useContext(StoreContext);
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
if (context === undefined) throw new Error("useCycle must be used within StoreProvider");
|
||||||
return context.cycle;
|
return context.cycle;
|
||||||
};
|
};
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { useContext } from "react";
|
import { useContext } from "react";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { MobxStoreContext } from "lib/mobx/store-provider";
|
import { StoreContext } from "contexts/store-context";
|
||||||
// types
|
// types
|
||||||
import { EIssuesStoreType } from "constants/issue";
|
import { EIssuesStoreType } from "constants/issue";
|
||||||
|
|
||||||
export const useIssues = (storeType?: EIssuesStoreType) => {
|
export const useIssues = (storeType?: EIssuesStoreType) => {
|
||||||
const context = useContext(MobxStoreContext);
|
const context = useContext(StoreContext);
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
if (context === undefined) throw new Error("useIssues must be used within StoreProvider");
|
||||||
switch (storeType) {
|
switch (storeType) {
|
||||||
case EIssuesStoreType.PROJECT:
|
case EIssuesStoreType.PROJECT:
|
||||||
return {
|
return {
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { useContext } from "react";
|
import { useContext } from "react";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { MobxStoreContext } from "lib/mobx/store-provider";
|
import { StoreContext } from "contexts/store-context";
|
||||||
// types
|
// types
|
||||||
import { ILabelRootStore } from "store/label";
|
import { ILabelRootStore } from "store/label";
|
||||||
|
|
||||||
export const useLabel = (): ILabelRootStore => {
|
export const useLabel = (): ILabelRootStore => {
|
||||||
const context = useContext(MobxStoreContext);
|
const context = useContext(StoreContext);
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
if (context === undefined) throw new Error("useLabel must be used within StoreProvider");
|
||||||
return context.labelRoot;
|
return context.labelRoot;
|
||||||
};
|
};
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { useContext } from "react";
|
import { useContext } from "react";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { MobxStoreContext } from "lib/mobx/store-provider";
|
import { StoreContext } from "contexts/store-context";
|
||||||
// types;
|
// types;
|
||||||
import { IMemberRootStore } from "store/member";
|
import { IMemberRootStore } from "store/member";
|
||||||
|
|
||||||
export const useMember = (): IMemberRootStore => {
|
export const useMember = (): IMemberRootStore => {
|
||||||
const context = useContext(MobxStoreContext);
|
const context = useContext(StoreContext);
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
if (context === undefined) throw new Error("useMember must be used within StoreProvider");
|
||||||
return context.memberRoot;
|
return context.memberRoot;
|
||||||
};
|
};
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { useContext } from "react";
|
import { useContext } from "react";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { MobxStoreContext } from "lib/mobx/store-provider";
|
import { StoreContext } from "contexts/store-context";
|
||||||
// types
|
// types
|
||||||
import { IModuleStore } from "store/module.store";
|
import { IModuleStore } from "store/module.store";
|
||||||
|
|
||||||
export const useModule = (): IModuleStore => {
|
export const useModule = (): IModuleStore => {
|
||||||
const context = useContext(MobxStoreContext);
|
const context = useContext(StoreContext);
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
if (context === undefined) throw new Error("useModule must be used within StoreProvider");
|
||||||
return context.module;
|
return context.module;
|
||||||
};
|
};
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { useContext } from "react";
|
import { useContext } from "react";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { MobxStoreContext } from "lib/mobx/store-provider";
|
import { StoreContext } from "contexts/store-context";
|
||||||
// types
|
// types
|
||||||
import { IPageStore } from "store/page.store";
|
import { IPageStore } from "store/page.store";
|
||||||
|
|
||||||
export const usePage = (): IPageStore => {
|
export const usePage = (): IPageStore => {
|
||||||
const context = useContext(MobxStoreContext);
|
const context = useContext(StoreContext);
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
if (context === undefined) throw new Error("usePage must be used within StoreProvider");
|
||||||
return context.page;
|
return context.page;
|
||||||
};
|
};
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { useContext } from "react";
|
import { useContext } from "react";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { MobxStoreContext } from "lib/mobx/store-provider";
|
import { StoreContext } from "contexts/store-context";
|
||||||
// types
|
// types
|
||||||
import { IProjectPublishStore } from "store/project/project-publish.store";
|
import { IProjectPublishStore } from "store/project/project-publish.store";
|
||||||
|
|
||||||
export const useProjectPublish = (): IProjectPublishStore => {
|
export const useProjectPublish = (): IProjectPublishStore => {
|
||||||
const context = useContext(MobxStoreContext);
|
const context = useContext(StoreContext);
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
if (context === undefined) throw new Error("useProjectPublish must be used within StoreProvider");
|
||||||
return context.projectRoot.publish;
|
return context.projectRoot.publish;
|
||||||
};
|
};
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { useContext } from "react";
|
import { useContext } from "react";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { MobxStoreContext } from "lib/mobx/store-provider";
|
import { StoreContext } from "contexts/store-context";
|
||||||
// types
|
// types
|
||||||
import { IStateStore } from "store/state.store";
|
import { IStateStore } from "store/state.store";
|
||||||
|
|
||||||
export const useProjectState = (): IStateStore => {
|
export const useProjectState = (): IStateStore => {
|
||||||
const context = useContext(MobxStoreContext);
|
const context = useContext(StoreContext);
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
if (context === undefined) throw new Error("useProjectState must be used within StoreProvider");
|
||||||
return context.state;
|
return context.state;
|
||||||
};
|
};
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { useContext } from "react";
|
import { useContext } from "react";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { MobxStoreContext } from "lib/mobx/store-provider";
|
import { StoreContext } from "contexts/store-context";
|
||||||
// types
|
// types
|
||||||
import { IProjectViewStore } from "store/project-view.store";
|
import { IProjectViewStore } from "store/project-view.store";
|
||||||
|
|
||||||
export const useProjectView = (): IProjectViewStore => {
|
export const useProjectView = (): IProjectViewStore => {
|
||||||
const context = useContext(MobxStoreContext);
|
const context = useContext(StoreContext);
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
if (context === undefined) throw new Error("useProjectView must be used within StoreProvider");
|
||||||
return context.projectView;
|
return context.projectView;
|
||||||
};
|
};
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { useContext } from "react";
|
import { useContext } from "react";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { MobxStoreContext } from "lib/mobx/store-provider";
|
import { StoreContext } from "contexts/store-context";
|
||||||
// types
|
// types
|
||||||
import { IProjectStore } from "store/project/project.store";
|
import { IProjectStore } from "store/project/project.store";
|
||||||
|
|
||||||
export const useProject = (): IProjectStore => {
|
export const useProject = (): IProjectStore => {
|
||||||
const context = useContext(MobxStoreContext);
|
const context = useContext(StoreContext);
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
if (context === undefined) throw new Error("useProject must be used within StoreProvider");
|
||||||
return context.projectRoot.project;
|
return context.projectRoot.project;
|
||||||
};
|
};
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { useContext } from "react";
|
import { useContext } from "react";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { MobxStoreContext } from "lib/mobx/store-provider";
|
import { StoreContext } from "contexts/store-context";
|
||||||
// types
|
// types
|
||||||
import { IUserStore } from "store/user";
|
import { IUserStore } from "store/user";
|
||||||
|
|
||||||
export const useUser = (): IUserStore => {
|
export const useUser = (): IUserStore => {
|
||||||
const context = useContext(MobxStoreContext);
|
const context = useContext(StoreContext);
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
if (context === undefined) throw new Error("useUser must be used within StoreProvider");
|
||||||
return context.user;
|
return context.user;
|
||||||
};
|
};
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { useContext } from "react";
|
import { useContext } from "react";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { MobxStoreContext } from "lib/mobx/store-provider";
|
import { StoreContext } from "contexts/store-context";
|
||||||
// types
|
// types
|
||||||
import { IWebhookStore } from "store/workspace/webhook.store";
|
import { IWebhookStore } from "store/workspace/webhook.store";
|
||||||
|
|
||||||
export const useWebhook = (): IWebhookStore => {
|
export const useWebhook = (): IWebhookStore => {
|
||||||
const context = useContext(MobxStoreContext);
|
const context = useContext(StoreContext);
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
if (context === undefined) throw new Error("useWebhook must be used within StoreProvider");
|
||||||
return context.workspaceRoot.webhook;
|
return context.workspaceRoot.webhook;
|
||||||
};
|
};
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { useContext } from "react";
|
import { useContext } from "react";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { MobxStoreContext } from "lib/mobx/store-provider";
|
import { StoreContext } from "contexts/store-context";
|
||||||
// types
|
// types
|
||||||
import { IWorkspaceRootStore } from "store/workspace";
|
import { IWorkspaceRootStore } from "store/workspace";
|
||||||
|
|
||||||
export const useWorkspace = (): IWorkspaceRootStore => {
|
export const useWorkspace = (): IWorkspaceRootStore => {
|
||||||
const context = useContext(MobxStoreContext);
|
const context = useContext(StoreContext);
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
if (context === undefined) throw new Error("useWorkspace must be used within StoreProvider");
|
||||||
return context.workspaceRoot;
|
return context.workspaceRoot;
|
||||||
};
|
};
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
import { createContext, useContext } from "react";
|
|
||||||
import { RootStore } from "store/root.store";
|
|
||||||
// mobx store
|
|
||||||
|
|
||||||
let rootStore: RootStore = new RootStore();
|
|
||||||
|
|
||||||
export const MobxStoreContext = createContext<RootStore>(rootStore);
|
|
||||||
|
|
||||||
const initializeStore = () => {
|
|
||||||
const _rootStore: RootStore = rootStore ?? new RootStore();
|
|
||||||
if (typeof window === "undefined") return _rootStore;
|
|
||||||
if (!rootStore) rootStore = _rootStore;
|
|
||||||
return _rootStore;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const MobxStoreProvider = ({ children }: any) => {
|
|
||||||
const store: RootStore = initializeStore();
|
|
||||||
return <MobxStoreContext.Provider value={store}>{children}</MobxStoreContext.Provider>;
|
|
||||||
};
|
|
||||||
|
|
||||||
// hook
|
|
||||||
export const useMobxStore = () => {
|
|
||||||
const context = useContext(MobxStoreContext);
|
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
|
||||||
return context;
|
|
||||||
};
|
|
@ -1,28 +0,0 @@
|
|||||||
"use client";
|
|
||||||
|
|
||||||
import { createContext, useContext } from "react";
|
|
||||||
// mobx store
|
|
||||||
import { RootStore } from "store_legacy/root";
|
|
||||||
|
|
||||||
let rootStore: RootStore = new RootStore();
|
|
||||||
|
|
||||||
export const MobxStoreContext = createContext<RootStore>(rootStore);
|
|
||||||
|
|
||||||
const initializeStore = () => {
|
|
||||||
const _rootStore: RootStore = rootStore ?? new RootStore();
|
|
||||||
if (typeof window === "undefined") return _rootStore;
|
|
||||||
if (!rootStore) rootStore = _rootStore;
|
|
||||||
return _rootStore;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const MobxStoreProvider = ({ children }: any) => {
|
|
||||||
const store: RootStore = initializeStore();
|
|
||||||
return <MobxStoreContext.Provider value={store}>{children}</MobxStoreContext.Provider>;
|
|
||||||
};
|
|
||||||
|
|
||||||
// hook
|
|
||||||
export const useMobxStore = () => {
|
|
||||||
const context = useContext(MobxStoreContext);
|
|
||||||
if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider");
|
|
||||||
return context;
|
|
||||||
};
|
|
@ -11,7 +11,7 @@ import "styles/react-datepicker.css";
|
|||||||
// constants
|
// constants
|
||||||
import { SITE_TITLE } from "constants/seo-variables";
|
import { SITE_TITLE } from "constants/seo-variables";
|
||||||
// mobx store provider
|
// mobx store provider
|
||||||
import { MobxStoreProvider } from "lib/mobx/store-provider";
|
import { StoreProvider } from "contexts/store-context";
|
||||||
import { MobxIssueStoreProvider } from "lib/mobx/store-issues-provider";
|
import { MobxIssueStoreProvider } from "lib/mobx/store-issues-provider";
|
||||||
|
|
||||||
import { AppProvider } from "lib/app-provider";
|
import { AppProvider } from "lib/app-provider";
|
||||||
@ -31,11 +31,11 @@ function MyApp({ Component, pageProps }: AppPropsWithLayout) {
|
|||||||
<Head>
|
<Head>
|
||||||
<title>{SITE_TITLE}</title>
|
<title>{SITE_TITLE}</title>
|
||||||
</Head>
|
</Head>
|
||||||
<MobxStoreProvider {...pageProps}>
|
<StoreProvider {...pageProps}>
|
||||||
<MobxIssueStoreProvider {...pageProps}>
|
<MobxIssueStoreProvider {...pageProps}>
|
||||||
<AppProvider>{getLayout(<Component {...pageProps} />)}</AppProvider>
|
<AppProvider>{getLayout(<Component {...pageProps} />)}</AppProvider>
|
||||||
</MobxIssueStoreProvider>
|
</MobxIssueStoreProvider>
|
||||||
</MobxStoreProvider>
|
</StoreProvider>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user