/* global alert */ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { Keyboard, Text, TouchableOpacity, StatusBar, TouchableWithoutFeedback, View, StyleSheet, I18nManager } from 'react-native'; import { Icon } from 'react-native-elements'; import { BlueButton, BlueLoading, BlueSpacing, BlueText } from '../../BlueComponents'; import { navigationStyleTx } from '../../components/navigationStyle'; import loc from '../../loc'; import { PlaceholderWallet } from '../../class'; import Azteco from '../../class/azteco'; import { BlueStorageContext } from '../../blue_modules/storage-context'; const styles = StyleSheet.create({ loading: { flex: 1, paddingTop: 20, }, root: { alignItems: 'center', alignContent: 'flex-end', marginTop: 66, }, code: { color: '#0c2550', fontSize: 20, marginTop: 20, marginBottom: 90, }, selectWallet1: { marginBottom: 24, alignItems: 'center', }, selectTouch: { flexDirection: 'row', alignItems: 'center', }, selectText: { color: '#9aa0aa', fontSize: 14, marginRight: 8, }, selectWallet2: { flexDirection: 'row', alignItems: 'center', marginVertical: 4, }, selectWalletLabel: { color: '#0c2550', fontSize: 14, }, }); export default class AztecoRedeem extends Component { static contextType = BlueStorageContext; state = { isLoading: true }; constructor(props, context) { super(props); /** @type {AbstractWallet} */ let toWallet = null; const wallets = context.wallets.filter(wallet => wallet.type !== PlaceholderWallet.type); if (wallets.length === 0) { alert(loc.azteco.errorBeforeRefeem); return props.navigation.goBack(null); } else { if (wallets.length > 0) { toWallet = wallets[0]; } this.state = { c1: props.route.params.c1, c2: props.route.params.c2, c3: props.route.params.c3, c4: props.route.params.c4, isLoading: false, toWallet, renderWalletSelectionButtonHidden: false, }; } } async componentDidMount() { console.log('AztecoRedeem - componentDidMount'); } onWalletSelect = toWallet => { this.setState({ toWallet }, () => { this.props.navigation.pop(); }); }; redeem = async () => { this.setState({ isLoading: true }); const address = await this.state.toWallet.getAddressAsync(); const result = await Azteco.redeem([this.state.c1, this.state.c2, this.state.c3, this.state.c4], address); if (!result) { alert(loc.azteco.errorSomething); this.setState({ isLoading: false }); } else { this.props.navigation.pop(); // remote because we want to refetch from server tx list and balance alert(loc.azteco.success); } }; renderWalletSelectionButton = () => { if (this.state.renderWalletSelectionButtonHidden) return; return ( {!this.state.isLoading && ( this.props.navigation.navigate('SelectWallet', { onWalletSelect: this.onWalletSelect, availableWallets: this.context.wallets, }) } > {loc.azteco.redeem} )} this.props.navigation.navigate('SelectWallet', { onWalletSelect: this.onWalletSelect, availableWallets: this.context.wallet, }) } > {this.state.toWallet.getLabel()} ); }; render() { if (this.state.isLoading || typeof this.state.toWallet === 'undefined') { return ( ); } return ( {loc.azteco.codeIs} {this.state.c1}-{this.state.c2}-{this.state.c3}-{this.state.c4} {this.renderWalletSelectionButton()} ); } } AztecoRedeem.propTypes = { navigation: PropTypes.shape({ pop: PropTypes.func, goBack: PropTypes.func, navigate: PropTypes.func, }), route: PropTypes.shape({ params: PropTypes.shape({ c1: PropTypes.string, c2: PropTypes.string, c3: PropTypes.string, c4: PropTypes.string, }), }), }; AztecoRedeem.navigationOptions = navigationStyleTx({}, opts => ({ ...opts, title: loc.azteco.title }));