/** * Sample React Native App * https://github.com/facebook/react-native * * @format * @flow */ import React, { Component } from 'react'; import { Platform, StyleSheet, Text, View, ScrollView, Alert, FlatList, BackHandler, ProgressBarAndroid, Picker, StatusBar } from 'react-native'; import ActionButton from 'react-native-action-button'; import MapView from 'react-native-maps'; import { responsiveHeight, responsiveWidth, responsiveFontSize } from 'react-native-responsive-dimensions'; import CardView from 'react-native-cardview'; import { Sae } from 'react-native-textinput-effects'; import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome'; import Button from 'apsl-react-native-button'; import { primary, primaryDark, accent } from '../../utils/theme.json'; import * as Animatable from 'react-native-animatable'; import { isNumber } from 'util'; import { readUser } from './../../webservice/AuthApi' import { sendDemande } from './../../webservice/HistoryRequestApi' import { sendDemandeSpecificque } from "../../webservice/HistoryRequestApi"; import { getAgentNetworksList } from "../../webservice/NetworkApi"; import { HelperText, TextInput, TextInputMask } from 'react-native-paper' import I18n from "react-native-i18n" type Props = {} const route = require('../../route.json') import { Card, CardTitle, CardContent, CardAction, CardButton, CardImage, Title } from 'react-native-material-cards' export default class HistoryRequester extends Component { static navigatorStyle = { navBarHidden: true, }; static navigationOptions = { drawerLabel: () => null, headerTitle: I18n.t('ASK_CREDIT'), title: I18n.t('ASK_CREDIT') }; constructor(props) { super(props); this.state = this.initState(); this.updateState(); } componentDidDisappear() { BackHandler.removeEventListener('hardwareBackPress', this.backPressed); this.props.navigation.state.params.onGoBack(); } componentDidAppear() { BackHandler.addEventListener('hardwareBackPress', this.backPressed); } componentWillUnmount() { this.props.navigation.state.params.onGoBack(); } handleViewRef = ref => this.numberView = ref; handleMontantRef = ref => this.montantView = ref; initState() { return { phone: null, montant: undefined, isSending: false, isDisabled: true, networks: [], user: null, visibleError: false, currentNetwork: { nt: 1 }, errorAnimation: "", } } backPressed = () => { this.props.navigation.state.params.onGoBack(); } onUserCancel() { console.log(this.props); this.props.navigation.state.params.onGoBack(); this.props.navigation.goBack(); } onUserSend() { var validMontant = true if (!isNumber(this.state.montant) || this.state.montant > 1000000) { validMontant = false } this.setState({ visibleError: !validMontant }) if (!validMontant) { this.montantView.shake(800) setTimeout(() => { this.setState({ visibleError: false }) }, 3000) } else { this.setState({ isSending: true }) let title = "" let message = "" sendDemandeSpecificque(this.state.montant, this.state.user.phoneTransaction, this.state.user.code_membre).then((data) => { if (data.success !== undefined) { if (data.success === 1) { title = I18n.t('DEMAND_SEND'), message = I18n.t('DEMAND_SEND_SUCCESFUL') } else { title = "Erreur survenu lors de l'envoie ", message = "Une erreur est survenu lors de l'envoie de la demande" } } else { title = "Erreur survenu lors de l'envoie ", message = "Une erreur est survenu lors de l'envoie de la demande" } Alert.alert(title, message, [{ text: 'Ok', onPress: () => { this.setState({ montant: "" }) } }]) setTimeout(() => { this.setState({ isSending: false }) }, 800) }).catch((error) => { title = "Erreur survenu lors de l'envoie ", message = "Une erreur est survenu lors de l'envoie de la demande" Alert.alert(title, message, [{ text: 'Ok' }]) }) } } render() { const { user } = this.state return ( {user ? ((user.category === "geolocated") ? this.multiNetwork() : this.simpleAgent()) : } ) } simpleAgent() { let montant = 0 if (true) { return ( { this.refInp = ref }} mode={"outlined"} inputStyle={input.style} onChangeText={(text) => { try { let neb = parseInt(text) this.setState({ montant: neb, isDisabled: isNaN(neb) }) } catch (e) { } }} value={this.state.montant} /> {I18n.t('INVALID_MONTANT')} { this.onUserCancel() }} title={I18n.t('CANCEL')} color="crimson" /> { this.onUserSend() }} title={I18n.t('SEND')} color="steelblue" /> ) } else return ( Demande de credit { this.refInp = ref }} onChangeText={(text) => { if (text.length > 0) { try { montant = parseFloat(text); this.setState({ isDisabled: montant > 0, montant: montant }) } catch (e) { } } }} style={input.selfitem} labelStyle={input.label} autoCapitalize={'none'} autoCorrect={false} /> ) } multiNetwork() { if (true) { return ( this.setState({ currentNetwork: itemValue }) }> {this.state.networks.map((item, index) => { return () })} { this.refInp = ref }} mode={"outlined"} inputStyle={input.style} onChangeText={(text) => { try { let neb = parseInt(text) this.setState({ montant: neb, isDisabled: isNaN(neb) }) } catch (e) { } }} value={this.state.montant} /> {I18n.t('INVALID_MONTANT')} { this.onUserCancel() }} title={I18n.t('CANCEL')} color="crimson" /> { const { currentNetwork, montant } = this.state if (currentNetwork !== undefined && currentNetwork.nt === undefined) { this.onNetworkSend(currentNetwork.phone, currentNetwork.code_membre, montant) } }} title={I18n.t('SEND')} color="steelblue" /> ) } else return ( {I18n.t('ASK_CREDIT')} this.setState({ currentNetwork: itemValue }) }> {this.state.networks.map((item, index) => { return () })} { this.refInp = ref }} inputStyle={input.style} keyboardType={"numeric"} onChangeText={(text) => { try { let neb = parseInt(text) this.setState({ montant: neb, isDisabled: isNaN(neb) }) } catch (e) { } }} style={input.selfitem} labelStyle={input.label} autoCapitalize={'none'} autoCorrect={false} /> ) } renderSingleNetwork(item) { const itm = item.item console.log(item) let refInp = null, refBtn = null let montant = 0 return ( {I18n.t('ASK_CREDIT')} {I18n.t("FOR_NUMB")} {itm.phone} ({itm.name}) { refInp = ref this.setState({ refIn: refInp }) }} inputStyle={input.style} value={this.state.montant} keyboardType={"numeric"} onChangeText={(text) => { if (text.length > 0) { try { montant = parseFloat(text); this.setStat({ montant: montant }) if (refBtn) { refBtn.setState({ isDisabled: montant > 0 }) refBtn.isDisabled = montant > 0 } } catch (e) { } } }} style={input.selfitem} labelStyle={input.label} autoCapitalize={'none'} autoCorrect={false} /> ) } onNetworkSend(phone, code_membre, text) { var validMontant = true let montant = parseFloat(text) if (montant === null || !isNumber(montant) || montant > 1000000) { validMontant = false } this.setState({ visibleError: !validMontant }) if (!validMontant) { this.montantView.shake(800) setTimeout(() => { this.setState({ visibleError: false }) }, 3000) } else { sendDemandeSpecificque(montant, phone, code_membre).then((data) => { var title = "" var message = "" if (data.success !== undefined) { if (data.success === 1) { title = I18n.t("DEMAND_SEND") message = I18n.t('DEMAND_SEND_SUCCESFUL') } else { title = "Erreur survenu lors de l'envoie " message = "Une erreur est survenu lors de l'envoie de la demande" } } else { title = "Erreur survenu lors de l'envoie " message = "Une erreur est survenu lors de l'envoie de la demande" } Alert.alert(title, message, [{ text: "Ok", onPress: () => { this.setState({ montant: "" }) } }]) }) } } async updateState() { let user = await readUser(); if (user.category === "geolocated") { let networks = await getAgentNetworksList(user.agentId); console.log(networks) if (networks.success === 1) { let net = [this.state.currentNetwork] networks.networks.forEach((item) => { net.push(item) }) this.setState({ networks: net }) } } this.setState({ user: user }) } } const input = StyleSheet.create({ selfitem: { width: responsiveWidth(70), alignSelf: 'center', marginBottom: 20, }, label: { color: primary }, style: { color: 'black' } }) const styles = StyleSheet.create({ title: { backgroundColor: primary, color: 'white', paddingLeft: 20, paddingTop: 10, fontWeight: 'bold', fontSize: responsiveFontSize(3), height: responsiveHeight(10), }, subtitle: { color: 'black', paddingLeft: 20, paddingTop: 10, marginBottom: responsiveHeight(3), fontWeight: 'bold', fontSize: responsiveFontSize(2), }, container: { flex: 1, backgroundColor: '#EEE', justifyContent: 'space-between', }, container2: { flex: 1, height: responsiveHeight(20), backgroundColor: '#EEE', }, btnContainer: { flexDirection: 'row', paddingRight: 5, paddingLeft: 5, paddingTop: 5, marginBottom: -2.5, }, button_1: { flex: 1, borderColor: 'transparent', }, button_2: { flex: 1, borderColor: 'transparent', backgroundColor: primary, borderRadius: 0, }, button_1_text: { color: primary, fontWeight: 'bold', }, button_2_text: { color: 'white', fontWeight: 'bold', }, cardInput: { marginLeft: 10, marginRight: 10, marginTop: responsiveHeight(5), width: responsiveWidth(98), alignSelf: 'center', justifyContent: 'space-between', height: responsiveHeight(40) }, cardInput2: { marginLeft: 10, marginRight: 10, marginTop: responsiveHeight(1), width: responsiveWidth(98), height: responsiveHeight(50), alignSelf: 'center', justifyContent: 'space-between', } });