import React, {Component} from 'react' import {Alert, Platform, StyleSheet, Text, View} from 'react-native' import CardView from 'react-native-cardview' import Button from 'apsl-react-native-button' import {responsiveWidth} from 'react-native-responsive-dimensions' import Icons from 'react-native-vector-icons/Ionicons' import {readUser} from "../../webservice/AuthApi"; import isNil from 'lodash/isNil'; import {creditDemandResetReducer, treatCreditDemand} from '../../webservice/CreditTreatDemandApi'; import {creditCancelResetReducer, treatCancelDemand} from '../../webservice/CreditCancelDemandeApi'; import {getAgentNetworksList} from "../../webservice/NetworkApi"; import {connect} from 'react-redux'; import {bindActionCreators} from 'redux'; import Toast from 'react-native-root-toast'; import {Color} from '../../config/Color' import Dialog from "react-native-dialog"; import {FontWeight} from '../../config/typography' import I18n from "react-native-i18n"; import 'moment/locale/fr'; import 'moment/locale/es-us'; import 'moment/locale/en-au'; import 'moment/locale/en-ca'; import 'moment/locale/en-ie'; import 'moment/locale/en-il'; import 'moment/locale/en-nz'; let moment = require('moment-timezone'); const momentJS = require('moment'); let typesta = 0; var colorback = 'white' let theme = require('./../../utils/theme.json'); const route = require("./../../route.json"); class HistoryItemDetails extends Component { static navigatorStyle = { navBarBackgroundColor: theme.accentLight, statusBarColor: theme.accent, navBarTextColor: '#FFFFFF', navBarButtonColor: '#FFFFFF', }; static navigationOptions = ({navigation}) => { return { drawerLabel: () => null, title: isNil(navigation.getParam("item", null).item) ? "Transaction N°" + navigation.getParam("item", {id: "-"}).id : "Transaction N°" + navigation.getParam("item", {id: "-"}).item.id } }; constructor(props) { super(props); this.item = this.props.navigation.getParam("item", null); if (isNil(this.props.navigation.getParam("item", null).item)) { this.item = this.props.navigation.getParam("item", null); } else { this.item = this.props.navigation.getParam("item", null).item; } this.currentLocale = I18n.locale.includes("fr") ? "fr" : "en-gb"; moment.locale(this.currentLocale); let sta = '' if (this.item.status === '1') { typesta = 1 colorback = '#AEAEAE' sta = I18n.t('TREAT_DEMAND') } else if (this.item.status === '0') { colorback = 'green' typesta = 2 sta = I18n.t('ACCEPTER_DEMANDE') } else { colorback = '#AEAEAE' typesta = 2 sta = I18n.t('REFUSED') } this.state = { displayAmountModifyDialog: false, statut: sta, user: null, networks: [], loadingTreat: false, loadingCancel: false, triggerTreatmentClick: false, triggerCancelClick: false, color: colorback, montant: null, isBtnModifyAmountEnabled: false } readUser().then(async (user) => { let networks = [] networks = await getAgentNetworksList(user.agentId); this.setState({user: user, networks: networks.networks}) }); } isNormalInteger = (str) => { return (/[ `!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?~]/.test(str)) ? false : true; } isMontantValid = () => { const {montant} = this.state; if ((parseInt(montant) == 0 || montant < 0)) return false; else if (!this.isNormalInteger(montant)) return false; else if (parseInt(montant) > parseInt(this.item.montant)) return false; else return true; } displayToast = (message) => { Toast.show(message, { duration: Toast.durations.SHORT, position: Toast.positions.BOTTOM, backgroundColor: Color.primaryColor, shadow: true, animation: true, hideOnPress: true, delay: 0, onShow: () => { // calls on toast\`s appear animation start }, onShown: () => { // calls on toast\`s appear animation end. }, onHide: () => { // calls on toast\`s hide animation start. }, onHidden: () => { // calls on toast\`s hide animation end. } }); } onTreatDemand() { if (this.item !== "1") { this.props.creditDemandResetReducer(); this.props.treatCreditDemand(this.item.id); /* updateCreditDemand(this.item.phone, this.item.id).then((data) => { this.setState({ loadingTreat: false }) console.log(data); if (data.success === 1) { this.setState({ statut: I18n.t('TREAT_DEMAND'), color: "#AEAEAE" }) } else { console.log(data); } }) */ } } onCancelDemand = () => { if (this.item !== "1") { this.props.treatCancelDemand(this.item.id); } } renderPromptModifyAmountToSend = () => { return ( {I18n.t('MODIFY_AMOUNT')} {I18n.t('ENTER_NEW_AMOUNT_TO_SEND')} { this.setState({montant}, () => { if (this.isMontantValid(montant)) { this.setState({ isBtnModifyAmountEnabled: true }) } else this.setState({ isBtnModifyAmountEnabled: false }); console.log("this.isMontantValid().isValid", this.isMontantValid()); console.log("isBtnModifyAmountEnabled", this.state.isBtnModifyAmountEnabled); }); }}/> this.setState({displayAmountModifyDialog: false})}/> { this.props.creditDemandResetReducer(); this.props.treatCreditDemand(this.item.id, this.state.montant); }}/> ) } renderAlertErrorTreatOrCancelDemand = () => { const {errorTreatDemand, resultTreatDemand, resultCancelDemand, errorCancelDemand} = this.props; if (errorTreatDemand !== null) { if (typeof errorTreatDemand.data !== 'undefined') { if (errorTreatDemand.status === 426) { Alert.alert( I18n.t("ERROR_TREATMENT_DEMAND"), errorTreatDemand.data.error, [{ text: I18n.t('CANCEL_LABEL'), onPress: () => { }, style: 'cancel' }, { text: I18n.t("OK"), onPress: () => { setTimeout(() => { this.setState({ displayAmountModifyDialog: true }); }, 10); this.props.creditDemandResetReducer(); this.props.creditCancelResetReducer(); } }], {cancelable: false} ); } else { Alert.alert( I18n.t("ERROR_TREATMENT_DEMAND"), errorTreatDemand.data.error, [ { text: I18n.t("OK"), onPress: () => { this.props.creditDemandResetReducer(); this.props.creditCancelResetReducer(); } } ], {cancelable: false} ); } } } if (errorCancelDemand !== null) { if (typeof errorCancelDemand.data !== 'undefined') { Alert.alert( I18n.t("ERROR_TREATMENT_DEMAND"), errorCancelDemand.data.error, [ { text: I18n.t("OK"), onPress: () => { this.props.creditCancelResetReducer(); this.props.creditDemandResetReducer(); } } ], {cancelable: false} ) } } if (resultTreatDemand !== null) { console.log("resultTreatDemand", resultTreatDemand); if (resultTreatDemand.status === 200) { this.displayToast(resultTreatDemand.response); this.props.navigation.goBack(); if (!isNil(this.props.navigation.state.params.onGoBack)) this.props.navigation.state.params.onGoBack(); this.props.creditCancelResetReducer(); this.props.creditDemandResetReducer(); } } if (resultCancelDemand !== null) { console.log("resultCancelDemand", resultCancelDemand); if (resultCancelDemand.status === 200) { this.displayToast(resultCancelDemand.response); this.props.navigation.goBack(); if (!isNil(this.props.navigation.state.params.onGoBack)) this.props.navigation.state.params.onGoBack(); this.props.creditCancelResetReducer(); this.props.creditDemandResetReducer(); } } } renderBtn() { const {user} = this.state; console.warn("ITEM ITEM", this.item); console.warn("Code Membre", user.code_membre); if (user) { if (this.item.code_parrain.toLowerCase() === user.code_membre.toLowerCase()) { console.warn("Conditions vérifié"); if (this.item.status === '1') { return ( ) } if (this.item.status === '2') { return ( ) } else { return ( ) } } } } render() { let ago = moment.tz(this.item.date_creation, moment.tz.guess()).format(); ago = moment(ago); let cancelDate = ""; if (parseInt(this.item.canceled_by_hypervisor) === 1) { console.log("CANCEL DATE", this.item.cancellation_date); cancelDate = moment.tz(this.item.cancellation_date, moment.tz.guess()).format(); cancelDate = moment(cancelDate); } return ( {this.renderPromptModifyAmountToSend()} {(this.state.triggerTreatmentClick || this.state.triggerCancelClick) && this.renderAlertErrorTreatOrCancelDemand()} {I18n.t('MEMBER_INFO')} {this.item.phone} {this.item.code_membre} {I18n.t('DEMAND_INFO')} {this.item.code_parrain} {this.item.reseau} {this.item.montant} {ago.format(" Do MMMM YYYY à HH:mm")} {ago.fromNow()} { parseInt(this.item.canceled_by_hypervisor) === 1 && {I18n.t('DEMAND_STATE')} {I18n.t('CANCEL_BY_HYPERVISOR')} {`${I18n.t('CANCEL_ON')} ${cancelDate.format(" Do MMMM YYYY à HH:mm")}`} } {this.state.user ? this.renderBtn() : null} ) } } const mapStateToProps = state => ({ loadingTreatDemand: state.creditTreatDemandReducer.loadingTreatDemand, resultTreatDemand: state.creditTreatDemandReducer.resultTreatDemand, errorTreatDemand: state.creditTreatDemandReducer.errorTreatDemand, loadingCancelDemand: state.creditCancelDemandReducer.loadingCancelDemand, resultCancelDemand: state.creditCancelDemandReducer.resultCancelDemand, errorCancelDemand: state.creditCancelDemandReducer.errorCancelDemand }); const mapDispatchToProps = dispatch => bindActionCreators({ treatCreditDemand: treatCreditDemand, creditDemandResetReducer: creditDemandResetReducer, treatCancelDemand: treatCancelDemand, creditCancelResetReducer: creditCancelResetReducer }, dispatch); export default connect(mapStateToProps, mapDispatchToProps)(HistoryItemDetails); const styles = StyleSheet.create({ container: { flex: 1, }, btnstyle: {}, inputAmountText: { ...Platform.select({ android: { borderBottomColor: Color.borderColor, borderBottomWidth: 0.5, } }) }, simpleuser: { marginLeft: responsiveWidth(2), fontSize: 16, color: '#3E3E3E' }, textbtnstyle: { color: "white", fontWeight: "bold", fontSize: 18 }, cardcontainer1: { justifyContent: 'space-evenly', flex: 2, marginRight: 3, marginLeft: 3, }, cardcontainer: { justifyContent: 'space-evenly', flex: 3, margin: 3, } })