aboutsummaryrefslogtreecommitdiffstats
path: root/packages/renderer/src/index.tsx
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/index.tsx
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/index.tsx')
-rw-r--r--packages/renderer/src/index.tsx53
1 files changed, 23 insertions, 30 deletions
diff --git a/packages/renderer/src/index.tsx b/packages/renderer/src/index.tsx
index 37daaa6..34b21de 100644
--- a/packages/renderer/src/index.tsx
+++ b/packages/renderer/src/index.tsx
@@ -2,56 +2,49 @@ import '@fontsource/roboto/300.css';
2import '@fontsource/roboto/400.css'; 2import '@fontsource/roboto/400.css';
3import '@fontsource/roboto/500.css'; 3import '@fontsource/roboto/500.css';
4import '@fontsource/roboto/700.css'; 4import '@fontsource/roboto/700.css';
5import { applyPatch, applySnapshot } from 'mobx-state-tree'; 5import { observer } from 'mobx-react-lite';
6import Button from "@mui/material/Button"; 6import Button from "@mui/material/Button";
7import CssBaseline from "@mui/material/CssBaseline"; 7import CssBaseline from "@mui/material/CssBaseline";
8import {
9 unstable_createMuiStrictModeTheme as createTheme,
10 ThemeProvider,
11} from '@mui/material/styles';
12import React from 'react'; 8import React from 'react';
13import { render } from 'react-dom'; 9import { render } from 'react-dom';
14import { sharedStore } from '@sophie/shared';
15 10
11import { StoreProvider, useStore } from './components/StoreProvider';
12import { ThemeProvider } from './components/ThemeProvider';
16import { exposeToReduxDevtools } from './devTools'; 13import { exposeToReduxDevtools } from './devTools';
14import { createAndConnectRootStore } from './stores/RootStore';
17 15
18const isDevelopment = import.meta.env.MODE === 'development'; 16const isDevelopment = import.meta.env.MODE === 'development';
19 17
20const store = sharedStore.create(); 18const store = createAndConnectRootStore(window.sophieRenderer);
21 19
22if (isDevelopment) { 20if (isDevelopment) {
23 exposeToReduxDevtools(store); 21 exposeToReduxDevtools(store);
24} 22}
25 23
26window.sophieRenderer.setSharedStoreListener({ 24const Example = observer(() => {
27 onSnapshot(snapshot) { 25 const { shared: { clickCount } } = useStore();
28 applySnapshot(store, snapshot);
29 },
30 onPatch(patch) {
31 applyPatch(store, patch);
32 },
33});
34 26
35const theme = createTheme({ 27 return (
36 palette: { 28 <Button
37 mode: 'dark', 29 variant="contained"
38 }, 30 onClick={() => store.buttonClick()}
31 >
32 Hello Sophie! {clickCount}
33 </Button>
34 );
39}); 35});
40 36
41function App() { 37function Root(): JSX.Element {
42 return ( 38 return (
43 <React.StrictMode> 39 <React.StrictMode>
44 <ThemeProvider theme={theme}> 40 <StoreProvider store={store}>
45 <CssBaseline enableColorScheme /> 41 <ThemeProvider>
46 <Button 42 <CssBaseline enableColorScheme />
47 variant="contained" 43 <Example />
48 onClick={window.sophieRenderer.buttonClick} 44 </ThemeProvider>
49 > 45 </StoreProvider>
50 Hello Sophie!
51 </Button>
52 </ThemeProvider>
53 </React.StrictMode> 46 </React.StrictMode>
54 ); 47 );
55} 48}
56 49
57render(<App />, document.querySelector('#app')); 50render(<Root />, document.querySelector('#app'));