diff options
Diffstat (limited to 'packages/renderer/src/index.tsx')
-rw-r--r-- | packages/renderer/src/index.tsx | 64 |
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 | ||
21 | import '@fontsource/roboto/300.css'; | ||
22 | import '@fontsource/roboto/400.css'; | ||
23 | import '@fontsource/roboto/500.css'; | ||
24 | import '@fontsource/roboto/700.css'; | ||
25 | import CssBaseline from '@mui/material/CssBaseline'; | 21 | import CssBaseline from '@mui/material/CssBaseline'; |
26 | import React from 'react'; | 22 | import { autorun } from 'mobx'; |
27 | import { render } from 'react-dom'; | 23 | import { addDisposer } from 'mobx-state-tree'; |
24 | import React, { Suspense, lazy } from 'react'; | ||
25 | import { createRoot } from 'react-dom/client'; | ||
28 | 26 | ||
29 | import App from './components/App'; | 27 | import Loading from './components/Loading.js'; |
30 | import StoreProvider from './components/StoreProvider'; | 28 | import ThemeProvider from './components/ThemeProvider.js'; |
31 | import ThemeProvider from './components/ThemeProvider'; | 29 | import { exposeToReduxDevtools, hotReload } from './devTools.js'; |
32 | import { exposeToReduxDevtools, hotReloadServices } from './devTools'; | 30 | import RtlCacheProvider from './i18n/RtlCacheProvider.js'; |
33 | import { createAndConnectRendererStore } from './stores/RendererStore'; | 31 | import createRtlCache from './i18n/createRtlCache.js'; |
34 | import { getLogger } from './utils/log'; | 32 | import loadRendererLocalization from './i18n/loadRendererLoalization.js'; |
33 | import { createAndConnectRendererStore } from './stores/RendererStore.js'; | ||
34 | import { getLogger } from './utils/log.js'; | ||
35 | 35 | ||
36 | const isDevelopment = import.meta.env.MODE === 'development'; | 36 | const isDevelopment = import.meta.env.MODE === 'development'; |
37 | 37 | ||
38 | const log = getLogger('index'); | 38 | const log = getLogger('index'); |
39 | 39 | ||
40 | if (isDevelopment) { | 40 | if (isDevelopment) { |
41 | hotReloadServices(); | 41 | hotReload(); |
42 | document.title = `[dev] ${document.title}`; | ||
43 | } | 42 | } |
44 | 43 | ||
45 | const store = createAndConnectRendererStore(window.sophieRenderer); | 44 | const { sophieRenderer: ipc } = window; |
45 | |||
46 | const store = await createAndConnectRendererStore(ipc); | ||
46 | 47 | ||
47 | if (isDevelopment) { | 48 | if (isDevelopment) { |
48 | exposeToReduxDevtools(store).catch((error) => { | 49 | exposeToReduxDevtools(store).catch((error) => { |
@@ -50,17 +51,40 @@ if (isDevelopment) { | |||
50 | }); | 51 | }); |
51 | } | 52 | } |
52 | 53 | ||
54 | loadRendererLocalization(store, ipc, isDevelopment); | ||
55 | |||
56 | const disposeSetHtmlLang = autorun(() => { | ||
57 | const { | ||
58 | shared: { language, writingDirection }, | ||
59 | } = store; | ||
60 | document.documentElement.lang = language; | ||
61 | document.documentElement.dir = writingDirection; | ||
62 | }); | ||
63 | addDisposer(store, disposeSetHtmlLang); | ||
64 | |||
65 | const rtlCache = createRtlCache(); | ||
66 | |||
67 | const App = lazy(() => import('./components/App.js')); | ||
68 | |||
53 | function Root(): JSX.Element { | 69 | function 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 | ||
66 | render(<Root />, document.querySelector('#app')); | 84 | const rootElement = document.querySelector('#app'); |
85 | if (rootElement === null) { | ||
86 | log.error('Root element not found'); | ||
87 | } else { | ||
88 | const root = createRoot(rootElement); | ||
89 | root.render(<Root />); | ||
90 | } | ||