aboutsummaryrefslogtreecommitdiffstats
path: root/packages/renderer/src/index.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/renderer/src/index.tsx')
-rw-r--r--packages/renderer/src/index.tsx64
1 files changed, 44 insertions, 20 deletions
diff --git a/packages/renderer/src/index.tsx b/packages/renderer/src/index.tsx
index a42a30c..f1e8542 100644
--- a/packages/renderer/src/index.tsx
+++ b/packages/renderer/src/index.tsx
@@ -18,31 +18,32 @@
18 * SPDX-License-Identifier: AGPL-3.0-only 18 * SPDX-License-Identifier: AGPL-3.0-only
19 */ 19 */
20 20
21import '@fontsource/roboto/300.css';
22import '@fontsource/roboto/400.css';
23import '@fontsource/roboto/500.css';
24import '@fontsource/roboto/700.css';
25import CssBaseline from '@mui/material/CssBaseline'; 21import CssBaseline from '@mui/material/CssBaseline';
26import React from 'react'; 22import { autorun } from 'mobx';
27import { render } from 'react-dom'; 23import { addDisposer } from 'mobx-state-tree';
24import React, { Suspense, lazy } from 'react';
25import { createRoot } from 'react-dom/client';
28 26
29import App from './components/App'; 27import Loading from './components/Loading.js';
30import StoreProvider from './components/StoreProvider'; 28import ThemeProvider from './components/ThemeProvider.js';
31import ThemeProvider from './components/ThemeProvider'; 29import { exposeToReduxDevtools, hotReload } from './devTools.js';
32import { exposeToReduxDevtools, hotReloadServices } from './devTools'; 30import RtlCacheProvider from './i18n/RtlCacheProvider.js';
33import { createAndConnectRendererStore } from './stores/RendererStore'; 31import createRtlCache from './i18n/createRtlCache.js';
34import { getLogger } from './utils/log'; 32import loadRendererLocalization from './i18n/loadRendererLoalization.js';
33import { createAndConnectRendererStore } from './stores/RendererStore.js';
34import { getLogger } from './utils/log.js';
35 35
36const isDevelopment = import.meta.env.MODE === 'development'; 36const isDevelopment = import.meta.env.MODE === 'development';
37 37
38const log = getLogger('index'); 38const log = getLogger('index');
39 39
40if (isDevelopment) { 40if (isDevelopment) {
41 hotReloadServices(); 41 hotReload();
42 document.title = `[dev] ${document.title}`;
43} 42}
44 43
45const store = createAndConnectRendererStore(window.sophieRenderer); 44const { sophieRenderer: ipc } = window;
45
46const store = await createAndConnectRendererStore(ipc);
46 47
47if (isDevelopment) { 48if (isDevelopment) {
48 exposeToReduxDevtools(store).catch((error) => { 49 exposeToReduxDevtools(store).catch((error) => {
@@ -50,17 +51,40 @@ if (isDevelopment) {
50 }); 51 });
51} 52}
52 53
54loadRendererLocalization(store, ipc, isDevelopment);
55
56const disposeSetHtmlLang = autorun(() => {
57 const {
58 shared: { language, writingDirection },
59 } = store;
60 document.documentElement.lang = language;
61 document.documentElement.dir = writingDirection;
62});
63addDisposer(store, disposeSetHtmlLang);
64
65const rtlCache = createRtlCache();
66
67const App = lazy(() => import('./components/App.js'));
68
53function Root(): JSX.Element { 69function Root(): JSX.Element {
54 return ( 70 return (
55 <React.StrictMode> 71 <React.StrictMode>
56 <StoreProvider store={store}> 72 <RtlCacheProvider store={store} rtlCache={rtlCache}>
57 <ThemeProvider> 73 <ThemeProvider store={store}>
58 <CssBaseline enableColorScheme /> 74 <CssBaseline enableColorScheme />
59 <App /> 75 <Suspense fallback={<Loading />}>
76 <App store={store} devMode={isDevelopment} />
77 </Suspense>
60 </ThemeProvider> 78 </ThemeProvider>
61 </StoreProvider> 79 </RtlCacheProvider>
62 </React.StrictMode> 80 </React.StrictMode>
63 ); 81 );
64} 82}
65 83
66render(<Root />, document.querySelector('#app')); 84const rootElement = document.querySelector('#app');
85if (rootElement === null) {
86 log.error('Root element not found');
87} else {
88 const root = createRoot(rootElement);
89 root.render(<Root />);
90}