chore: create new store context and update hooks

This commit is contained in:
Aaryan Khandelwal 2023-12-18 12:48:50 +05:30
parent d14dc13542
commit cc56140912
18 changed files with 64 additions and 99 deletions

View 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>;
};

View File

@ -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;
}; };

View File

@ -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;
}; };

View File

@ -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 {

View File

@ -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;
}; };

View File

@ -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;
}; };

View File

@ -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;
}; };

View File

@ -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;
}; };

View File

@ -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;
}; };

View File

@ -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;
}; };

View File

@ -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;
}; };

View File

@ -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;
}; };

View File

@ -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;
}; };

View File

@ -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;
}; };

View File

@ -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;
}; };

View File

@ -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;
};

View File

@ -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;
};

View File

@ -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>
</> </>
); );
} }