@exodus/react-native-webview 9.4.0-no-android.0 → 11.26.1-exodus.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -18
- package/android/.editorconfig +6 -0
- package/android/build.gradle +137 -0
- package/android/gradle.properties +6 -0
- package/android/src/main/AndroidManifest.xml +15 -0
- package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewFileProvider.java +14 -0
- package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java +1650 -0
- package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModule.java +550 -0
- package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewPackage.kt +15 -0
- package/android/src/main/java/com/reactnativecommunity/webview/WebViewConfig.java +12 -0
- package/android/src/main/java/com/reactnativecommunity/webview/events/TopHttpErrorEvent.kt +25 -0
- package/android/src/main/java/com/reactnativecommunity/webview/events/TopLoadingErrorEvent.kt +25 -0
- package/android/src/main/java/com/reactnativecommunity/webview/events/TopLoadingFinishEvent.kt +24 -0
- package/android/src/main/java/com/reactnativecommunity/webview/events/TopLoadingProgressEvent.kt +24 -0
- package/android/src/main/java/com/reactnativecommunity/webview/events/TopLoadingStartEvent.kt +25 -0
- package/android/src/main/java/com/reactnativecommunity/webview/events/TopMessageEvent.kt +24 -0
- package/android/src/main/java/com/reactnativecommunity/webview/events/TopRenderProcessGoneEvent.kt +26 -0
- package/android/src/main/java/com/reactnativecommunity/webview/events/TopShouldStartLoadWithRequestEvent.kt +29 -0
- package/android/src/main/res/xml/file_provider_paths.xml +6 -0
- package/apple/RNCWKProcessPoolManager.h +15 -0
- package/apple/RNCWKProcessPoolManager.m +36 -0
- package/apple/RNCWebView.h +117 -0
- package/apple/RNCWebView.m +1532 -0
- package/apple/RNCWebViewManager.h +13 -0
- package/apple/RNCWebViewManager.m +288 -0
- package/index.d.ts +65 -0
- package/index.js +4 -0
- package/ios/RNCWebView.xcodeproj/project.pbxproj +2 -0
- package/lib/WebView.android.d.ts +7 -0
- package/lib/WebView.android.js +125 -1
- package/lib/WebView.d.ts +7 -0
- package/lib/WebView.ios.d.ts +7 -0
- package/lib/WebView.ios.js +148 -202
- package/lib/WebView.js +9 -2
- package/lib/WebView.styles.d.ts +12 -0
- package/lib/WebView.styles.js +7 -7
- package/lib/WebViewNativeComponent.android.d.ts +4 -0
- package/lib/WebViewNativeComponent.android.js +3 -0
- package/lib/WebViewNativeComponent.ios.d.ts +4 -0
- package/lib/WebViewNativeComponent.ios.js +3 -0
- package/lib/WebViewShared.d.ts +37 -0
- package/lib/WebViewShared.js +121 -24
- package/lib/WebViewTypes.d.ts +873 -0
- package/lib/WebViewTypes.js +31 -16
- package/lib/index.d.ts +4 -0
- package/lib/index.js +3 -0
- package/package.json +83 -87
- package/react-native-webview.podspec +4 -4
- package/react-native.config.js +37 -0
package/lib/WebViewShared.js
CHANGED
|
@@ -1,30 +1,44 @@
|
|
|
1
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
2
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
|
+
if (ar || !(i in from)) {
|
|
4
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
+
ar[i] = from[i];
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
|
+
};
|
|
1
10
|
import escapeStringRegexp from 'escape-string-regexp';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { Linking, View, ActivityIndicator, Text } from 'react-native';
|
|
11
|
+
import React, { useCallback, useMemo, useRef, useState } from 'react';
|
|
12
|
+
import { Linking, View, ActivityIndicator, Text, Platform } from 'react-native';
|
|
4
13
|
import styles from './WebView.styles';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
14
|
+
var defaultOriginWhitelist = ['http://*', 'https://*'];
|
|
15
|
+
var extractOrigin = function (url) {
|
|
16
|
+
var result = /^[A-Za-z][A-Za-z0-9+\-.]+:(\/\/)?[^/]*/.exec(url);
|
|
8
17
|
return result === null ? '' : result[0];
|
|
9
18
|
};
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
19
|
+
var originWhitelistToRegex = function (originWhitelist) {
|
|
20
|
+
return "^".concat(escapeStringRegexp(originWhitelist).replace(/\\\*/g, '.*'));
|
|
21
|
+
};
|
|
22
|
+
var passesWhitelist = function (compiledWhitelist, url) {
|
|
23
|
+
var origin = extractOrigin(url);
|
|
24
|
+
return compiledWhitelist.some(function (x) { return new RegExp(x).test(origin); });
|
|
14
25
|
};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
26
|
+
var compileWhitelist = function (originWhitelist) {
|
|
27
|
+
return __spreadArray(['about:blank'], (originWhitelist || []), true).map(originWhitelistToRegex);
|
|
28
|
+
};
|
|
29
|
+
var createOnShouldStartLoadWithRequest = function (loadRequest, originWhitelist, onShouldStartLoadWithRequest) {
|
|
30
|
+
return function (_a) {
|
|
31
|
+
var nativeEvent = _a.nativeEvent;
|
|
32
|
+
var shouldStart = true;
|
|
33
|
+
var url = nativeEvent.url, lockIdentifier = nativeEvent.lockIdentifier;
|
|
20
34
|
if (!passesWhitelist(compileWhitelist(originWhitelist), url)) {
|
|
21
|
-
Linking.canOpenURL(url).then((supported)
|
|
35
|
+
Linking.canOpenURL(url).then(function (supported) {
|
|
22
36
|
if (supported) {
|
|
23
37
|
return Linking.openURL(url);
|
|
24
38
|
}
|
|
25
|
-
console.warn(
|
|
39
|
+
console.warn("Can't open url: ".concat(url));
|
|
26
40
|
return undefined;
|
|
27
|
-
})
|
|
41
|
+
})["catch"](function (e) {
|
|
28
42
|
console.warn('Error opening URL: ', e);
|
|
29
43
|
});
|
|
30
44
|
shouldStart = false;
|
|
@@ -35,13 +49,96 @@ const createOnShouldStartLoadWithRequest = (loadRequest, originWhitelist, onShou
|
|
|
35
49
|
loadRequest(shouldStart, url, lockIdentifier);
|
|
36
50
|
};
|
|
37
51
|
};
|
|
38
|
-
|
|
52
|
+
var defaultRenderLoading = function () { return (<View style={styles.loadingOrErrorView}>
|
|
39
53
|
<ActivityIndicator />
|
|
40
|
-
</View>);
|
|
41
|
-
|
|
54
|
+
</View>); };
|
|
55
|
+
var defaultRenderError = function (errorDomain, errorCode, errorDesc) { return (<View style={styles.loadingOrErrorView}>
|
|
42
56
|
<Text style={styles.errorTextTitle}>Error loading page</Text>
|
|
43
|
-
<Text style={styles.errorText}>{
|
|
44
|
-
<Text style={styles.errorText}>{
|
|
45
|
-
<Text style={styles.errorText}>{
|
|
46
|
-
</View>);
|
|
57
|
+
<Text style={styles.errorText}>{"Domain: ".concat(errorDomain)}</Text>
|
|
58
|
+
<Text style={styles.errorText}>{"Error Code: ".concat(errorCode)}</Text>
|
|
59
|
+
<Text style={styles.errorText}>{"Description: ".concat(errorDesc)}</Text>
|
|
60
|
+
</View>); };
|
|
47
61
|
export { defaultOriginWhitelist, createOnShouldStartLoadWithRequest, defaultRenderLoading, defaultRenderError, };
|
|
62
|
+
export var useWebWiewLogic = function (_a) {
|
|
63
|
+
var startInLoadingState = _a.startInLoadingState, onNavigationStateChange = _a.onNavigationStateChange, onLoadStart = _a.onLoadStart, onLoad = _a.onLoad, onLoadProgress = _a.onLoadProgress, onLoadEnd = _a.onLoadEnd, onError = _a.onError, onHttpErrorProp = _a.onHttpErrorProp, onMessageProp = _a.onMessageProp, onRenderProcessGoneProp = _a.onRenderProcessGoneProp, onContentProcessDidTerminateProp = _a.onContentProcessDidTerminateProp, originWhitelist = _a.originWhitelist, onShouldStartLoadWithRequestProp = _a.onShouldStartLoadWithRequestProp, onShouldStartLoadWithRequestCallback = _a.onShouldStartLoadWithRequestCallback;
|
|
64
|
+
var _b = useState(startInLoadingState ? "LOADING" : "IDLE"), viewState = _b[0], setViewState = _b[1];
|
|
65
|
+
var _c = useState(null), lastErrorEvent = _c[0], setLastErrorEvent = _c[1];
|
|
66
|
+
var startUrl = useRef(null);
|
|
67
|
+
var updateNavigationState = useCallback(function (event) {
|
|
68
|
+
onNavigationStateChange === null || onNavigationStateChange === void 0 ? void 0 : onNavigationStateChange(event.nativeEvent);
|
|
69
|
+
}, [onNavigationStateChange]);
|
|
70
|
+
var onLoadingStart = useCallback(function (event) {
|
|
71
|
+
// Needed for android
|
|
72
|
+
startUrl.current = event.nativeEvent.url;
|
|
73
|
+
// !Needed for android
|
|
74
|
+
onLoadStart === null || onLoadStart === void 0 ? void 0 : onLoadStart(event);
|
|
75
|
+
updateNavigationState(event);
|
|
76
|
+
}, [onLoadStart, updateNavigationState]);
|
|
77
|
+
var onLoadingError = useCallback(function (event) {
|
|
78
|
+
event.persist();
|
|
79
|
+
if (onError) {
|
|
80
|
+
onError(event);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
console.warn('Encountered an error loading page', event.nativeEvent);
|
|
84
|
+
}
|
|
85
|
+
onLoadEnd === null || onLoadEnd === void 0 ? void 0 : onLoadEnd(event);
|
|
86
|
+
if (event.isDefaultPrevented()) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
;
|
|
90
|
+
setViewState('ERROR');
|
|
91
|
+
setLastErrorEvent(event.nativeEvent);
|
|
92
|
+
}, [onError, onLoadEnd]);
|
|
93
|
+
var onHttpError = useCallback(function (event) {
|
|
94
|
+
onHttpErrorProp === null || onHttpErrorProp === void 0 ? void 0 : onHttpErrorProp(event);
|
|
95
|
+
}, [onHttpErrorProp]);
|
|
96
|
+
// Android Only
|
|
97
|
+
var onRenderProcessGone = useCallback(function (event) {
|
|
98
|
+
onRenderProcessGoneProp === null || onRenderProcessGoneProp === void 0 ? void 0 : onRenderProcessGoneProp(event);
|
|
99
|
+
}, [onRenderProcessGoneProp]);
|
|
100
|
+
// !Android Only
|
|
101
|
+
// iOS Only
|
|
102
|
+
var onContentProcessDidTerminate = useCallback(function (event) {
|
|
103
|
+
onContentProcessDidTerminateProp === null || onContentProcessDidTerminateProp === void 0 ? void 0 : onContentProcessDidTerminateProp(event);
|
|
104
|
+
}, [onContentProcessDidTerminateProp]);
|
|
105
|
+
// !iOS Only
|
|
106
|
+
var onLoadingFinish = useCallback(function (event) {
|
|
107
|
+
onLoad === null || onLoad === void 0 ? void 0 : onLoad(event);
|
|
108
|
+
onLoadEnd === null || onLoadEnd === void 0 ? void 0 : onLoadEnd(event);
|
|
109
|
+
var url = event.nativeEvent.url;
|
|
110
|
+
// on Android, only if url === startUrl
|
|
111
|
+
if (Platform.OS !== "android" || url === startUrl.current) {
|
|
112
|
+
setViewState('IDLE');
|
|
113
|
+
}
|
|
114
|
+
// !on Android, only if url === startUrl
|
|
115
|
+
updateNavigationState(event);
|
|
116
|
+
}, [onLoad, onLoadEnd, updateNavigationState]);
|
|
117
|
+
var onMessage = useCallback(function (event) {
|
|
118
|
+
onMessageProp === null || onMessageProp === void 0 ? void 0 : onMessageProp(event);
|
|
119
|
+
}, [onMessageProp]);
|
|
120
|
+
var onLoadingProgress = useCallback(function (event) {
|
|
121
|
+
var progress = event.nativeEvent.progress;
|
|
122
|
+
// patch for Android only
|
|
123
|
+
if (Platform.OS === "android" && progress === 1) {
|
|
124
|
+
setViewState(function (prevViewState) { return prevViewState === 'LOADING' ? 'IDLE' : prevViewState; });
|
|
125
|
+
}
|
|
126
|
+
// !patch for Android only
|
|
127
|
+
onLoadProgress === null || onLoadProgress === void 0 ? void 0 : onLoadProgress(event);
|
|
128
|
+
}, [onLoadProgress]);
|
|
129
|
+
var onShouldStartLoadWithRequest = useMemo(function () { return createOnShouldStartLoadWithRequest(onShouldStartLoadWithRequestCallback, originWhitelist, onShouldStartLoadWithRequestProp); }, [originWhitelist, onShouldStartLoadWithRequestProp, onShouldStartLoadWithRequestCallback]);
|
|
130
|
+
return {
|
|
131
|
+
onShouldStartLoadWithRequest: onShouldStartLoadWithRequest,
|
|
132
|
+
onLoadingStart: onLoadingStart,
|
|
133
|
+
onLoadingProgress: onLoadingProgress,
|
|
134
|
+
onLoadingError: onLoadingError,
|
|
135
|
+
onLoadingFinish: onLoadingFinish,
|
|
136
|
+
onHttpError: onHttpError,
|
|
137
|
+
onRenderProcessGone: onRenderProcessGone,
|
|
138
|
+
onContentProcessDidTerminate: onContentProcessDidTerminate,
|
|
139
|
+
onMessage: onMessage,
|
|
140
|
+
viewState: viewState,
|
|
141
|
+
setViewState: setViewState,
|
|
142
|
+
lastErrorEvent: lastErrorEvent
|
|
143
|
+
};
|
|
144
|
+
};
|