From 37d85373aba928eb0bc963d689dd793acd06a67d Mon Sep 17 00:00:00 2001 From: Gustavo Emanuel Farias Rosa Date: Tue, 29 Mar 2022 16:58:08 -0300 Subject: [PATCH] handling url error --- example/src/App.tsx | 47 +++++++++++++++++++++++++++++++++++++++----- example/src/types.ts | 12 +++++++++++ src/index.tsx | 12 +++++++++++ 3 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 example/src/types.ts diff --git a/example/src/App.tsx b/example/src/App.tsx index e55d1c3..89c85fb 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -1,15 +1,46 @@ import * as React from 'react'; -import { StyleSheet, View } from 'react-native'; +import { Alert, StyleSheet, Text, View } from 'react-native'; import { BigbluebuttonMobile } from 'bigbluebutton-mobile-sdk'; +import type { INativeEvent } from './types'; export default function App() { + const [loadComponent, setLoadComponent] = React.useState(true); + + const handleOnError = React.useCallback((content: any) => { + const nativeEvent = content.nativeEvent as INativeEvent; + console.log( + `Error loading URL ${nativeEvent.url}: ${nativeEvent.description}` + ); + setLoadComponent(false); + Alert.alert('Error loading URL', undefined, [ + { + text: 'Cancel', + onPress: () => console.log('Cancel Pressed'), + style: 'cancel', + }, + { + text: 'Retry', + onPress: () => { + console.log('Retry Pressed'); + setLoadComponent(true); + }, + }, + ]); + }, []); + return ( - + {loadComponent ? ( + handleOnError(content)} + onSuccess={() => console.log('URL Valid')} + /> + ) : ( + Invalid URL + )} ); } @@ -23,4 +54,10 @@ const styles = StyleSheet.create({ marginTop: 48, flex: 1, }, + text: { + marginTop: 48, + flex: 1, + justifyContent: 'center', + alignContent: 'center', + }, }); diff --git a/example/src/types.ts b/example/src/types.ts new file mode 100644 index 0000000..a44b9af --- /dev/null +++ b/example/src/types.ts @@ -0,0 +1,12 @@ +export type INativeEvent = { + canGoBack: Boolean; + canGoForward: Boolean; + code: Number; + description: String; + didFailProvisionalNavigation: Boolean; + domain: String; + loading: Boolean; + target: Number; + title: String; + url: String; +}; diff --git a/src/index.tsx b/src/index.tsx index ffc445c..5318eda 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -9,6 +9,8 @@ import * as onScreenShareSignalingStateChange from './events/onScreenShareSignal type BigbluebuttonMobileSdkProps = { url: string; style: ViewStyle; + onError?: any; + onSuccess?: any; }; const renderPlatformSpecificComponents = () => @@ -20,6 +22,8 @@ const renderPlatformSpecificComponents = () => export const BigbluebuttonMobile = ({ url, style, + onError, + onSuccess, }: BigbluebuttonMobileSdkProps) => { const webViewRef = useRef(null); @@ -38,6 +42,14 @@ export const BigbluebuttonMobile = ({ style={{ ...style }} onMessage={(msg) => handleWebviewMessage(webViewRef, msg)} applicationNameForUserAgent="BBBMobile" + onLoadEnd={(content: any) => { + /*in case of success, the property code is not defined*/ + if (typeof content.nativeEvent.code !== 'undefined') { + onError(content); + } else { + onSuccess(content); + } + }} /> }