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,
},
});