1 import React, { Component } from 'react';
2 import Header from './Header';
3 import Main from './Main';
4 import FooterLinks from './FooterLinks';
5 import { IntlProvider, addLocaleData } from 'react-intl';
6 import { BrowserRouter } from 'react-router-dom';
7 import Firebase, { FirebaseContext } from '../components/Firebase';
8 import locale_en from 'react-intl/locale-data/en';
9 import locale_se from 'react-intl/locale-data/se';
10 import locale_id from 'react-intl/locale-data/id';
11 import messages_se from "../translations/se.json";
12 import messages_id from "../translations/id.json";
13 import messages_en from "../translations/en.json";
14
15 addLocaleData([...locale_en, ...locale_id, ...locale_se]);
16
17 let i18nConfig = {
18 language: 'en',
19 messages: messages_en
20 };
21
22 type AppProps = {}
23
24 type AppState = {
25 language: string
26 }
27
28 class App extends Component<AppProps, AppState> {
29
30 firebase: Firebase | null = null;
31
32 onChangeLanguage(language: string) {
33 switch (language) {
34 case 'se': i18nConfig.messages = messages_se; break;
35 case 'en': i18nConfig.messages = messages_en; break;
36 case 'id': i18nConfig.messages = messages_id; break;
37 default: i18nConfig.messages = messages_en; break;
38 }
39 i18nConfig.language = language;
40 this.setState({ language: language })
41 }
42
43 createFirebaseContextIfNeeded(language: string): Firebase {
44 if (this.firebase) {
45 this.firebase.setLanguage(language);
46 } else {
47 this.firebase = new Firebase(language)
48 }
49 return this.firebase;
50 }
51
52 render() {
53 return (
54 <IntlProvider locale={i18nConfig.language} messages={i18nConfig.messages}>
55 <BrowserRouter>
56 <FirebaseContext.Provider value={this.createFirebaseContextIfNeeded(i18nConfig.language)}>
57 <Header onChangeLanguage={this.onChangeLanguage.bind(this)} />
58 <Main />
59 <FooterLinks />
60 </FirebaseContext.Provider>
61 </BrowserRouter>
62 </IntlProvider >
63 );
64 }
65 }
66
67 export default App;