/**
* 网页支付页面
* @邠心vbe on 2022/01/10
*/
import React, { Component } from 'react';
import { View, AppState, Linking, StyleSheet, Image } from 'react-native';
import * as Progress from 'react-native-progress';
import WebView from 'react-native-webview';
import TextView from '../../components/TextView';
import { PaymentDefault } from './PaymentConfig';
export default class PaymentWeb extends Component {
constructor(props) {
super(props);
this.state = {
isCallback: false,
progress: 0,
paymentInfo: {
url: '',
amount: 0,
type: ''
}
};
this.canBack = false;
this.stateListener = undefined;
}
componentDidMount() {
const param = this.props.route.params
console.log('PaymentWeb', param);
if (param.url) {
this.setState({
isCallback: true,
paymentInfo: param
}, () => this.init());
}
if (!PaymentDefault.enableInnerWebView) {
this.stateListener = AppState.addEventListener("change", state => {
if (state == 'active' && this.state.isCallback) {
//console.log("AppState", state);
this.completePayment();
}
});
}
/*this.props.navigation.addListener('beforeRemove', e => {
if (!this.canBack) {
if (this.state.isRepay) {
this.onReset();
e.preventDefault();
} else if (this.state.isReturn) {
this.canBack = true;
goBack();
setTimeout(() => {
goBack();
}, 100);
} else {
this.onClose();
e.preventDefault();
}
}
})*/
}
componentWillUnmount() {
if (this.stateListener) {
this.stateListener.remove();
}
}
init() {
if (!PaymentDefault.enableInnerWebView) {
setTimeout(() => {
Linking.openURL(this.state.paymentInfo.url)
}, 500);
}
}
completePayment() {
this.setState({
isCallback: false
}, () => {
setTimeout(() => {
goBack();
}, 500);
});
}
onPostMessage(data) {
console.log('WebviewMessage', data)
this.completePayment();
}
render() {
if (PaymentDefault.enableInnerWebView) {
return (
this.setState({ progress: nativeEvent.progress }) }
onLoadEnd={(e) => {
//console.log('webview-end', e)
this.setState({ progress: 0 })
}}
onMessage={e => this.onPostMessage(e.nativeEvent.data)}/>
);
} else {
return (
{ this.state.isCallback &&
{ isIOS
?
:
}
{$t("nav.loading")}
}
)
}
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: pageBackground
},
progress: {
top: 0,
left: 0,
zIndex: 10,
position: 'absolute'
},
center: {
flex: 1,
paddingBottom: 56,
alignItems: 'center',
justifyContent: 'center'
},
loadingText: {
fontSize: 12,
color: textSecondary
},
loadingIcon: {
width: 56,
height: 56,
overflow: 'hidden',
borderRadius: 56
},
loadingIconImage: {
width: 56,
height: 56,
transform: [{scale: 1.5}]
}
})