-
Notifications
You must be signed in to change notification settings - Fork 1
/
App.tsx
120 lines (109 loc) · 3.33 KB
/
App.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/**
* Sample React Native App
* https://github.com/facebook/react-native
*
* Generated with the TypeScript template
* https://github.com/emin93/react-native-template-typescript
*
* @format
*/
import React, { Fragment } from "react";
import { Text, View, NativeModules, NativeEventEmitter } from "react-native";
import { Provider } from "react-redux";
import {
createStackNavigator,
createAppContainer,
StackActions,
StatusBar
} from "react-navigation";
import Orientation from "react-native-orientation";
import { StyleProvider } from "native-base";
import getTheme from "./native-base-theme/components";
import platform from "./native-base-theme/variables/platform";
import { updateOrientation } from "./app/actions/ui";
import Browser from "./app/containers/Browser";
import PaneRoot from "./app/containers/PaneRoot";
import Setting from "./app/components/Setting";
import KeySetting from "./app/containers/KeySetting";
import GeneralSetting from "./app/containers/GeneralSetting";
import NavBar from "./app/containers/NavBar";
import SettingBackButton from "./app/components/SettingBackButton";
import LaunchScreen from "./app/components/LaunchScreen";
import configureStore from "./app/configureStore";
import { PersistGate } from "redux-persist/integration/react";
import {
selectAppKeymap,
selectModifiers,
selectBrowserKeymap
} from "./app/selectors/keymap";
import keymapper from "./app/utils/Keymapper";
const { DAVKeyManager } = NativeModules;
const DAVKeyManagerEmitter = new NativeEventEmitter(DAVKeyManager);
const { store, persistor } = configureStore({});
//persistor.purge();
let RootStack = createStackNavigator({
Home: {
screen: PaneRoot,
navigationOptions: ({ navigation }) => ({
title: "",
header: <NavBar {...navigation} />
})
},
Setting: {
screen: Setting,
navigationOptions: ({ navigation }) => ({
title: "Setting",
headerLeft: <SettingBackButton {...navigation} />
})
},
KeySetting: {
screen: KeySetting,
navigationOptions: () => ({
title: "Key Setting"
})
},
GeneralSetting: {
screen: GeneralSetting,
navigationOptions: () => ({
title: "General Setting"
})
}
});
let Navigation = createAppContainer(RootStack);
class App extends React.Component {
componentDidMount() {
this._setKeymaps();
Orientation.addOrientationListener(this._orientationDidChange);
persistor.subscribe(this._setKeymaps); // called after rehydrate redux-persist
}
// (re)set keymapping
_setKeymaps = () => {
const state = store.getState();
const appKeymap = selectAppKeymap(state);
const browserKeymap = selectBrowserKeymap(state);
const modifiers = selectModifiers(state);
DAVKeyManager.updateModifiers(modifiers);
DAVKeyManager.setAppKeymap(
keymapper.convertToNativeFormat(appKeymap, modifiers)
);
};
_orientationDidChange = orientation => {
const { dispatch } = store;
dispatch(updateOrientation(orientation));
};
componentWillUnmount() {
Orientation.removeOrientationListener(this._orientationDidChange);
}
render() {
return (
<StyleProvider style={getTheme(platform)}>
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<Navigation />
</PersistGate>
</Provider>
</StyleProvider>
);
}
}
export default App;