import React, {useEffect, useState} from 'react'
import { View, Text, ActivityIndicator } from 'react-native'
import {FlutterProps} from '../constant/type'
import WebView from 'react-native-webview'
import Popup, {styles} from '../wrapper/popup'
import axios from 'axios'
const tnxRef = (new Date()).getTime();
export default function Flutterwave({
show,
loaderColor = 'green',
flutterwaveSecretKey,
email,
amount,
callbackUrl,
channels,
otherObjectFromOfficialDoc = {},
onCancel= ()=>{},
onShow,
onCallback,
currency
}: FlutterProps): JSX.Element {
const [_show, _setShow] = useState(true)
const [_isLoading, _setIsLoading] = useState(true)
const [_hasLoaded, _sethasLoaded] = useState(false)
const [url, setUrl] = useState('')
useEffect(()=>{
// get url
if(!show){return }
(async()=>{
try{
const body = {
email,
customer: {
email,
name: email
},
amount: `${amount}`,
tx_ref: tnxRef,
redirect_url: callbackUrl,
channels,
currency,
...otherObjectFromOfficialDoc
}
const _res: any = await axios.post('https://api.flutterwave.com/v3/payments', body, {
headers: {
"Authorization" : "Bearer "+flutterwaveSecretKey,
'Content-Type': "application/json"
},
})
console.log("auth_url: "+_res.data.data.link)
_sethasLoaded(true)
setUrl('http://cancel')
setUrl(_res.data.data.link)
if( (_res.data.data.link) == undefined ){
_setShow(false)
onShow(false);
// show = false
}
}catch(e){
console.log(e)
console.log(e.response.data)
_setShow(false)
onShow(false);
// show = false
// console.log(e.response)
}
})()
}, [show])
useEffect(()=>{
_setShow(show)
// show = show;
}, [show])
if(!show){
return (<>>)
}
// if(!(_show)){
// return (<>>)
// }
if((!_hasLoaded)){
return (
{
(_isLoading && (
))
}
)
}
return (
{
(_isLoading && (
))
}
{
console.log(navState)
if((navState.url == 'about:blank') && (navState.canGoForward == true)){
onShow(false);
onCancel();
// show = false
_setShow(false)
}
if(((navState.url).includes(callbackUrl)) ){
// extract data
let str = (navState.url).replace(callbackUrl, '');
str = str.replace("?tx_ref=", '');
onCallback({
tnxref: `${tnxRef}`,
instruction: "payment recieved and already validated"
})
// onCallback
onShow(false);
onCancel();
// show = false
_setShow(false)
}
}} scalesPageToFit style={{ flex: 1, }} javaScriptEnabled={true} onLoadEnd={()=> _setIsLoading(false)} source={{ uri: url }} />
)
}