diff --git a/web/contexts/store-context.tsx b/web/contexts/store-context.tsx new file mode 100644 index 000000000..1b65e1203 --- /dev/null +++ b/web/contexts/store-context.tsx @@ -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); + +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 {children}; +}; diff --git a/web/hooks/store/use-application.ts b/web/hooks/store/use-application.ts index 2c49b3d8b..dad1f081f 100644 --- a/web/hooks/store/use-application.ts +++ b/web/hooks/store/use-application.ts @@ -1,11 +1,11 @@ import { useContext } from "react"; // mobx store -import { MobxStoreContext } from "lib/mobx/store-provider"; +import { StoreContext } from "contexts/store-context"; // types import { IAppRootStore } from "store/application"; export const useApplication = (): IAppRootStore => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); + const context = useContext(StoreContext); + if (context === undefined) throw new Error("useApplication must be used within StoreProvider"); return context.app; }; diff --git a/web/hooks/store/use-cycle.ts b/web/hooks/store/use-cycle.ts index a7eb69174..01c8e3f24 100644 --- a/web/hooks/store/use-cycle.ts +++ b/web/hooks/store/use-cycle.ts @@ -1,11 +1,11 @@ import { useContext } from "react"; // mobx store -import { MobxStoreContext } from "lib/mobx/store-provider"; +import { StoreContext } from "contexts/store-context"; // types import { ICycleStore } from "store/cycle.store"; export const useCycle = (): ICycleStore => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); + const context = useContext(StoreContext); + if (context === undefined) throw new Error("useCycle must be used within StoreProvider"); return context.cycle; }; diff --git a/web/hooks/store/use-issues.ts b/web/hooks/store/use-issues.ts index 381685a2c..cad786b45 100644 --- a/web/hooks/store/use-issues.ts +++ b/web/hooks/store/use-issues.ts @@ -1,12 +1,12 @@ import { useContext } from "react"; // mobx store -import { MobxStoreContext } from "lib/mobx/store-provider"; +import { StoreContext } from "contexts/store-context"; // types import { EIssuesStoreType } from "constants/issue"; export const useIssues = (storeType?: EIssuesStoreType) => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); + const context = useContext(StoreContext); + if (context === undefined) throw new Error("useIssues must be used within StoreProvider"); switch (storeType) { case EIssuesStoreType.PROJECT: return { diff --git a/web/hooks/store/use-label.ts b/web/hooks/store/use-label.ts index 8069a78e7..d522f8956 100644 --- a/web/hooks/store/use-label.ts +++ b/web/hooks/store/use-label.ts @@ -1,11 +1,11 @@ import { useContext } from "react"; // mobx store -import { MobxStoreContext } from "lib/mobx/store-provider"; +import { StoreContext } from "contexts/store-context"; // types import { ILabelRootStore } from "store/label"; export const useLabel = (): ILabelRootStore => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); + const context = useContext(StoreContext); + if (context === undefined) throw new Error("useLabel must be used within StoreProvider"); return context.labelRoot; }; diff --git a/web/hooks/store/use-member.ts b/web/hooks/store/use-member.ts index fe084d32d..09c06d12b 100644 --- a/web/hooks/store/use-member.ts +++ b/web/hooks/store/use-member.ts @@ -1,11 +1,11 @@ import { useContext } from "react"; // mobx store -import { MobxStoreContext } from "lib/mobx/store-provider"; +import { StoreContext } from "contexts/store-context"; // types; import { IMemberRootStore } from "store/member"; export const useMember = (): IMemberRootStore => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); + const context = useContext(StoreContext); + if (context === undefined) throw new Error("useMember must be used within StoreProvider"); return context.memberRoot; }; diff --git a/web/hooks/store/use-module.ts b/web/hooks/store/use-module.ts index 2c55e9375..b645e610b 100644 --- a/web/hooks/store/use-module.ts +++ b/web/hooks/store/use-module.ts @@ -1,11 +1,11 @@ import { useContext } from "react"; // mobx store -import { MobxStoreContext } from "lib/mobx/store-provider"; +import { StoreContext } from "contexts/store-context"; // types import { IModuleStore } from "store/module.store"; export const useModule = (): IModuleStore => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); + const context = useContext(StoreContext); + if (context === undefined) throw new Error("useModule must be used within StoreProvider"); return context.module; }; diff --git a/web/hooks/store/use-page.ts b/web/hooks/store/use-page.ts index 90d262114..8cd13dcdc 100644 --- a/web/hooks/store/use-page.ts +++ b/web/hooks/store/use-page.ts @@ -1,11 +1,11 @@ import { useContext } from "react"; // mobx store -import { MobxStoreContext } from "lib/mobx/store-provider"; +import { StoreContext } from "contexts/store-context"; // types import { IPageStore } from "store/page.store"; export const usePage = (): IPageStore => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); + const context = useContext(StoreContext); + if (context === undefined) throw new Error("usePage must be used within StoreProvider"); return context.page; }; diff --git a/web/hooks/store/use-project-publish.ts b/web/hooks/store/use-project-publish.ts index af67f82e7..1c6cdf777 100644 --- a/web/hooks/store/use-project-publish.ts +++ b/web/hooks/store/use-project-publish.ts @@ -1,11 +1,11 @@ import { useContext } from "react"; // mobx store -import { MobxStoreContext } from "lib/mobx/store-provider"; +import { StoreContext } from "contexts/store-context"; // types import { IProjectPublishStore } from "store/project/project-publish.store"; export const useProjectPublish = (): IProjectPublishStore => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); + const context = useContext(StoreContext); + if (context === undefined) throw new Error("useProjectPublish must be used within StoreProvider"); return context.projectRoot.publish; }; diff --git a/web/hooks/store/use-project-state.ts b/web/hooks/store/use-project-state.ts index 8d7fd745b..77c713e1f 100644 --- a/web/hooks/store/use-project-state.ts +++ b/web/hooks/store/use-project-state.ts @@ -1,11 +1,11 @@ import { useContext } from "react"; // mobx store -import { MobxStoreContext } from "lib/mobx/store-provider"; +import { StoreContext } from "contexts/store-context"; // types import { IStateStore } from "store/state.store"; export const useProjectState = (): IStateStore => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); + const context = useContext(StoreContext); + if (context === undefined) throw new Error("useProjectState must be used within StoreProvider"); return context.state; }; diff --git a/web/hooks/store/use-project-view.ts b/web/hooks/store/use-project-view.ts index 1d0d20fba..a53e2720d 100644 --- a/web/hooks/store/use-project-view.ts +++ b/web/hooks/store/use-project-view.ts @@ -1,11 +1,11 @@ import { useContext } from "react"; // mobx store -import { MobxStoreContext } from "lib/mobx/store-provider"; +import { StoreContext } from "contexts/store-context"; // types import { IProjectViewStore } from "store/project-view.store"; export const useProjectView = (): IProjectViewStore => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); + const context = useContext(StoreContext); + if (context === undefined) throw new Error("useProjectView must be used within StoreProvider"); return context.projectView; }; diff --git a/web/hooks/store/use-project.ts b/web/hooks/store/use-project.ts index 3bbb0f943..a6fb8cc20 100644 --- a/web/hooks/store/use-project.ts +++ b/web/hooks/store/use-project.ts @@ -1,11 +1,11 @@ import { useContext } from "react"; // mobx store -import { MobxStoreContext } from "lib/mobx/store-provider"; +import { StoreContext } from "contexts/store-context"; // types import { IProjectStore } from "store/project/project.store"; export const useProject = (): IProjectStore => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); + const context = useContext(StoreContext); + if (context === undefined) throw new Error("useProject must be used within StoreProvider"); return context.projectRoot.project; }; diff --git a/web/hooks/store/use-user.ts b/web/hooks/store/use-user.ts index 15aa889a6..a064d66d2 100644 --- a/web/hooks/store/use-user.ts +++ b/web/hooks/store/use-user.ts @@ -1,11 +1,11 @@ import { useContext } from "react"; // mobx store -import { MobxStoreContext } from "lib/mobx/store-provider"; +import { StoreContext } from "contexts/store-context"; // types import { IUserStore } from "store/user"; export const useUser = (): IUserStore => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); + const context = useContext(StoreContext); + if (context === undefined) throw new Error("useUser must be used within StoreProvider"); return context.user; }; diff --git a/web/hooks/store/use-webhook.ts b/web/hooks/store/use-webhook.ts index 703cd7601..bf35827c5 100644 --- a/web/hooks/store/use-webhook.ts +++ b/web/hooks/store/use-webhook.ts @@ -1,11 +1,11 @@ import { useContext } from "react"; // mobx store -import { MobxStoreContext } from "lib/mobx/store-provider"; +import { StoreContext } from "contexts/store-context"; // types import { IWebhookStore } from "store/workspace/webhook.store"; export const useWebhook = (): IWebhookStore => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); + const context = useContext(StoreContext); + if (context === undefined) throw new Error("useWebhook must be used within StoreProvider"); return context.workspaceRoot.webhook; }; diff --git a/web/hooks/store/use-workspace.ts b/web/hooks/store/use-workspace.ts index 34e5edf86..7d1343a6c 100644 --- a/web/hooks/store/use-workspace.ts +++ b/web/hooks/store/use-workspace.ts @@ -1,11 +1,11 @@ import { useContext } from "react"; // mobx store -import { MobxStoreContext } from "lib/mobx/store-provider"; +import { StoreContext } from "contexts/store-context"; // types import { IWorkspaceRootStore } from "store/workspace"; export const useWorkspace = (): IWorkspaceRootStore => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); + const context = useContext(StoreContext); + if (context === undefined) throw new Error("useWorkspace must be used within StoreProvider"); return context.workspaceRoot; }; diff --git a/web/lib/mobx/store-provider.tsx b/web/lib/mobx/store-provider.tsx deleted file mode 100644 index aa9e3f1e5..000000000 --- a/web/lib/mobx/store-provider.tsx +++ /dev/null @@ -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); - -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 {children}; -}; - -// hook -export const useMobxStore = () => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); - return context; -}; diff --git a/web/lib/mobx_legacy/store-provider.tsx b/web/lib/mobx_legacy/store-provider.tsx deleted file mode 100644 index 7e9a57c51..000000000 --- a/web/lib/mobx_legacy/store-provider.tsx +++ /dev/null @@ -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); - -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 {children}; -}; - -// hook -export const useMobxStore = () => { - const context = useContext(MobxStoreContext); - if (context === undefined) throw new Error("useMobxStore must be used within MobxStoreProvider"); - return context; -}; diff --git a/web/pages/_app.tsx b/web/pages/_app.tsx index 87a4eb03a..0ffdb5d11 100644 --- a/web/pages/_app.tsx +++ b/web/pages/_app.tsx @@ -11,7 +11,7 @@ import "styles/react-datepicker.css"; // constants import { SITE_TITLE } from "constants/seo-variables"; // 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 { AppProvider } from "lib/app-provider"; @@ -31,11 +31,11 @@ function MyApp({ Component, pageProps }: AppPropsWithLayout) { {SITE_TITLE} - + {getLayout()} - + ); }