main
js 52 lines 1.5 KB
Raw
1 import React, {Component, Suspense, startTransition} from 'react';
2
3 import Theme, {ThemeToggleButton} from './Theme';
4
5 import './Chrome.css';
6
7 import LargeContent from './LargeContent';
8
9 export default class Chrome extends Component {
10 state = {theme: 'light'};
11 render() {
12 const assets = this.props.assets;
13 return (
14 <html lang="en">
15 <head>
16 <meta charSet="utf-8" />
17 <meta name="viewport" content="width=device-width, initial-scale=1" />
18 <link rel="shortcut icon" href="favicon.ico" />
19 <link rel="stylesheet" href={assets['main.css']} />
20 <title>{this.props.title}</title>
21 </head>
22 <body className={this.state.theme}>
23 <noscript
24 dangerouslySetInnerHTML={{
25 __html: `<b>Enable JavaScript to run this app.</b>`,
26 }}
27 />
28 <Suspense fallback="Loading...">
29 <Theme.Provider value={this.state.theme}>
30 <div>
31 <ThemeToggleButton
32 onChange={theme => {
33 startTransition(() => {
34 this.setState({theme});
35 });
36 }}
37 />
38 </div>
39 {this.props.children}
40 </Theme.Provider>
41 </Suspense>
42 <LargeContent />
43 <script
44 dangerouslySetInnerHTML={{
45 __html: `assetManifest = ${JSON.stringify(assets)};`,
46 }}
47 />
48 </body>
49 </html>
50 );
51 }
52 }