-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCHWebView.js
More file actions
68 lines (57 loc) · 1.72 KB
/
CHWebView.js
File metadata and controls
68 lines (57 loc) · 1.72 KB
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
import React, { useRef, useState, useEffect } from 'react';
import { AppState } from 'react-native';
import { WebView } from 'react-native-webview';
import { useCrowdHandler } from './CrowdHandlerProvider';
import {
StyleSheet,
StatusBar,
} from 'react-native';
export const CHWebView = ({ navigation, route }) => {
const appState = useRef(AppState.currentState);
const [appStateVisible, setAppStateVisible] = useState(appState.current);
const isMounted = useRef(true);
const uri = route.params.uri;
const crowdhandler_gatekeeper = useCrowdHandler();
const ref = useRef();
/**
* Only load the webview when this screen is mounted
*/
useEffect(() => {
const webViewMounted = () => {
isMounted.current = true;
};
webViewMounted();
return () => {
isMounted.current = false;
};
}, []);
useEffect(() => {
const subscription = AppState.addEventListener('change', nextAppState => {
appState.current = nextAppState;
setAppStateVisible(appState.current);
});
return () => {
subscription.remove();
};
}, []);
return (
(appStateVisible == 'active' && isMounted.current) ?
<WebView style={styles.container}
ref={(instance) => (ref.current = instance)}
onMessage={(event) => {
crowdhandler_gatekeeper.handlePostMessage(event.nativeEvent.data);
}}
source={{ uri }}
/>
:
null
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
paddingTop: 20,
alignItems: 'center',
marginTop: StatusBar.currentHeight || 0,
},
});