import React, {useEffect, useState} from 'react' import { View, Text, ActivityIndicator } from 'react-native' import {UniversalProps} 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 Universal({ show, loaderColor = 'green', universalSecretKey, email, amount, callbackUrl, channels, otherObjectFromOfficialDoc = {}, onCancel= ()=>{}, onShow, onCallback, paymentGatewayUrlRequestUrlUrl, tRefObject, currency, headerContent, }: UniversalProps): 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}`, ...tRefObject, redirect_url: callbackUrl, channels, currency, ...otherObjectFromOfficialDoc } const _res: any = await axios.post(paymentGatewayUrlRequestUrlUrl, body, { headers: headerContent, }) const __url = _res.data.data.link || _res.data.data.redirect_url || _res.data.data.payment_url; console.log("auth_url: "+__url) _sethasLoaded(true) setUrl('http://cancel') setUrl(__url) 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" }) // onCallback onShow(false); onCancel(); // show = false _setShow(false) } }} scalesPageToFit style={{ flex: 1, }} javaScriptEnabled={true} onLoadEnd={()=> _setIsLoading(false)} source={{ uri: url }} /> ) }