BlueWallet/screen/receive/aztecoRedeem.js
Marcos Rodriguez Velez ed68a20b4f
REF: Continue renaming
2024-05-31 13:22:22 -04:00

185 lines
5.1 KiB
JavaScript

import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { I18nManager, Keyboard, StyleSheet, Text, TouchableOpacity, TouchableWithoutFeedback, View } from 'react-native';
import { Icon } from 'react-native-elements';
import { BlueLoading, BlueSpacing, BlueText } from '../../BlueComponents';
import Azteco from '../../class/azteco';
import presentAlert from '../../components/Alert';
import Button from '../../components/Button';
import loc from '../../loc';
import { StorageContext } from '../../components/Context/StorageProvider';
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 = StorageContext;
state = { isLoading: true };
constructor(props, context) {
super(props);
/** @type {AbstractWallet} */
let toWallet = null;
const wallets = context.wallets;
if (wallets.length === 0) {
presentAlert({ message: 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) {
presentAlert({ message: loc.azteco.errorSomething });
this.setState({ isLoading: false });
} else {
this.props.navigation.pop();
// remote because we want to refetch from server tx list and balance
presentAlert({ message: loc.azteco.success });
}
};
renderWalletSelectionButton = () => {
if (this.state.renderWalletSelectionButtonHidden) return;
return (
<View style={styles.selectWallet1}>
{!this.state.isLoading && (
<TouchableOpacity
accessibilityRole="button"
style={styles.selectTouch}
onPress={() =>
this.props.navigation.navigate('SelectWallet', {
onWalletSelect: this.onWalletSelect,
availableWallets: this.context.wallets,
})
}
>
<Text style={styles.selectText}>{loc.azteco.redeem}</Text>
<Icon name={I18nManager.isRTL ? 'angle-left' : 'angle-right'} size={18} type="font-awesome" color="#9aa0aa" />
</TouchableOpacity>
)}
<View style={styles.selectWallet2}>
<TouchableOpacity
accessibilityRole="button"
style={styles.selectTouch}
onPress={() =>
this.props.navigation.navigate('SelectWallet', {
onWalletSelect: this.onWalletSelect,
availableWallets: this.context.wallet,
})
}
>
<Text style={styles.selectWalletLabel}>{this.state.toWallet.getLabel()}</Text>
</TouchableOpacity>
</View>
</View>
);
};
render() {
if (this.state.isLoading || typeof this.state.toWallet === 'undefined') {
return (
<View style={styles.loading}>
<BlueLoading />
</View>
);
}
return (
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<View>
<View style={styles.root}>
<Text>{loc.azteco.codeIs}</Text>
<BlueText style={styles.code}>
{this.state.c1}-{this.state.c2}-{this.state.c3}-{this.state.c4}
</BlueText>
{this.renderWalletSelectionButton()}
<Button onPress={this.redeem} title={loc.azteco.redeemButton} />
<BlueSpacing />
</View>
</View>
</TouchableWithoutFeedback>
);
}
}
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,
}),
}),
};