-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathApp.tsx
93 lines (86 loc) · 2.57 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
import React, { useEffect, useState } from "react";
import { PermissionsAndroid, Platform, StatusBar, SafeAreaView, StyleSheet } from "react-native";
import { WebView } from "react-native-webview";
import { useBridge } from "lepont";
import { AsyncStorageBridge } from "@lepont/async-storage/bridge";
import AsyncStorage from "@react-native-community/async-storage";
import CameraRoll from "@react-native-community/cameraroll";
import RNFS from "react-native-fs";
import { PermissionsAndroidBridge } from "@lepont/permissions-android/bridge";
import ReactNativeShare from "react-native-share";
import { ShareBridge } from "@lepont/share/bridge";
import changeNavigationBarColor from "react-native-navigation-bar-color";
const webBundleUrl = Platform.select({
android: "file:///android_asset/Web.bundle/index.html",
ios: "Web.bundle/index.html",
})!;
const uri = webBundleUrl;
const initialStatusBarColor = "#ffffff"
const initialStatusBarStyle = "dark-content" as const
const App = () => {
useEffect(() => {
if (Platform.OS === "android") {
StatusBar.setBackgroundColor(initialStatusBarColor);
changeNavigationBarColor(initialStatusBarColor, true, true);
}
}, []);
const [ref, onMessage] = useBridge(
(registry) =>
registry.register(
"cameraroll:save",
async ({
tag,
type,
album,
}: {
tag: string;
type: "photo" | "video";
album: string;
}): Promise<void> => {
await CameraRoll.save(tag, { type, album });
},
),
(registry) =>
registry.register(
"write-tmp-image",
async ({
content,
filename,
encode,
}: {
content: string;
filename: string;
encode: string;
}) => {
const path = RNFS.DocumentDirectoryPath + "/" + filename;
await RNFS.writeFile(path, content, encode);
return path;
},
),
AsyncStorageBridge(AsyncStorage as any),
PermissionsAndroidBridge(PermissionsAndroid as any),
ShareBridge(ReactNativeShare as any),
);
return (
<>
<StatusBar barStyle={initialStatusBarStyle} />
<SafeAreaView style={styles.container}>
<WebView
source={{ uri }}
originWhitelist={["*"]}
javaScriptEnabled
domStorageEnabled
ref={ref}
onMessage={onMessage}
/>
</SafeAreaView>
</>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: initialStatusBarColor,
},
});
export default App;