import * as React from 'react'; import { connect } from "react-redux"; import { SafeAreaView, TouchableOpacity, View, Text, FlatList, Image, StyleSheet, Modal } from 'react-native'; import REQUEST_POST_PAY from '../../components/api/postpayapi'; import Icon from '../../components/icons.js'; import CustomHeader from '../../components/header.js'; import Theme from '../../components/theme.style.js'; import Assets from '../../components/assets.manager.js'; import Elements from '../../components/elements.js'; import DB from '../../components/storage/'; import CustomSafeArea from '../../components/safeArea.component'; class PayatpumpPaymentList extends React.Component { constructor(props) { super(props) } state = { cards: [], defaultCardIndex: -1, defaultSelectedCard: null, showModal: false, deleteCard: null, loading: false, isShowSelectionCard: this.props.route.params?.displaySelectionCard } componentDidMount() { this.getFunding() } getFunding = async (defaultCard = null, enableDefaultCard = false, setDefault = false) => { this.setState({ loading: true }) const USER_PROFILE = await DB.profile() REQUEST_POST_PAY('getFunding', 'post', { token: USER_PROFILE.data.auth_p97 }, {}, {}, async (res) => { this.setState({ loading: false }) if(res.success == undefined) { setTimeout(() => { Alert.alert('Error', res.Message) }, 300) } else { if(res.success) { let savedCard = await DB.get("pumpPaymentCards"); let selectedCard = JSON.parse(savedCard); let wallets = res.response.wallets.map(item => { let wallet = item.wallets.map(walletItem => { let fundingProviderName = item.fundingProviderName return {...walletItem, fundingProviderName} }) return wallet }) var mergedWallets = [].concat.apply([], wallets) let defaultIndex = -1; let selectedDefaultCard = null if(enableDefaultCard) { defaultIndex = mergedWallets.findIndex(item => item.userPaymentSourceId === defaultCard.userPaymentSourceId); selectedDefaultCard = mergedWallets[defaultIndex]; if(setDefault) { await DB.set( "pumpPaymentCards", JSON.stringify(selectedDefaultCard), () => {}, () => {} ) } } else { if(selectedCard && !setDefault) { defaultIndex = mergedWallets.findIndex(item => item.userPaymentSourceId === selectedCard.userPaymentSourceId); selectedDefaultCard = mergedWallets[defaultIndex]; } } this.setState({ cards: mergedWallets, defaultCardIndex: defaultIndex, defaultSelectedCard: selectedDefaultCard, deleteCard: null }) } else { setTimeout(() => { Alert.alert('Error', 'Failed to get fund. Try again.') }, 300) } } }, (error) => { this.setState({ loading: false }) setTimeout(() => { Alert.alert('Error', 'Failed to get fund. Try again.') }, 300) }) } deleteCard = async () => { this.setState({ loading: true, showModal: false }) const USER_PROFILE = await DB.profile() REQUEST_POST_PAY('deleteCreditCard', 'post', { token: USER_PROFILE.data.auth_p97 }, {}, { userPaymentSourceId: this.state.deleteCard.userPaymentSourceId }, async (res) => { this.setState({ loading: false }) if(res.success == undefined) { setTimeout(() => { Alert.alert('Error', res.Message) }, 300) } else { if(res.success) { let defaultCardIndex = -1; let defaultSelectedCard = null; let wallets = this.state.cards.filter(item => { return item.userPaymentSourceId != this.state.deleteCard.userPaymentSourceId }) .map(item => { return item }) if(wallets.length > 0) { defaultCardIndex = 0; defaultSelectedCard = wallets[defaultCardIndex]; this.props.route?.params.onSelectedPaymentCard(defaultSelectedCard) await DB.set( "pumpPaymentCards", JSON.stringify(defaultSelectedCard), () => {}, () => {} ) } else { this.props.route?.params.onSelectedPaymentCard(null) await DB.set( "pumpPaymentCards", JSON.stringify(null), () => {}, () => {} ) } this.setState({ cards: wallets, defaultCardIndex: defaultCardIndex, defaultSelectedCard: defaultSelectedCard, deleteCard: null }) } else { setTimeout(() => { Alert.alert('Error', 'Failed to get fund. Try again.') }, 300) } } }, (error) => { this.setState({ loading: false }) setTimeout(() => { Alert.alert('Error', error) }, 300) }) } submitPaymentCard = async (defaultSelectedCard) => { if(defaultSelectedCard == null) { this.setState({ showModal: true }) return } await DB.set( "pumpPaymentCards", JSON.stringify(defaultSelectedCard), () => { this.props.route?.params.onSelectedPaymentCard(defaultSelectedCard) this.props.navigation.goBack() }, () => {} ) } onAddNewCard = (response, enableDefaultCard, setDefault) => { this.getFunding(response, enableDefaultCard, setDefault) } renderDeleteErrorModal = () => { return ( {}} style={styles.centeredView}> {this.state.deleteCard != null ? ( <> {'Are you sure you want to delete this card?'} this.setState({ showModal: false })} style={{ width: 100, height: 30, backgroundColor: Theme.colors.primary, alignItems: 'center', justifyContent: 'center', borderRadius: 5, marginRight: 10 }}> No this.deleteCard()} style={{ width: 100, height: 30, backgroundColor: Theme.colors.white, alignItems: 'center', justifyContent: 'center', borderRadius: 5, borderColor: Theme.colors.primary, borderWidth: 0.5, marginLeft: 10 }}> Yes ) : ( <> {'Please Select Card...'} this.setState({ showModal: false })} style={{ width: 80, height: 30, backgroundColor: Theme.colors.primary, alignItems: 'center', justifyContent: 'center', borderRadius: 5 }}> Ok )} ) } renderCardList = () => { return ( index.toString()} data={this.state.cards} scrollEnabled={true} showsVerticalScrollIndicator={false} style={{flex: 1}} contentContainerStyle={{flex: 1}} ListEmptyComponent={() => ( Empty )} renderItem={({item, index}) => { return ( { // this.setState({ defaultCardIndex: this.state.isShowSelectionCard ? -1 : this.state.defaultCardIndex == index ? -1 : index, defaultSelectedCard: this.state.defaultCardIndex == index ? null : item }); this.submitPaymentCard(item); }} key={index} style={{ flex: 1, alignItems: 'center', justifyContent: 'center', flexDirection: 'row', backgroundColor: this.props.app_theme?.theme.dark ? this.props.app_theme?.theme.colors.background : Theme.colors.white, padding: 12 }}> {this.state.defaultCardIndex == index && } {`**** **** **** ${item.lastFour}`} {this.state.defaultCardIndex == index && Primary} this.setState({ deleteCard: item, showModal: true })} style={{ paddingVertical: 5 }}> ) }} numColumns={1} /> ) } render() { return ( this.props.navigation.goBack()} back={true} menu={false} navigation={this.props.navigation} /> {this.renderDeleteErrorModal()} {this.renderCardList()} this.props.navigation.navigate('PayatpumpPaymentMethod', { onAddNewCard: (newcard, enableDefaultCard) => this.onAddNewCard(newcard, enableDefaultCard)})} style={{alignSelf: 'center'}} > Add a Card ) } } const mapStateToProps = (state) => { return { app_theme: state.appThemeReducer.theme } } export default connect(mapStateToProps, null)(PayatpumpPaymentList) const styles = StyleSheet.create({ centeredView: { flex: 1, justifyContent: "center", backgroundColor: '#00000090', }, modalView: { margin: 25, backgroundColor: "white", borderRadius: 15, padding: 20, alignItems: "center", shadowColor: "#000", shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.25, shadowRadius: 4, elevation: 5 }, })