react-native-webview-bootpay 11.26.20 → 13.6.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.
Files changed (335) hide show
  1. package/README.md +9 -31
  2. package/android/build.gradle +70 -112
  3. package/android/gradle.properties +5 -6
  4. package/android/src/main/java/kr/co/bootpay/webview/BPCBasicAuthCredential.java +11 -0
  5. package/android/src/main/java/kr/co/bootpay/webview/BPCWebChromeClient.java +354 -434
  6. package/android/src/main/java/kr/co/bootpay/webview/BPCWebView.java +350 -259
  7. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewClient.java +253 -399
  8. package/android/src/main/java/kr/co/bootpay/webview/{WebViewConfig.java → BPCWebViewConfig.java} +3 -4
  9. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewFileProvider.java +1 -1
  10. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewManager.java +290 -877
  11. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewManagerImpl.kt +664 -0
  12. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewModule.java +29 -520
  13. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewModuleImpl.java +554 -0
  14. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewPackage.java +56 -0
  15. package/android/src/main/java/kr/co/bootpay/webview/BootpayUrlHelper.java +122 -0
  16. package/android/src/main/java/kr/co/bootpay/webview/events/TopCustomMenuSelectionEvent.kt +24 -0
  17. package/android/src/main/java/kr/co/bootpay/webview/events/TopNewWindowEvent.kt +25 -0
  18. package/android/src/newarch/com/reactnativecommunity/webview/BPCWebViewManager.java +544 -0
  19. package/android/src/newarch/com/reactnativecommunity/webview/BPCWebViewModule.java +57 -0
  20. package/apple/BPCWebView.h +22 -126
  21. package/apple/BPCWebView.mm +528 -0
  22. package/apple/BPCWebViewDecisionManager.h +20 -0
  23. package/apple/BPCWebViewDecisionManager.m +47 -0
  24. package/apple/BPCWebViewImpl.h +150 -0
  25. package/apple/{BPCWebView.m → BPCWebViewImpl.m} +377 -210
  26. package/apple/BPCWebViewManager.h +4 -8
  27. package/apple/{BPCWebViewManager.m → BPCWebViewManager.mm} +93 -149
  28. package/ios/{BPCWebView.xcodeproj → RNCWebView.xcodeproj}/project.pbxproj +18 -18
  29. package/ios/main.jsbundle +457 -0
  30. package/lib/BPCWebViewNativeComponent.d.ts +242 -0
  31. package/lib/BPCWebViewNativeComponent.d.ts.map +1 -0
  32. package/lib/BPCWebViewNativeComponent.js +6 -0
  33. package/lib/NativeBPCWebView.d.ts +10 -0
  34. package/lib/NativeBPCWebView.d.ts.map +1 -0
  35. package/lib/NativeBPCWebView.js +2 -0
  36. package/lib/WebView.android.d.ts.map +1 -1
  37. package/lib/WebView.android.js +53 -29
  38. package/lib/WebView.ios.d.ts.map +1 -1
  39. package/lib/WebView.ios.js +49 -28
  40. package/lib/WebView.macos.d.ts.map +1 -1
  41. package/lib/WebView.macos.js +10 -14
  42. package/lib/WebView.windows.d.ts.map +1 -1
  43. package/lib/WebView.windows.js +4 -6
  44. package/lib/WebViewNativeComponent.macos.d.ts +2 -2
  45. package/lib/WebViewNativeComponent.macos.js +2 -2
  46. package/lib/WebViewShared.d.ts +4 -2
  47. package/lib/WebViewShared.d.ts.map +1 -1
  48. package/lib/WebViewShared.js +8 -2
  49. package/lib/WebViewTypes.d.ts +62 -95
  50. package/lib/WebViewTypes.d.ts.map +1 -1
  51. package/lib/WebViewTypes.js +0 -16
  52. package/macos/RNCWebView.xcodeproj/project.pbxproj +44 -44
  53. package/package.json +38 -20
  54. package/react-native-webview-bootpay.podspec +22 -3
  55. package/react-native.config.js +1 -2
  56. package/src/BPCWebViewNativeComponent.ts +281 -0
  57. package/src/NativeBPCWebView.ts +14 -0
  58. package/src/WebView.android.tsx +229 -0
  59. package/src/WebView.ios.tsx +232 -0
  60. package/src/WebView.macos.tsx +177 -0
  61. package/src/WebView.styles.ts +44 -0
  62. package/src/WebView.tsx +18 -0
  63. package/src/WebView.windows.tsx +156 -0
  64. package/src/WebViewNativeComponent.macos.ts +8 -0
  65. package/src/WebViewNativeComponent.windows.ts +10 -0
  66. package/src/WebViewShared.tsx +235 -0
  67. package/src/WebViewTypes.ts +1287 -0
  68. package/src/__tests__/WebViewShared-test.js +208 -0
  69. package/src/__tests__/__snapshots__/WebViewShared-test.js.snap +8 -0
  70. package/src/index.ts +4 -0
  71. package/windows/ReactNativeWebView/ReactNativeWebView.vcxproj +1 -1
  72. package/windows/ReactNativeWebView/ReactWebView.idl +1 -0
  73. package/windows/ReactNativeWebView/ReactWebView2.cpp +142 -19
  74. package/windows/ReactNativeWebView/ReactWebView2.h +3 -0
  75. package/windows/ReactNativeWebView/ReactWebView2Manager.cpp +29 -5
  76. package/windows/ReactNativeWebView/pch.h +1 -0
  77. package/android/.editorconfig +0 -6
  78. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/results.bin +0 -1
  79. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebChromeClient$1.dex +0 -0
  80. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebChromeClient.dex +0 -0
  81. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebView$1.dex +0 -0
  82. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebView$BPCWebViewBridge.dex +0 -0
  83. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebView$ProgressChangedFilter.dex +0 -0
  84. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebView.dex +0 -0
  85. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewClient.dex +0 -0
  86. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewFileProvider.dex +0 -0
  87. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager$1.dex +0 -0
  88. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager$2.dex +0 -0
  89. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager$3.dex +0 -0
  90. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager$4.dex +0 -0
  91. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager.dex +0 -0
  92. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$1.dex +0 -0
  93. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$2.dex +0 -0
  94. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$MimeType.dex +0 -0
  95. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock$ShouldOverrideCallbackState.dex +0 -0
  96. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock.dex +0 -0
  97. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule.dex +0 -0
  98. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewPackage.dex +0 -0
  99. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BasicAuthCredential.dex +0 -0
  100. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BuildConfig.dex +0 -0
  101. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/URLUtil.dex +0 -0
  102. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/WebViewConfig.dex +0 -0
  103. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent$Companion.dex +0 -0
  104. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent.dex +0 -0
  105. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent$Companion.dex +0 -0
  106. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent.dex +0 -0
  107. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent$Companion.dex +0 -0
  108. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent.dex +0 -0
  109. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent$Companion.dex +0 -0
  110. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent.dex +0 -0
  111. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent$Companion.dex +0 -0
  112. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent.dex +0 -0
  113. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopMessageEvent$Companion.dex +0 -0
  114. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopMessageEvent.dex +0 -0
  115. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent$Companion.dex +0 -0
  116. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent.dex +0 -0
  117. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent$Companion.dex +0 -0
  118. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent.dex +0 -0
  119. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/desugar_graph.bin +0 -0
  120. package/android/build/.transforms/88c49d67076e4458a9ddee82f875eb6a/results.bin +0 -1
  121. package/android/build/.transforms/88c49d67076e4458a9ddee82f875eb6a/transformed/classes/classes.dex +0 -0
  122. package/android/build/.transforms/c0e86b44db04fcaf424a5b7ce79324f4/results.bin +0 -1
  123. package/android/build/generated/source/buildConfig/debug/kr/co/bootpay/webview/BuildConfig.java +0 -10
  124. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +0 -106
  125. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +0 -18
  126. package/android/build/intermediates/aar_metadata/debug/aar-metadata.properties +0 -4
  127. package/android/build/intermediates/annotation_processor_list/debug/annotationProcessors.json +0 -1
  128. package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
  129. package/android/build/intermediates/compile_r_class_jar/debug/R.jar +0 -0
  130. package/android/build/intermediates/compile_symbol_list/debug/R.txt +0 -1861
  131. package/android/build/intermediates/compiled_local_resources/debug/out/xml_file_provider_paths.xml.flat +0 -0
  132. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -2
  133. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
  134. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +0 -2
  135. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
  136. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +0 -2
  137. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebChromeClient$1.class +0 -0
  138. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebChromeClient.class +0 -0
  139. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$1.class +0 -0
  140. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$BPCWebViewBridge.class +0 -0
  141. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$ProgressChangedFilter.class +0 -0
  142. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView.class +0 -0
  143. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewClient.class +0 -0
  144. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewFileProvider.class +0 -0
  145. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$1.class +0 -0
  146. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$2.class +0 -0
  147. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$3.class +0 -0
  148. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$4.class +0 -0
  149. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager.class +0 -0
  150. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$1.class +0 -0
  151. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$2.class +0 -0
  152. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$MimeType.class +0 -0
  153. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock$ShouldOverrideCallbackState.class +0 -0
  154. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock.class +0 -0
  155. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule.class +0 -0
  156. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BasicAuthCredential.class +0 -0
  157. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BuildConfig.class +0 -0
  158. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/URLUtil.class +0 -0
  159. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/WebViewConfig.class +0 -0
  160. package/android/build/intermediates/library_java_res/debug/res.jar +0 -0
  161. package/android/build/intermediates/local_only_symbol_list/debug/R-def.txt +0 -3
  162. package/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +0 -210
  163. package/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +0 -106
  164. package/android/build/intermediates/navigation_json/debug/navigation.json +0 -1
  165. package/android/build/intermediates/packaged_manifests/debug/output-metadata.json +0 -18
  166. package/android/build/intermediates/packaged_res/debug/xml/file_provider_paths.xml +0 -6
  167. package/android/build/intermediates/runtime_library_classes_dir/debug/META-INF/react-native-webview-bootpay_debug.kotlin_module +0 -0
  168. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebChromeClient$1.class +0 -0
  169. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebChromeClient.class +0 -0
  170. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebView$1.class +0 -0
  171. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebView$BPCWebViewBridge.class +0 -0
  172. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebView$ProgressChangedFilter.class +0 -0
  173. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebView.class +0 -0
  174. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewClient.class +0 -0
  175. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewFileProvider.class +0 -0
  176. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager$1.class +0 -0
  177. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager$2.class +0 -0
  178. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager$3.class +0 -0
  179. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager$4.class +0 -0
  180. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager.class +0 -0
  181. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$1.class +0 -0
  182. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$2.class +0 -0
  183. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$MimeType.class +0 -0
  184. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock$ShouldOverrideCallbackState.class +0 -0
  185. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock.class +0 -0
  186. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule.class +0 -0
  187. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewPackage.class +0 -0
  188. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BasicAuthCredential.class +0 -0
  189. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BuildConfig.class +0 -0
  190. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/URLUtil.class +0 -0
  191. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/WebViewConfig.class +0 -0
  192. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent$Companion.class +0 -0
  193. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent.class +0 -0
  194. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent$Companion.class +0 -0
  195. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent.class +0 -0
  196. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent$Companion.class +0 -0
  197. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent.class +0 -0
  198. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent$Companion.class +0 -0
  199. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent.class +0 -0
  200. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent$Companion.class +0 -0
  201. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent.class +0 -0
  202. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopMessageEvent$Companion.class +0 -0
  203. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopMessageEvent.class +0 -0
  204. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent$Companion.class +0 -0
  205. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent.class +0 -0
  206. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent$Companion.class +0 -0
  207. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent.class +0 -0
  208. package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
  209. package/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +0 -1381
  210. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  211. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  212. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  213. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
  214. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  215. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
  216. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
  217. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  218. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  219. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  220. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  221. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  222. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  223. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
  224. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  225. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  226. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  227. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  228. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  229. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  230. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
  231. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
  232. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
  233. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
  234. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
  235. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
  236. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
  237. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
  238. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  239. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  240. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  241. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  242. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  243. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  244. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
  245. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab +0 -0
  246. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab.keystream +0 -0
  247. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab.keystream.len +0 -0
  248. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab.len +0 -0
  249. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab.values.at +0 -0
  250. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab_i +0 -0
  251. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab_i.len +0 -0
  252. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  253. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  254. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  255. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  256. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  257. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  258. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
  259. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  260. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  261. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  262. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  263. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  264. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  265. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
  266. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  267. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  268. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  269. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  270. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  271. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
  272. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
  273. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  274. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  275. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  276. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  277. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  278. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  279. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
  280. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +0 -2
  281. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  282. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  283. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  284. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
  285. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  286. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
  287. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
  288. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  289. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
  290. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  291. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  292. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  293. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  294. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
  295. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  296. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  297. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  298. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  299. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  300. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  301. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
  302. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  303. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  304. package/android/build/outputs/logs/manifest-merger-debug-report.txt +0 -229
  305. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  306. package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-webview-bootpay_debug.kotlin_module +0 -0
  307. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/BPCWebViewPackage.class +0 -0
  308. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent$Companion.class +0 -0
  309. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent.class +0 -0
  310. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent$Companion.class +0 -0
  311. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent.class +0 -0
  312. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent$Companion.class +0 -0
  313. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent.class +0 -0
  314. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent$Companion.class +0 -0
  315. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent.class +0 -0
  316. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent$Companion.class +0 -0
  317. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent.class +0 -0
  318. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopMessageEvent$Companion.class +0 -0
  319. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopMessageEvent.class +0 -0
  320. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent$Companion.class +0 -0
  321. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent.class +0 -0
  322. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent$Companion.class +0 -0
  323. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent.class +0 -0
  324. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewPackage.kt +0 -15
  325. package/android/src/main/java/kr/co/bootpay/webview/BasicAuthCredential.java +0 -11
  326. package/ios/BPCWebView.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  327. package/ios/BPCWebView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  328. package/ios/BPCWebView.xcodeproj/project.xcworkspace/xcuserdata/ehowlsla.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  329. package/ios/BPCWebView.xcodeproj/xcuserdata/ehowlsla.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
  330. package/lib/WebViewNativeComponent.android.d.ts +0 -4
  331. package/lib/WebViewNativeComponent.android.d.ts.map +0 -1
  332. package/lib/WebViewNativeComponent.android.js +0 -3
  333. package/lib/WebViewNativeComponent.ios.d.ts +0 -4
  334. package/lib/WebViewNativeComponent.ios.d.ts.map +0 -1
  335. package/lib/WebViewNativeComponent.ios.js +0 -3
