aboutsummaryrefslogtreecommitdiffstats
path: root/language-web/src/main/js/RootStore.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'language-web/src/main/js/RootStore.tsx')
-rw-r--r--language-web/src/main/js/RootStore.tsx31
1 files changed, 31 insertions, 0 deletions
diff --git a/language-web/src/main/js/RootStore.tsx b/language-web/src/main/js/RootStore.tsx
new file mode 100644
index 00000000..88b8a445
--- /dev/null
+++ b/language-web/src/main/js/RootStore.tsx
@@ -0,0 +1,31 @@
1import React, { createContext, useContext } from 'react';
2
3import { EditorStore } from './editor/EditorStore';
4import { ThemeStore } from './theme/ThemeStore';
5
6export class RootStore {
7 editorStore;
8
9 themeStore;
10
11 constructor() {
12 this.themeStore = new ThemeStore();
13 this.editorStore = new EditorStore(this.themeStore);
14 }
15}
16
17const StoreContext = createContext<RootStore | undefined>(undefined);
18
19export const RootStoreProvider: React.FC<{ rootStore: RootStore }> = ({ children, rootStore }) => (
20 <StoreContext.Provider value={rootStore}>
21 {children}
22 </StoreContext.Provider>
23);
24
25export const useRootStore = (): RootStore => {
26 const rootStore = useContext(StoreContext);
27 if (!rootStore) {
28 throw new Error('useRootStore must be used within RootStoreProvider');
29 }
30 return rootStore;
31};