@@ -4,6 +4,26 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
5
5
var React = require ( 'react' ) ;
6
6
7
+ function _interopNamespace ( e ) {
8
+ if ( e && e . __esModule ) return e ;
9
+ var n = Object . create ( null ) ;
10
+ if ( e ) {
11
+ Object . keys ( e ) . forEach ( function ( k ) {
12
+ if ( k !== 'default' ) {
13
+ var d = Object . getOwnPropertyDescriptor ( e , k ) ;
14
+ Object . defineProperty ( n , k , d . get ? d : {
15
+ enumerable : true ,
16
+ get : function ( ) { return e [ k ] ; }
17
+ } ) ;
18
+ }
19
+ } ) ;
20
+ }
21
+ n [ "default" ] = e ;
22
+ return Object . freeze ( n ) ;
23
+ }
24
+
25
+ var React__namespace = /*#__PURE__*/ _interopNamespace ( React ) ;
26
+
7
27
/**
8
28
* Check out {@link https://developer.flutterwave.com/docs/flutterwave-standard} for more information.
9
29
*/
@@ -12,7 +32,7 @@ var types = /*#__PURE__*/Object.freeze({
12
32
__proto__ : null
13
33
} ) ;
14
34
15
- /*! *****************************************************************************
35
+ /******************************************************************************
16
36
Copyright (c) Microsoft Corporation.
17
37
18
38
Permission to use, copy, modify, and/or distribute this software for any
@@ -66,7 +86,7 @@ function __generator(thisArg, body) {
66
86
function verb ( n ) { return function ( v ) { return step ( [ n , v ] ) ; } ; }
67
87
function step ( op ) {
68
88
if ( f ) throw new TypeError ( "Generator is already executing." ) ;
69
- while ( _ ) try {
89
+ while ( g && ( g = 0 , op [ 0 ] && ( _ = 0 ) ) , _ ) try {
70
90
if ( f = 1 , y && ( t = op [ 0 ] & 2 ? y [ "return" ] : op [ 0 ] ? y [ "throw" ] || ( ( t = y [ "return" ] ) && t . call ( y ) , 0 ) : y . next ) && ! ( t = t . call ( y , op [ 1 ] ) ) . done ) return t ;
71
91
if ( y = 0 , t ) op = [ op [ 0 ] & 2 , t . value ] ;
72
92
switch ( op [ 0 ] ) {
@@ -89,47 +109,63 @@ function __generator(thisArg, body) {
89
109
}
90
110
91
111
var loadedScripts = { } ;
92
- var src = 'https://checkout.flutterwave.com/v3.js' ;
112
+ var srcUrl = 'https://checkout.flutterwave.com/v3.js' ;
113
+ var maxAttempts = 3 ; // Set the maximum number of attempts
114
+ var attempt = 1 ; // Track the attempt count
93
115
function useFWScript ( ) {
94
- var _a = React . useState ( {
116
+ var _a = React__namespace . useState ( {
95
117
loaded : false ,
96
118
error : false ,
97
119
} ) , state = _a [ 0 ] , setState = _a [ 1 ] ;
98
- React . useEffect ( function ( ) {
99
- if ( loadedScripts . hasOwnProperty ( src ) ) {
120
+ React__namespace . useEffect ( function ( ) {
121
+ if ( loadedScripts . hasOwnProperty ( ' src' ) ) {
100
122
setState ( {
101
123
loaded : true ,
102
124
error : false ,
103
125
} ) ;
104
126
}
105
127
else {
106
- loadedScripts . src = src ;
107
- var script_1 = document . createElement ( 'script' ) ;
108
- script_1 . src = src ;
109
- script_1 . async = true ;
110
- var onScriptLoad_1 = function ( ) {
111
- setState ( {
112
- loaded : true ,
113
- error : false ,
114
- } ) ;
115
- } ;
116
- var onScriptError_1 = function ( ) {
117
- delete loadedScripts . src ;
118
- setState ( {
119
- loaded : true ,
120
- error : true ,
121
- } ) ;
122
- } ;
123
- script_1 . addEventListener ( 'load' , onScriptLoad_1 ) ;
124
- script_1 . addEventListener ( 'complete' , onScriptLoad_1 ) ;
125
- script_1 . addEventListener ( 'error' , onScriptError_1 ) ;
126
- document . body . appendChild ( script_1 ) ;
128
+ downloadScript ( ) ;
127
129
return function ( ) {
128
- script_1 . removeEventListener ( 'load' , onScriptLoad_1 ) ;
129
- script_1 . removeEventListener ( 'error' , onScriptError_1 ) ;
130
+ var scripts = document . querySelectorAll ( 'script' ) ;
131
+ scripts . forEach ( function ( script ) {
132
+ if ( script . src === srcUrl ) {
133
+ script . removeEventListener ( 'load' , onScriptLoad ) ;
134
+ script . removeEventListener ( 'error' , onScriptError ) ;
135
+ }
136
+ } ) ;
130
137
} ;
131
138
}
132
139
} , [ ] ) ;
140
+ var downloadScript = React__namespace . useCallback ( function ( ) {
141
+ loadedScripts . src = srcUrl ;
142
+ var script = document . createElement ( 'script' ) ;
143
+ script . src = srcUrl ;
144
+ script . async = true ;
145
+ script . addEventListener ( 'load' , onScriptLoad ) ;
146
+ script . addEventListener ( 'error' , onScriptError ) ;
147
+ document . body . appendChild ( script ) ;
148
+ } , [ ] ) ;
149
+ var onScriptLoad = React__namespace . useCallback ( function ( ) {
150
+ setState ( {
151
+ loaded : true ,
152
+ error : false ,
153
+ } ) ;
154
+ } , [ ] ) ;
155
+ var onScriptError = React__namespace . useCallback ( function ( ) {
156
+ delete loadedScripts . src ;
157
+ console . log ( "Flutterwave script download failed. Attempt: " + attempt ) ;
158
+ if ( attempt < maxAttempts ) {
159
+ ++ attempt ;
160
+ setTimeout ( function ( ) { return downloadScript ( ) ; } , ( attempt * 1000 ) ) ; // Progressively increase the delay before retry
161
+ }
162
+ else {
163
+ setState ( {
164
+ loaded : true ,
165
+ error : true ,
166
+ } ) ;
167
+ }
168
+ } , [ ] ) ;
133
169
return [ state . loaded , state . error ] ;
134
170
}
135
171
@@ -140,7 +176,7 @@ function useFWScript() {
140
176
*/
141
177
function useFlutterwave ( flutterWaveConfig ) {
142
178
var _a = useFWScript ( ) , loaded = _a [ 0 ] , error = _a [ 1 ] ;
143
- React . useEffect ( function ( ) {
179
+ React__namespace . useEffect ( function ( ) {
144
180
if ( error )
145
181
throw new Error ( 'Unable to load flutterwave payment modal' ) ;
146
182
} , [ error ] ) ;
@@ -213,7 +249,7 @@ function useFlutterwave(flutterWaveConfig) {
213
249
var FlutterWaveButton = function ( _a ) {
214
250
var text = _a . text , className = _a . className , children = _a . children , callback = _a . callback , onClose = _a . onClose , disabled = _a . disabled , config = __rest ( _a , [ "text" , "className" , "children" , "callback" , "onClose" , "disabled" ] ) ;
215
251
var handleFlutterwavePayment = useFlutterwave ( config ) ;
216
- return ( React . createElement ( "button" , { disabled : disabled , className : className , onClick : function ( ) { return handleFlutterwavePayment ( { callback : callback , onClose : onClose } ) ; } } , text || children ) ) ;
252
+ return ( React__namespace . createElement ( "button" , { disabled : disabled , className : className , onClick : function ( ) { return handleFlutterwavePayment ( { callback : callback , onClose : onClose } ) ; } } , text || children ) ) ;
217
253
} ;
218
254
219
255
/**
0 commit comments