Skip to content

Commit 4530eba

Browse files
fix(flutterwavecheckout): handle redirect before load
2 parents 34dfd94 + c4c3688 commit 4530eba

File tree

3 files changed

+9
-7
lines changed

3 files changed

+9
-7
lines changed

dist/FlutterwaveCheckout.d.ts.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/FlutterwaveCheckout.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,15 @@ var FlutterwaveCheckout = function FlutterwaveCheckout(props) {
7474
var rx = /\/flutterwave\.com\/rn-redirect/;
7575
// Don't end payment if not redirected back
7676
if (!rx.test(ev.url)) {
77-
return;
77+
return true;
7878
}
7979
// dismiss modal
8080
animateOut().then(function () {
8181
if (onRedirect) {
8282
onRedirect(getRedirectParams(ev.url));
8383
}
8484
});
85+
return false;
8586
}, [onRedirect]);
8687
var doAnimate = React.useCallback(function () {
8788
if (visible === show) {
@@ -113,7 +114,7 @@ var FlutterwaveCheckout = function FlutterwaveCheckout(props) {
113114
opacity: opacity
114115
}
115116
]} testID='flw-checkout-dialog'>
116-
<WebView ref={webviewRef} source={{ uri: link || '' }} style={styles.webview} startInLoadingState={true} scalesPageToFit={true} javaScriptEnabled={true} onNavigationStateChange={handleNavigationStateChange} renderError={function () { return <FlutterwaveCheckoutError hasLink={!!link} onTryAgain={handleReload}/>; }} renderLoading={function () { return <FlutterwaveCheckoutLoader />; }}/>
117+
<WebView ref={webviewRef} source={{ uri: link || '' }} style={styles.webview} startInLoadingState={true} scalesPageToFit={true} javaScriptEnabled={true} onShouldStartLoadWithRequest={handleNavigationStateChange} renderError={function () { return <FlutterwaveCheckoutError hasLink={!!link} onTryAgain={handleReload}/>; }} renderLoading={function () { return <FlutterwaveCheckoutLoader />; }}/>
117118
</Animated.View>
118119
</Modal>);
119120
};

src/FlutterwaveCheckout.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ const FlutterwaveCheckout: React.FC<FlutterwaveCheckoutProps> = function Flutter
7171
}).start();
7272
}, []);
7373

74-
const animateOut = React.useCallback(() => {
74+
const animateOut = React.useCallback((): Promise<void> => {
7575
return new Promise(resolve => {
7676
Animated.timing(animation.current, {
7777
toValue: 0,
@@ -106,19 +106,20 @@ const FlutterwaveCheckout: React.FC<FlutterwaveCheckoutProps> = function Flutter
106106
animateOut().then(onAbort);
107107
}, [onAbort, animateOut]);
108108

109-
const handleNavigationStateChange = React.useCallback((ev: WebViewNavigation) => {
109+
const handleNavigationStateChange = React.useCallback((ev: WebViewNavigation): boolean => {
110110
// cregex to check if redirect has occured on completion/cancel
111111
const rx = /\/flutterwave\.com\/rn-redirect/;
112112
// Don't end payment if not redirected back
113113
if (!rx.test(ev.url)) {
114-
return
114+
return true;
115115
}
116116
// dismiss modal
117117
animateOut().then(() => {
118118
if (onRedirect) {
119119
onRedirect(getRedirectParams(ev.url))
120120
}
121121
});
122+
return false;
122123
}, [onRedirect]);
123124

124125
const doAnimate = React.useCallback(() => {
@@ -169,7 +170,7 @@ const FlutterwaveCheckout: React.FC<FlutterwaveCheckoutProps> = function Flutter
169170
startInLoadingState={true}
170171
scalesPageToFit={true}
171172
javaScriptEnabled={true}
172-
onNavigationStateChange={handleNavigationStateChange}
173+
onShouldStartLoadWithRequest={handleNavigationStateChange}
173174
renderError={() => <FlutterwaveCheckoutError hasLink={!!link} onTryAgain={handleReload} />}
174175
renderLoading={() => <FlutterwaveCheckoutLoader />}
175176
/>

0 commit comments

Comments
 (0)