aboutsummaryrefslogtreecommitdiffstats
path: root/packages/renderer/src/components
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2021-12-23 15:48:58 +0100
committerLibravatar Kristóf Marussy <kristof@marussy.com>2021-12-23 15:48:58 +0100
commitb5d16a8068ed55b784f8e10f19a99cc7f11b8bc7 (patch)
treed819b4bb607f5b046451e15385c16804d5f43fcf /packages/renderer/src/components
parentfeat: Main to renderer store synchronization (diff)
downloadsophie-b5d16a8068ed55b784f8e10f19a99cc7f11b8bc7.tar.gz
sophie-b5d16a8068ed55b784f8e10f19a99cc7f11b8bc7.tar.zst
sophie-b5d16a8068ed55b784f8e10f19a99cc7f11b8bc7.zip
feat: Add react and mobx integration
Diffstat (limited to 'packages/renderer/src/components')
-rw-r--r--packages/renderer/src/components/StoreProvider.tsx24
-rw-r--r--packages/renderer/src/components/ThemeProvider.tsx26
2 files changed, 50 insertions, 0 deletions
diff --git a/packages/renderer/src/components/StoreProvider.tsx b/packages/renderer/src/components/StoreProvider.tsx
new file mode 100644
index 0000000..51c39f7
--- /dev/null
+++ b/packages/renderer/src/components/StoreProvider.tsx
@@ -0,0 +1,24 @@
1import React, { createContext, useContext } from 'react';
2
3import type { RootStore } from '../stores/RootStore';
4
5const StoreContext = createContext<RootStore | null>(null);
6
7export function useStore(): RootStore {
8 const store = useContext(StoreContext);
9 if (store === null) {
10 throw new Error('useStore can only be called inside of StoreProvider');
11 }
12 return store;
13}
14
15export function StoreProvider({ children, store }: {
16 children: JSX.Element | JSX.Element[],
17 store: RootStore,
18}): JSX.Element {
19 return (
20 <StoreContext.Provider value={store}>
21 {children}
22 </StoreContext.Provider>
23 );
24}
diff --git a/packages/renderer/src/components/ThemeProvider.tsx b/packages/renderer/src/components/ThemeProvider.tsx
new file mode 100644
index 0000000..8be4f6a
--- /dev/null
+++ b/packages/renderer/src/components/ThemeProvider.tsx
@@ -0,0 +1,26 @@
1import { observer } from 'mobx-react-lite';
2import {
3 unstable_createMuiStrictModeTheme as createTheme,
4 ThemeProvider as MuiThemeProvider,
5} from '@mui/material/styles';
6import React from 'react';
7
8import { useStore } from './StoreProvider';
9
10export const ThemeProvider = observer(({ children }: {
11 children: JSX.Element | JSX.Element[],
12}): JSX.Element => {
13 const { shared: { shouldUseDarkColors } } = useStore();
14
15 const theme = createTheme({
16 palette: {
17 mode: shouldUseDarkColors ? 'dark' : 'light',
18 },
19 });
20
21 return (
22 <MuiThemeProvider theme={theme}>
23 {children}
24 </MuiThemeProvider>
25 );
26});