@@ -0,0 +1,229 @@
1
+ import React, { forwardRef, ReactElement, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react';
2
+
3
+ import {
4
+ Image,
5
+ View,
6
+ ImageSourcePropType,
7
+ HostComponent,
8
+ } from 'react-native';
9
+
10
+ import BatchedBridge from 'react-native/Libraries/BatchedBridge/BatchedBridge';
11
+
12
+ import invariant from 'invariant';
13
+
14
+ import BPCWebView, {Commands, NativeProps} from "./BPCWebViewNativeComponent";
15
+ import BPCWebViewModule from "./NativeBPCWebView";
16
+ import {
17
+ defaultOriginWhitelist,
18
+ defaultRenderError,
19
+ defaultRenderLoading,
20
+ useWebViewLogic,
21
+ } from './WebViewShared';
22
+ import {
23
+ AndroidWebViewProps, WebViewSourceUri,
24
+ } from './WebViewTypes';
25
+
26
+ import styles from './WebView.styles';
27
+
28
+ const { resolveAssetSource } = Image;
29
+
30
+ /**
31
+ * A simple counter to uniquely identify WebView instances. Do not use this for anything else.
32
+ */
33
+ let uniqueRef = 0;
34
+
35
+ const WebViewComponent = forwardRef<{}, AndroidWebViewProps>(({
36
+ overScrollMode = 'always',
37
+ javaScriptEnabled = true,
38
+ thirdPartyCookiesEnabled = true,
39
+ scalesPageToFit = true,
40
+ allowsFullscreenVideo = false,
41
+ allowFileAccess = false,
42
+ saveFormDataDisabled = false,
43
+ cacheEnabled = true,
44
+ androidLayerType = "none",
45
+ originWhitelist = defaultOriginWhitelist,
46
+ setSupportMultipleWindows = true,
47
+ setBuiltInZoomControls = true,
48
+ setDisplayZoomControls = false,
49
+ nestedScrollEnabled = false,
50
+ startInLoadingState,
51
+ onNavigationStateChange,
52
+ onLoadStart,
53
+ onError,
54
+ onLoad,
55
+ onLoadEnd,
56
+ onLoadProgress,
57
+ onHttpError: onHttpErrorProp,
58
+ onRenderProcessGone: onRenderProcessGoneProp,
59
+ onMessage: onMessageProp,
60
+ onOpenWindow: onOpenWindowProp,
61
+ renderLoading,
62
+ renderError,
63
+ style,
64
+ containerStyle,
65
+ source,
66
+ nativeConfig,
67
+ onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp,
68
+ injectedJavaScriptObject,
69
+ ...otherProps
70
+ }, ref) => {
71
+ const messagingModuleName = useRef<string>(`WebViewMessageHandler${uniqueRef += 1}`).current;
72
+ const webViewRef = useRef<React.ComponentRef<HostComponent<NativeProps>> | null>(null);
73
+
74
+ const onShouldStartLoadWithRequestCallback = useCallback((shouldStart: boolean,
75
+ url: string,
76
+ lockIdentifier?: number) => {
77
+ if (lockIdentifier) {
78
+ BPCWebViewModule.shouldStartLoadWithLockIdentifier(shouldStart, lockIdentifier);
79
+ } else if (shouldStart && webViewRef.current) {
80
+ Commands.loadUrl(webViewRef.current, url);
81
+ }
82
+ }, []);
83
+
84
+ const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress, onOpenWindow, onRenderProcessGone } = useWebViewLogic({
85
+ onNavigationStateChange,
86
+ onLoad,
87
+ onError,
88
+ onHttpErrorProp,
89
+ onLoadEnd,
90
+ onLoadProgress,
91
+ onLoadStart,
92
+ onRenderProcessGoneProp,
93
+ onMessageProp,
94
+ onOpenWindowProp,
95
+ startInLoadingState,
96
+ originWhitelist,
97
+ onShouldStartLoadWithRequestProp,
98
+ onShouldStartLoadWithRequestCallback,
99
+ })
100
+
101
+ useImperativeHandle(ref, () => ({
102
+ goForward: () => webViewRef.current && Commands.goForward(webViewRef.current),
103
+ goBack: () => webViewRef.current && Commands.goBack(webViewRef.current),
104
+ reload: () => {
105
+ setViewState(
106
+ 'LOADING',
107
+ );
108
+ if (webViewRef.current) {
109
+ Commands.reload(webViewRef.current)
110
+ }
111
+ },
112
+ stopLoading: () => webViewRef.current && Commands.stopLoading(webViewRef.current),
113
+ postMessage: (data: string) => webViewRef.current && Commands.postMessage(webViewRef.current, data),
114
+ injectJavaScript: (data: string) => webViewRef.current && Commands.injectJavaScript(webViewRef.current, data),
115
+ requestFocus: () => webViewRef.current && Commands.requestFocus(webViewRef.current),
116
+ clearFormData: () => webViewRef.current && Commands.clearFormData(webViewRef.current),
117
+ clearCache: (includeDiskFiles: boolean) => webViewRef.current && Commands.clearCache(webViewRef.current, includeDiskFiles),
118
+ clearHistory: () => webViewRef.current && Commands.clearHistory(webViewRef.current),
119
+ }), [setViewState, webViewRef]);
120
+
121
+ const directEventCallbacks = useMemo(() => ({
122
+ onShouldStartLoadWithRequest,
123
+ onMessage,
124
+ }), [onMessage, onShouldStartLoadWithRequest]);
125
+
126
+ useEffect(() => {
127
+ BatchedBridge.registerCallableModule(messagingModuleName, directEventCallbacks);
128
+ }, [messagingModuleName, directEventCallbacks])
129
+
130
+ let otherView: ReactElement | undefined;
131
+ if (viewState === 'LOADING') {
132
+ otherView = (renderLoading || defaultRenderLoading)();
133
+ } else if (viewState === 'ERROR') {
134
+ invariant(lastErrorEvent != null, 'lastErrorEvent expected to be non-null');
135
+ if (lastErrorEvent) {
136
+ otherView = (renderError || defaultRenderError)(
137
+ lastErrorEvent.domain,
138
+ lastErrorEvent.code,
139
+ lastErrorEvent.description,
140
+ );
141
+ }
142
+ } else if (viewState !== 'IDLE') {
143
+ console.error(`BPCWebView invalid state encountered: ${viewState}`);
144
+ }
145
+
146
+ const webViewStyles = [styles.container, styles.webView, style];
147
+ const webViewContainerStyle = [styles.container, containerStyle];
148
+
149
+ if (typeof source !== "number" && source && 'method' in source) {
150
+ if (source.method === 'POST' && source.headers) {
151
+ console.warn(
152
+ 'WebView: `source.headers` is not supported when using POST.',
153
+ );
154
+ } else if (source.method === 'GET' && source.body) {
155
+ console.warn('WebView: `source.body` is not supported when using GET.');
156
+ }
157
+ }
158
+
159
+ const NativeWebView
160
+ = (nativeConfig?.component as (typeof BPCWebView | undefined)) || BPCWebView;
161
+
162
+ const sourceResolved = resolveAssetSource(source as ImageSourcePropType)
163
+ const newSource = typeof sourceResolved === "object" ? Object.entries(sourceResolved as WebViewSourceUri).reduce((prev, [currKey, currValue]) => {
164
+ return {
165
+ ...prev,
166
+ [currKey]: currKey === "headers" && currValue && typeof currValue === "object" ? Object.entries(currValue).map(
167
+ ([key, value]) => {
168
+ return {
169
+ name: key,
170
+ value
171
+ }
172
+ }) : currValue
173
+ }
174
+ }, {}) : sourceResolved
175
+
176
+ const webView = <NativeWebView
177
+ key="webViewKey"
178
+ {...otherProps}
179
+ messagingEnabled={typeof onMessageProp === 'function'}
180
+ messagingModuleName={messagingModuleName}
181
+
182
+ hasOnScroll={!!otherProps.onScroll}
183
+ onLoadingError={onLoadingError}
184
+ onLoadingFinish={onLoadingFinish}
185
+ onLoadingProgress={onLoadingProgress}
186
+ onLoadingStart={onLoadingStart}
187
+ onHttpError={onHttpError}
188
+ onRenderProcessGone={onRenderProcessGone}
189
+ onMessage={onMessage}
190
+ onOpenWindow={onOpenWindow}
191
+ hasOnOpenWindowEvent={onOpenWindowProp !== undefined}
192
+ onShouldStartLoadWithRequest={onShouldStartLoadWithRequest}
193
+ ref={webViewRef}
194
+ // TODO: find a better way to type this.
195
+ // @ts-expect-error source is old arch
196
+ source={sourceResolved}
197
+ newSource={newSource}
198
+ style={webViewStyles}
199
+ overScrollMode={overScrollMode}
200
+ javaScriptEnabled={javaScriptEnabled}
201
+ thirdPartyCookiesEnabled={thirdPartyCookiesEnabled}
202
+ scalesPageToFit={scalesPageToFit}
203
+ allowsFullscreenVideo={allowsFullscreenVideo}
204
+ allowFileAccess={allowFileAccess}
205
+ saveFormDataDisabled={saveFormDataDisabled}
206
+ cacheEnabled={cacheEnabled}
207
+ androidLayerType={androidLayerType}
208
+ setSupportMultipleWindows={setSupportMultipleWindows}
209
+ setBuiltInZoomControls={setBuiltInZoomControls}
210
+ setDisplayZoomControls={setDisplayZoomControls}
211
+ nestedScrollEnabled={nestedScrollEnabled}
212
+ injectedJavaScriptObject={JSON.stringify(injectedJavaScriptObject)}
213
+ {...nativeConfig?.props}
214
+ />
215
+
216
+ return (
217
+ <View style={webViewContainerStyle}>
218
+ {webView}
219
+ {otherView}
220
+ </View>
221
+ );
222
+ });
223
+
224
+ // native implementation should return "true" only for Android 5+
225
+ const { isFileUploadSupported } = BPCWebViewModule;
226
+
227
+ const WebView = Object.assign(WebViewComponent, { isFileUploadSupported });
228
+
229
+ export default WebView;
@@ -0,0 +1,232 @@
1
+ import React, { forwardRef, useCallback, useImperativeHandle, useRef } from 'react';
2
+ import {
3
+ Image,
4
+ View,
5
+ ImageSourcePropType,
6
+ HostComponent,
7
+ } from 'react-native';
8
+ import invariant from 'invariant';
9
+
10
+ import BPCWebView, {Commands, NativeProps} from "./BPCWebViewNativeComponent";
11
+ import BPCWebViewModule from "./NativeBPCWebView";
12
+
13
+ import {
14
+ defaultOriginWhitelist,
15
+ defaultRenderError,
16
+ defaultRenderLoading,
17
+ useWebViewLogic,
18
+ } from './WebViewShared';
19
+ import {
20
+ IOSWebViewProps,
21
+ DecelerationRateConstant,
22
+ WebViewSourceUri,
23
+ } from './WebViewTypes';
24
+
25
+ import styles from './WebView.styles';
26
+
27
+
28
+
29
+ const { resolveAssetSource } = Image;
30
+ const processDecelerationRate = (
31
+ decelerationRate: DecelerationRateConstant | number | undefined,
32
+ ) => {
33
+ let newDecelerationRate = decelerationRate;
34
+ if (newDecelerationRate === 'normal') {
35
+ newDecelerationRate = 0.998;
36
+ } else if (newDecelerationRate === 'fast') {
37
+ newDecelerationRate = 0.99;
38
+ }
39
+ return newDecelerationRate;
40
+ };
41
+
42
+ const useWarnIfChanges = <T extends unknown>(value: T, name: string) => {
43
+ const ref = useRef(value);
44
+ if (ref.current !== value) {
45
+ console.warn(`Changes to property ${name} do nothing after the initial render.`);
46
+ ref.current = value;
47
+ }
48
+ }
49
+
50
+ const WebViewComponent = forwardRef<{}, IOSWebViewProps>(({
51
+ fraudulentWebsiteWarningEnabled = true,
52
+ javaScriptEnabled = true,
53
+ cacheEnabled = true,
54
+ originWhitelist = defaultOriginWhitelist,
55
+ useSharedProcessPool= true,
56
+ textInteractionEnabled= true,
57
+ injectedJavaScript,
58
+ injectedJavaScriptBeforeContentLoaded,
59
+ injectedJavaScriptForMainFrameOnly = true,
60
+ injectedJavaScriptBeforeContentLoadedForMainFrameOnly = true,
61
+ startInLoadingState,
62
+ onNavigationStateChange,
63
+ onLoadStart,
64
+ onError,
65
+ onLoad,
66
+ onLoadEnd,
67
+ onLoadProgress,
68
+ onContentProcessDidTerminate: onContentProcessDidTerminateProp,
69
+ onFileDownload,
70
+ onHttpError: onHttpErrorProp,
71
+ onMessage: onMessageProp,
72
+ onOpenWindow: onOpenWindowProp,
73
+ renderLoading,
74
+ renderError,
75
+ style,
76
+ containerStyle,
77
+ source,
78
+ nativeConfig,
79
+ allowsInlineMediaPlayback,
80
+ allowsAirPlayForMediaPlayback,
81
+ mediaPlaybackRequiresUserAction,
82
+ dataDetectorTypes,
83
+ incognito,
84
+ decelerationRate: decelerationRateProp,
85
+ onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp,
86
+ ...otherProps
87
+ }, ref) => {
88
+ const webViewRef = useRef<React.ComponentRef<HostComponent<NativeProps>> | null>(null);
89
+
90
+ const onShouldStartLoadWithRequestCallback = useCallback((
91
+ shouldStart: boolean,
92
+ _url: string,
93
+ lockIdentifier = 0,
94
+ ) => {
95
+ BPCWebViewModule.shouldStartLoadWithLockIdentifier(shouldStart, lockIdentifier);
96
+ }, []);
97
+
98
+ const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress, onOpenWindow, onContentProcessDidTerminate } = useWebViewLogic({
99
+ onNavigationStateChange,
100
+ onLoad,
101
+ onError,
102
+ onHttpErrorProp,
103
+ onLoadEnd,
104
+ onLoadProgress,
105
+ onLoadStart,
106
+ onMessageProp,
107
+ onOpenWindowProp,
108
+ startInLoadingState,
109
+ originWhitelist,
110
+ onShouldStartLoadWithRequestProp,
111
+ onShouldStartLoadWithRequestCallback,
112
+ onContentProcessDidTerminateProp,
113
+ });
114
+
115
+ useImperativeHandle(ref, () => ({
116
+ goForward: () => webViewRef.current && Commands.goForward(webViewRef.current),
117
+ goBack: () => webViewRef.current && Commands.goBack(webViewRef.current),
118
+ reload: () => {
119
+ setViewState(
120
+ 'LOADING',
121
+ );
122
+ if (webViewRef.current) {
123
+ Commands.reload(webViewRef.current)
124
+ }
125
+ },
126
+ stopLoading: () => webViewRef.current && Commands.stopLoading(webViewRef.current),
127
+ postMessage: (data: string) => webViewRef.current && Commands.postMessage(webViewRef.current, data),
128
+ injectJavaScript: (data: string) => webViewRef.current && Commands.injectJavaScript(webViewRef.current, data),
129
+ requestFocus: () => webViewRef.current && Commands.requestFocus(webViewRef.current),
130
+ clearCache: (includeDiskFiles: boolean) => webViewRef.current && Commands.clearCache(webViewRef.current, includeDiskFiles),
131
+ }), [setViewState, webViewRef]);
132
+
133
+
134
+ useWarnIfChanges(allowsInlineMediaPlayback, 'allowsInlineMediaPlayback');
135
+ useWarnIfChanges(allowsAirPlayForMediaPlayback, 'allowsAirPlayForMediaPlayback');
136
+ useWarnIfChanges(incognito, 'incognito');
137
+ useWarnIfChanges(mediaPlaybackRequiresUserAction, 'mediaPlaybackRequiresUserAction');
138
+ useWarnIfChanges(dataDetectorTypes, 'dataDetectorTypes');
139
+
140
+ let otherView = null;
141
+ if (viewState === 'LOADING') {
142
+ otherView = (renderLoading || defaultRenderLoading)();
143
+ } else if (viewState === 'ERROR') {
144
+ invariant(lastErrorEvent != null, 'lastErrorEvent expected to be non-null');
145
+ otherView = (renderError || defaultRenderError)(
146
+ lastErrorEvent?.domain,
147
+ lastErrorEvent?.code ?? 0,
148
+ lastErrorEvent?.description ?? '',
149
+ );
150
+ } else if (viewState !== 'IDLE') {
151
+ console.error(`BPCWebView invalid state encountered: ${viewState}`);
152
+ }
153
+
154
+ const webViewStyles = [styles.container, styles.webView, style];
155
+ const webViewContainerStyle = [styles.container, containerStyle];
156
+
157
+ const decelerationRate = processDecelerationRate(decelerationRateProp);
158
+
159
+ const NativeWebView
160
+ = (nativeConfig?.component as typeof BPCWebView | undefined)
161
+ || BPCWebView;
162
+
163
+ const sourceResolved = resolveAssetSource(source as ImageSourcePropType)
164
+ const newSource = typeof sourceResolved === "object" ? Object.entries(sourceResolved as WebViewSourceUri).reduce((prev, [currKey, currValue]) => {
165
+ return {
166
+ ...prev,
167
+ [currKey]: currKey === "headers" && currValue && typeof currValue === "object" ? Object.entries(currValue).map(
168
+ ([key, value]) => {
169
+ return {
170
+ name: key,
171
+ value
172
+ }
173
+ }) : currValue
174
+ }
175
+ }, {}) : sourceResolved
176
+
177
+ const webView = (
178
+ <NativeWebView
179
+ key="webViewKey"
180
+ {...otherProps}
181
+ fraudulentWebsiteWarningEnabled={fraudulentWebsiteWarningEnabled}
182
+ javaScriptEnabled={javaScriptEnabled}
183
+ cacheEnabled={cacheEnabled}
184
+ useSharedProcessPool={useSharedProcessPool}
185
+ textInteractionEnabled={textInteractionEnabled}
186
+ decelerationRate={decelerationRate}
187
+ messagingEnabled={typeof onMessageProp === 'function'}
188
+ messagingModuleName="" // android ONLY
189
+ onLoadingError={onLoadingError}
190
+ onLoadingFinish={onLoadingFinish}
191
+ onLoadingProgress={onLoadingProgress}
192
+ onFileDownload={onFileDownload}
193
+ onLoadingStart={onLoadingStart}
194
+ onHttpError={onHttpError}
195
+ onMessage={onMessage}
196
+ onOpenWindow={onOpenWindowProp && onOpenWindow}
197
+ hasOnOpenWindowEvent={onOpenWindowProp !== undefined}
198
+ onShouldStartLoadWithRequest={onShouldStartLoadWithRequest}
199
+ onContentProcessDidTerminate={onContentProcessDidTerminate}
200
+ injectedJavaScript={injectedJavaScript}
201
+ injectedJavaScriptBeforeContentLoaded={injectedJavaScriptBeforeContentLoaded}
202
+ injectedJavaScriptForMainFrameOnly={injectedJavaScriptForMainFrameOnly}
203
+ injectedJavaScriptBeforeContentLoadedForMainFrameOnly={injectedJavaScriptBeforeContentLoadedForMainFrameOnly}
204
+ dataDetectorTypes={!dataDetectorTypes || Array.isArray(dataDetectorTypes) ? dataDetectorTypes : [dataDetectorTypes]}
205
+ allowsAirPlayForMediaPlayback={allowsAirPlayForMediaPlayback}
206
+ allowsInlineMediaPlayback={allowsInlineMediaPlayback}
207
+ incognito={incognito}
208
+ mediaPlaybackRequiresUserAction={mediaPlaybackRequiresUserAction}
209
+ newSource={newSource}
210
+ style={webViewStyles}
211
+ hasOnFileDownload={!!onFileDownload}
212
+ ref={webViewRef}
213
+ // @ts-expect-error old arch only
214
+ source={sourceResolved}
215
+ {...nativeConfig?.props}
216
+ />
217
+ );
218
+
219
+ return (
220
+ <View style={webViewContainerStyle}>
221
+ {webView}
222
+ {otherView}
223
+ </View>
224
+ );})
225
+
226
+ // no native implementation for iOS, depends only on permissions
227
+ const isFileUploadSupported: () => Promise<boolean>
228
+ = async () => true;
229
+
230
+ const WebView = Object.assign(WebViewComponent, {isFileUploadSupported});
231
+
232
+ export default WebView;
@@ -0,0 +1,177 @@
1
+ import React, { forwardRef, useCallback, useImperativeHandle, useRef } from 'react';
2
+ import {
3
+ Image,
4
+ View,
5
+ ImageSourcePropType,
6
+ } from 'react-native';
7
+ import invariant from 'invariant';
8
+
9
+ import codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands';
10
+ import BPCWebView from "./WebViewNativeComponent.macos";
11
+ import BPCWebViewModule from "./NativeBPCWebView";
12
+ import {
13
+ defaultOriginWhitelist,
14
+ defaultRenderError,
15
+ defaultRenderLoading,
16
+ useWebViewLogic,
17
+ } from './WebViewShared';
18
+ import {
19
+ MacOSWebViewProps,
20
+ NativeWebViewMacOS,
21
+ } from './WebViewTypes';
22
+
23
+ import styles from './WebView.styles';
24
+
25
+ const Commands = codegenNativeCommands({
26
+ supportedCommands: ['goBack', 'goForward', 'reload', 'stopLoading', 'injectJavaScript', 'requestFocus', 'postMessage', 'loadUrl'],
27
+ });
28
+
29
+ const { resolveAssetSource } = Image;
30
+
31
+ const useWarnIfChanges = <T extends unknown>(value: T, name: string) => {
32
+ const ref = useRef(value);
33
+ if (ref.current !== value) {
34
+ console.warn(`Changes to property ${name} do nothing after the initial render.`);
35
+ ref.current = value;
36
+ }
37
+ }
38
+
39
+ const WebViewComponent = forwardRef<{}, MacOSWebViewProps>(({
40
+ javaScriptEnabled = true,
41
+ cacheEnabled = true,
42
+ originWhitelist = defaultOriginWhitelist,
43
+ useSharedProcessPool= true,
44
+ injectedJavaScript,
45
+ injectedJavaScriptBeforeContentLoaded,
46
+ startInLoadingState,
47
+ onNavigationStateChange,
48
+ onLoadStart,
49
+ onError,
50
+ onLoad,
51
+ onLoadEnd,
52
+ onLoadProgress,
53
+ onHttpError: onHttpErrorProp,
54
+ onMessage: onMessageProp,
55
+ renderLoading,
56
+ renderError,
57
+ style,
58
+ containerStyle,
59
+ source,
60
+ nativeConfig,
61
+ allowsInlineMediaPlayback,
62
+ allowsAirPlayForMediaPlayback,
63
+ mediaPlaybackRequiresUserAction,
64
+ incognito,
65
+ onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp,
66
+ ...otherProps
67
+ }, ref) => {
68
+ const webViewRef = useRef<NativeWebViewMacOS | null>(null);
69
+
70
+ const onShouldStartLoadWithRequestCallback = useCallback((
71
+ shouldStart: boolean,
72
+ _url: string,
73
+ lockIdentifier = 0,
74
+ ) => {
75
+ BPCWebViewModule.shouldStartLoadWithLockIdentifier(!!shouldStart, lockIdentifier);
76
+ }, []);
77
+
78
+ const { onLoadingStart, onShouldStartLoadWithRequest, onMessage, viewState, setViewState, lastErrorEvent, onHttpError, onLoadingError, onLoadingFinish, onLoadingProgress, onContentProcessDidTerminate } = useWebViewLogic({
79
+ onNavigationStateChange,
80
+ onLoad,
81
+ onError,
82
+ onHttpErrorProp,
83
+ onLoadEnd,
84
+ onLoadProgress,
85
+ onLoadStart,
86
+ onMessageProp,
87
+ startInLoadingState,
88
+ originWhitelist,
89
+ onShouldStartLoadWithRequestProp,
90
+ onShouldStartLoadWithRequestCallback,
91
+ });
92
+
93
+ useImperativeHandle(ref, () => ({
94
+ goForward: () => Commands.goForward(webViewRef.current),
95
+ goBack: () => Commands.goBack(webViewRef.current),
96
+ reload: () => {
97
+ setViewState(
98
+ 'LOADING',
99
+ ); Commands.reload(webViewRef.current)
100
+ },
101
+ stopLoading: () => Commands.stopLoading(webViewRef.current),
102
+ postMessage: (data: string) => Commands.postMessage(webViewRef.current, data),
103
+ injectJavaScript: (data: string) => Commands.injectJavaScript(webViewRef.current, data),
104
+ requestFocus: () => Commands.requestFocus(webViewRef.current),
105
+ }), [setViewState, webViewRef]);
106
+
107
+
108
+ useWarnIfChanges(allowsInlineMediaPlayback, 'allowsInlineMediaPlayback');
109
+ useWarnIfChanges(allowsAirPlayForMediaPlayback, 'allowsAirPlayForMediaPlayback');
110
+ useWarnIfChanges(incognito, 'incognito');
111
+ useWarnIfChanges(mediaPlaybackRequiresUserAction, 'mediaPlaybackRequiresUserAction');
112
+
113
+ let otherView = null;
114
+ if (viewState === 'LOADING') {
115
+ otherView = (renderLoading || defaultRenderLoading)();
116
+ } else if (viewState === 'ERROR') {
117
+ invariant(lastErrorEvent != null, 'lastErrorEvent expected to be non-null');
118
+ otherView = (renderError || defaultRenderError)(
119
+ lastErrorEvent.domain,
120
+ lastErrorEvent.code,
121
+ lastErrorEvent.description,
122
+ );
123
+ } else if (viewState !== 'IDLE') {
124
+ console.error(`BPCWebView invalid state encountered: ${viewState}`);
125
+ }
126
+
127
+ const webViewStyles = [styles.container, styles.webView, style];
128
+ const webViewContainerStyle = [styles.container, containerStyle];
129
+
130
+ const NativeWebView
131
+ = (nativeConfig?.component as typeof NativeWebViewMacOS | undefined)
132
+ || BPCWebView;
133
+
134
+ const webView = (
135
+ <NativeWebView
136
+ key="webViewKey"
137
+ {...otherProps}
138
+ javaScriptEnabled={javaScriptEnabled}
139
+ cacheEnabled={cacheEnabled}
140
+ useSharedProcessPool={useSharedProcessPool}
141
+ messagingEnabled={typeof onMessageProp === 'function'}
142
+ onLoadingError={onLoadingError}
143
+ onLoadingFinish={onLoadingFinish}
144
+ onLoadingProgress={onLoadingProgress}
145
+ onLoadingStart={onLoadingStart}
146
+ onHttpError={onHttpError}
147
+ onMessage={onMessage}
148
+ onShouldStartLoadWithRequest={onShouldStartLoadWithRequest}
149
+ onContentProcessDidTerminate={onContentProcessDidTerminate}
150
+ injectedJavaScript={injectedJavaScript}
151
+ injectedJavaScriptBeforeContentLoaded={injectedJavaScriptBeforeContentLoaded}
152
+ allowsAirPlayForMediaPlayback={allowsAirPlayForMediaPlayback}
153
+ allowsInlineMediaPlayback={allowsInlineMediaPlayback}
154
+ incognito={incognito}
155
+ mediaPlaybackRequiresUserAction={mediaPlaybackRequiresUserAction}
156
+ ref={webViewRef}
157
+ // TODO: find a better way to type this.
158
+ source={resolveAssetSource(source as ImageSourcePropType)}
159
+ style={webViewStyles}
160
+ {...nativeConfig?.props}
161
+ />
162
+ );
163
+
164
+ return (
165
+ <View style={webViewContainerStyle}>
166
+ {webView}
167
+ {otherView}
168
+ </View>
169
+ );})
170
+
171
+ // no native implementation for macOS, depends only on permissions
172
+ const isFileUploadSupported: () => Promise<boolean>
173
+ = async () => true;
174
+
175
+ const WebView = Object.assign(WebViewComponent, {isFileUploadSupported});
176
+
177
+ export default WebView;
@@ -0,0 +1,44 @@
1
+ import { StyleSheet, ViewStyle, TextStyle } from 'react-native';
2
+
3
+ interface Styles {
4
+ container: ViewStyle;
5
+ errorText: TextStyle;
6
+ errorTextTitle: TextStyle;
7
+ loadingOrErrorView: ViewStyle;
8
+ webView: ViewStyle;
9
+ loadingProgressBar: ViewStyle;
10
+ }
11
+
12
+ const styles = StyleSheet.create<Styles>({
13
+ container: {
14
+ flex: 1,
15
+ overflow: 'hidden',
16
+ },
17
+ loadingOrErrorView: {
18
+ position: 'absolute',
19
+ flex: 1,
20
+ justifyContent: 'center',
21
+ alignItems: 'center',
22
+ height: '100%',
23
+ width: '100%',
24
+ backgroundColor: 'white'
25
+ },
26
+ loadingProgressBar: {
27
+ height: 20,
28
+ },
29
+ errorText: {
30
+ fontSize: 14,
31
+ textAlign: 'center',
32
+ marginBottom: 2,
33
+ },
34
+ errorTextTitle: {
35
+ fontSize: 15,
36
+ fontWeight: '500',
37
+ marginBottom: 10,
38
+ },
39
+ webView: {
40
+ backgroundColor: '#ffffff',
41
+ },
42
+ });
43
+
44
+ export default styles;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { Text, View } from 'react-native';
3
+ import { IOSWebViewProps, AndroidWebViewProps, WindowsWebViewProps } from './WebViewTypes';
4
+
5
+ export type WebViewProps = IOSWebViewProps & AndroidWebViewProps & WindowsWebViewProps;
6
+
7
+ // This "dummy" WebView is to render something for unsupported platforms,
8
+ // like for example Expo SDK "web" platform.
9
+ const WebView: React.FunctionComponent<WebViewProps> = () => (
10
+ <View style={{ alignSelf: 'flex-start' }}>
11
+ <Text style={{ color: 'red' }}>
12
+ React Native WebView does not support this platform.
13
+ </Text>
14
+ </View>
15
+ );
16
+
17
+ export { WebView };
18
+ export default WebView;