aboutsummaryrefslogtreecommitdiffstats
path: root/packages/renderer/src/index.tsx
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2022-03-30 21:47:45 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2022-05-16 00:54:57 +0200
commit85d91c64b5b3ec31df8acecd68a1fa6a68d57ff9 (patch)
tree277ab45a66a1c74e2d0a885c8a354aea27128d12 /packages/renderer/src/index.tsx
parentfeat(main): Translation hot reloading during development (diff)
downloadsophie-85d91c64b5b3ec31df8acecd68a1fa6a68d57ff9.tar.gz
sophie-85d91c64b5b3ec31df8acecd68a1fa6a68d57ff9.tar.zst
sophie-85d91c64b5b3ec31df8acecd68a1fa6a68d57ff9.zip
feat(renderer): Renderer translations
Add react-i18n to make us able to use i18next translations in the renderer process just like we do in the main process. Translations are hot-reloaded automatically. Signed-off-by: Kristóf Marussy <kristof@marussy.com>
Diffstat (limited to 'packages/renderer/src/index.tsx')
-rw-r--r--packages/renderer/src/index.tsx18
1 files changed, 14 insertions, 4 deletions
diff --git a/packages/renderer/src/index.tsx b/packages/renderer/src/index.tsx
index 54e157c..0022ec8 100644
--- a/packages/renderer/src/index.tsx
+++ b/packages/renderer/src/index.tsx
@@ -24,13 +24,16 @@ import '@fontsource/roboto/500.css';
24import '@fontsource/roboto/700.css'; 24import '@fontsource/roboto/700.css';
25import CssBaseline from '@mui/material/CssBaseline'; 25import CssBaseline from '@mui/material/CssBaseline';
26import { autorun } from 'mobx'; 26import { autorun } from 'mobx';
27import React from 'react'; 27import { addDisposer } from 'mobx-state-tree';
28import React, { Suspense } from 'react';
28import { render } from 'react-dom'; 29import { render } from 'react-dom';
29 30
30import App from './components/App'; 31import App from './components/App';
32import Loading from './components/Loading';
31import StoreProvider from './components/StoreProvider'; 33import StoreProvider from './components/StoreProvider';
32import ThemeProvider from './components/ThemeProvider'; 34import ThemeProvider from './components/ThemeProvider';
33import { exposeToReduxDevtools, hotReload } from './devTools'; 35import { exposeToReduxDevtools, hotReload } from './devTools';
36import loadRendererLocalization from './i18n/loadRendererLoalization';
34import { createAndConnectRendererStore } from './stores/RendererStore'; 37import { createAndConnectRendererStore } from './stores/RendererStore';
35import { getLogger } from './utils/log'; 38import { getLogger } from './utils/log';
36 39
@@ -42,7 +45,9 @@ if (isDevelopment) {
42 hotReload(); 45 hotReload();
43} 46}
44 47
45const store = createAndConnectRendererStore(window.sophieRenderer); 48const { sophieRenderer: ipc } = window;
49
50const store = createAndConnectRendererStore(ipc);
46 51
47if (isDevelopment) { 52if (isDevelopment) {
48 exposeToReduxDevtools(store).catch((error) => { 53 exposeToReduxDevtools(store).catch((error) => {
@@ -50,13 +55,16 @@ if (isDevelopment) {
50 }); 55 });
51} 56}
52 57
53autorun(() => { 58loadRendererLocalization(store, ipc, isDevelopment);
59
60const disposeSetTitle = autorun(() => {
54 const titlePrefix = isDevelopment ? '[dev] ' : ''; 61 const titlePrefix = isDevelopment ? '[dev] ' : '';
55 const serviceTitle = store.settings.selectedService?.title; 62 const serviceTitle = store.settings.selectedService?.title;
56 const formattedServiceTitle = 63 const formattedServiceTitle =
57 serviceTitle === undefined ? '' : `${serviceTitle} - `; 64 serviceTitle === undefined ? '' : `${serviceTitle} - `;
58 document.title = `${titlePrefix}${formattedServiceTitle}Sophie`; 65 document.title = `${titlePrefix}${formattedServiceTitle}Sophie`;
59}); 66});
67addDisposer(store, disposeSetTitle);
60 68
61function Root(): JSX.Element { 69function Root(): JSX.Element {
62 return ( 70 return (
@@ -64,7 +72,9 @@ function Root(): JSX.Element {
64 <StoreProvider store={store}> 72 <StoreProvider store={store}>
65 <ThemeProvider> 73 <ThemeProvider>
66 <CssBaseline enableColorScheme /> 74 <CssBaseline enableColorScheme />
67 <App /> 75 <Suspense fallback={<Loading />}>
76 <App />
77 </Suspense>
68 </ThemeProvider> 78 </ThemeProvider>
69 </StoreProvider> 79 </StoreProvider>
70 </React.StrictMode> 80 </React.StrictMode>