robosats/frontend/src/App.tsx
Reckless_Satoshi b25230378e
Small fixes and partial TradeBox functional component (#309)
* Add Order model

* Add permanent settings

* Fix maker on book page

* Add chat models

* Attempt to fix Android cookies

* Add Tradebox Dialogs

* Add Lock Invoice box

* Add taker found prompt

* Fix load setting cookies

* Revert TradeBox for test release

* Refactor ordering of constructing theme

* Add load encrypted seetings
2022-11-07 10:13:02 +00:00

68 lines
1.9 KiB
TypeScript

import React, { Suspense, useState, useEffect } from 'react';
import ReactDOM from 'react-dom/client';
import Main from './basic/Main';
import { CssBaseline } from '@mui/material';
import { ThemeProvider, createTheme, Theme } from '@mui/material/styles';
import UnsafeAlert from './components/UnsafeAlert';
import TorConnection from './components/TorConnection';
import { I18nextProvider } from 'react-i18next';
import i18n from './i18n/Web';
import { systemClient } from './services/System';
import { Settings } from './models';
const makeTheme = function (settings: Settings) {
const theme: Theme = createTheme({
palette: {
mode: settings.mode,
background: {
default: settings.mode === 'dark' ? '#070707' : '#fff',
},
},
typography: { fontSize: settings.fontSize },
});
return theme;
};
const App = (): JSX.Element => {
const [theme, setTheme] = useState<Theme>(makeTheme(new Settings()));
const [settings, setSettings] = useState<Settings>(new Settings());
useEffect(() => {
setTheme(makeTheme(settings));
}, [settings.fontSize, settings.mode]);
useEffect(() => {
i18n.changeLanguage(settings.language);
}, []);
return (
<Suspense fallback='loading language'>
<I18nextProvider i18n={i18n}>
<ThemeProvider theme={theme}>
<CssBaseline />
{window.NativeRobosats === undefined ? (
<UnsafeAlert settings={settings} setSettings={setSettings} />
) : (
<TorConnection />
)}
<Main settings={settings} setSettings={setSettings} />
</ThemeProvider>
</I18nextProvider>
</Suspense>
);
};
const loadApp = () => {
if (systemClient.loading) {
setTimeout(loadApp, 200);
} else {
const root = ReactDOM.createRoot(document.getElementById('app') ?? new HTMLElement());
root.render(<App />);
}
};
loadApp();