import React, { Component } from 'react'; import { StyleSheet, View, Image, StatusBar, Alert, FlatList, TouchableOpacity, ActivityIndicator, Platform, ProgressBarAndroid, Text } from 'react-native'; import { ActionSheetProvider, connectActionSheet } from '@expo/react-native-action-sheet' import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; import { useActionSheet } from '@expo/react-native-action-sheet' const route = require('./../../route.json'); let slugify = require('slugify'); import I18n from 'react-native-i18n' import * as Utils from '../../utils/DeviceUtils'; import { Images } from '../../config/Images'; import { Color } from '../../config/Color'; import { baseUrl } from '../../webservice/IlinkConstants'; import { IlinkEmitter } from "../../utils/events"; import { Provider, Appbar } from 'react-native-paper'; import { readUser } from '../../webservice/AuthApi'; import { getNanoCreditAccountReset, getNanoCreditAccountAction } from '../../webservice/user/NanoCreditApi'; import _ from 'lodash'; import Icons from 'react-native-vector-icons/Ionicons' import { FontWeight, Typography } from '../../config/typography'; import LottieView from 'lottie-react-native'; import { isIlinkWorldWallet, optionDepotScreen, optionPaiementFactureSubScreen, displayToast } from '../../utils/UtilsFunction'; import chunk from 'lodash/chunk'; import thousands from 'thousands'; import Tag from '../../components/Tag'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; class WalletOptionSelect extends Component { constructor(props) { super(props); IlinkEmitter.on("langueChange", this.updateLangue.bind(this)); this.state = { options: this.props.navigation.state.params.optionSelect.options, title: this.props.navigation.state.params.optionSelect.title, subTitle: this.props.navigation.state.params.optionSelect.subTitle, type: this.props.navigation.state.params.optionSelect.type, wallet: this.props.navigation.state.params.wallet, lottie: this.props.navigation.state.params.lottie, onGoBack: this.props.navigation.state.params.onGoBack, isIdentified: this.props.navigation.state.params.isIdentified || null, isNanoCredit: this.props.navigation.state.params.hasOwnProperty('isNanoCredit'), user: null, isDataHasLoaded: false } console.log("WALLET OPTION PROPS", this.props); IlinkEmitter.on("langueChange", this.updateLangue.bind(this)); this.props.getNanoCreditAccountReset(); readUser().then((user) => { if (user) { if (user !== undefined) { this.props.getNanoCreditAccountAction(user.id); this.setState({ user }); } } }); this.willFocus = this.props.navigation.addListener( 'willFocus', payload => { readUser().then((user) => { if (user) { if (user !== undefined) { this.props.getNanoCreditAccountAction(user.id); } } }); }); } static navigationOptions = ({ navigation }) => ({ header: null, headerMode: 'none', headerTitle: null, activeColor: '#f0edf6', inactiveColor: '#3e2465', barStyle: { backgroundColor: '#694fad' }, drawerLabel: I18n.t('CREDIT_MANAGE'), drawerIcon: ({ tintColor }) => ( ) }); renderResultGetNanoCreditAccount() { const { result } = this.props; console.log("BEFORE", this.props); if (result !== null) { if (result.response !== null) { this.setState({ user: { ...this.state.user, balance_credit: result.response.balance_credit, balance_epargne: result.response.balance_epargne }, isDataHasLoaded: true }); console.log("AFTER", this.props); } } } updateLangue() { this.props.navigation.setParams({ name: I18n.t('WALLET') }) this.forceUpdate() } redirectToRoute = (optionsParam) => { if (optionsParam.hasOwnProperty('hasSubMenu')) { let options = []; for (let index = 0; index < optionsParam.subMenuOption.length; index++) { options.push(optionsParam.subMenuOption[index].title); } const destructiveButtonIndex = 0; const cancelButtonIndex = 2; this.props.showActionSheetWithOptions( { options, cancelButtonIndex, destructiveButtonIndex, }, buttonIndex => { this.props.navigation.push(optionsParam.subMenuOption[buttonIndex].screen); }, ); console.log(this.props); } else { switch (this.state.type) { case 'FACTURE': this.props.navigation.push(optionsParam.screen, { optionSelect: optionsParam.subScreenOption, onGoBack: () => this.props.navigation.state.params.onGoBack(), }); break; case 'DEPOT': this.props.navigation.push(optionsParam.screen, { optionSelect: optionsParam.subScreenOption, wallet: this.state.wallet, onGoBack: () => this.props.navigation.state.params.onGoBack(), }); break; case 'DEPOT_USER': this.props.navigation.push(optionsParam.screen, { wallet: this.state.wallet, onGoBack: () => this.props.navigation.state.params.onGoBack(), optionSelect: optionsParam.subScreenOption, }); break; case 'RETRAIT': this.props.navigation.push(optionsParam.screen, { wallet: this.state.wallet, onGoBack: () => this.props.navigation.state.params.onGoBack(), }); break; case 'WALLET_TO_BANK': this.props.navigation.push(optionsParam.screen, { wallet: this.state.wallet, optionSelect: optionsParam.subScreenOption, onGoBack: () => this.props.navigation.state.params.onGoBack(), }); break; case 'NANO_CREDIT': this.props.navigation.push(optionsParam.screen, { wallet: this.state.wallet, optionSelect: optionsParam.subScreenOption, onGoBack: () => this.props.navigation.state.params.onGoBack(), }); break; default: this.props.navigation.push(optionsParam.screen) break; } } } renderItem = (options, isOneElement, index) => ( isOneElement ? <> { this.redirectToRoute(options); }} activeOpacity={0.9}> {options.title} : <> { if (!_.isNil(this.state.isIdentified)) { console.log(options); if (_.isEqual(options.screen, 'createIdentificationUser')) { if (this.state.isIdentified) displayToast(I18n.t('ALREADY_IDENTIFIED')); else this.redirectToRoute(options); } else if (_.isEqual(options.screen, 'modifyIdentificationUser')) { if (!this.state.isIdentified) displayToast(I18n.t('NOT_YET_IDENTIFY')); else this.redirectToRoute(options); } } else this.redirectToRoute(options); }} activeOpacity={0.9}> {options.title} ); updateLangue() { this.props.navigation.setParams({ name: I18n.t('WALLET') }) this.forceUpdate(); } renderAccountDetail = (options) => ( <> {I18n.t('CREDIT_ACCOUNT')} {this.state.user !== null ? {`${thousands(this.state.user.balance_credit, ' ')} ${this.state.wallet.currency_code}`} : null} {I18n.t('SAVINGS_ACCOUNT')} {this.state.user !== null ? {`${thousands(this.state.user.balance_epargne, ' ')} ${this.state.wallet.currency_code}`} : null} } style={{ paddingRight: 10, width: 120, borderTopRightRadius: 0, borderBottomRightRadius: 0, borderRightWidth: 1, borderRightColor: Color.whiteColor }} primary onPress={() => { }}>{I18n.t('SAVINGS')} } primary style={{ width: 110, borderTopLeftRadius: 0, borderBottomLeftRadius: 0, }}> {I18n.t('CREDIT')} ); render() { !this.state.isDataHasLoaded && this.renderResultGetNanoCreditAccount(); return ( { this.props.navigation.pop() }} /> { this.state.isNanoCredit ? this.renderAccountDetail() : } {I18n.t('OPERATIONS')} { chunk(this.state.options, 2).map((item, index) => ( { item.length === 1 ? item.map((wallet, i) => ( this.renderItem(wallet, true, i) )) : item.map((wallet, i) => ( this.renderItem(wallet, false, i) )) } )) } ); } } const mapStateToProps = state => ({ loading: state.getNanoCreditAccountUserReducer.loading, result: state.getNanoCreditAccountUserReducer.result, error: state.getNanoCreditAccountUserReducer.error, }); const mapDispatchToProps = dispatch => bindActionCreators({ getNanoCreditAccountAction, getNanoCreditAccountReset, }, dispatch); export default connect(mapStateToProps, mapDispatchToProps)(connectActionSheet(WalletOptionSelect)); const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: Color.containerBackgroundColor, paddingHorizontal: 20, }, item: { paddingVertical: 15, borderBottomWidth: 1, flexDirection: "row", justifyContent: "space-between", alignItems: "center" }, lottie: { width: 540, height: 240 }, circlePoint: { width: 50, height: 50, borderRadius: 25, marginRight: 5, alignItems: 'center', justifyContent: 'center', }, checkDefault: { flexDirection: "row", justifyContent: "space-between", alignItems: "center", borderBottomWidth: 1, paddingVertical: 10, marginTop: 5 }, transactionContainer: { flexDirection: 'row', paddingTop: 10, }, containerTouch: { flex: 1, flexDirection: 'row', alignItems: 'center', shadowColor: Color.borderColor, borderColor: Color.borderColor, borderWidth: 0.5, shadowOffset: { width: 1.5, height: 1.5 }, shadowOpacity: 1.0, elevation: 5, borderRadius: 10, backgroundColor: Color.cardBackgroundColor }, contain: { flexDirection: 'row', justifyContent: 'space-between', }, imageBanner: { marginTop: 15, marginLeft: 5, width: Utils.scaleWithPixel(30), height: Utils.scaleWithPixel(30) }, content: { height: Utils.scaleWithPixel(65), paddingHorizontal: 10, justifyContent: 'space-between', alignItems: 'flex-start', flex: 1, }, contentTitle: { paddingTop: 12, }, blockView: { paddingVertical: 10, borderBottomWidth: 0.5, }, });