/* global alert */ import React, { Component } from 'react'; import { ActivityIndicator, View, Text, TextInput, Alert, TouchableOpacity, Keyboard, TouchableWithoutFeedback } from 'react-native'; import { BlueButton, SafeBlueArea, BlueCard, BlueSpacing20, BlueNavigationStyle, BlueText } from '../../BlueComponents'; import PropTypes from 'prop-types'; import { LightningCustodianWallet } from '../../class/lightning-custodian-wallet'; import { HDLegacyBreadwalletWallet } from '../../class/hd-legacy-breadwallet-wallet'; import { HDLegacyP2PKHWallet } from '../../class/hd-legacy-p2pkh-wallet'; import { HDSegwitP2SHWallet } from '../../class/hd-segwit-p2sh-wallet'; import ReactNativeHapticFeedback from 'react-native-haptic-feedback'; let EV = require('../../events'); /** @type {AppStorage} */ let BlueApp = require('../../BlueApp'); let loc = require('../../loc'); export default class WalletDetails extends Component { static navigationOptions = ({ navigation }) => ({ ...BlueNavigationStyle(), title: loc.wallets.details.title, headerRight: ( { if (navigation.state.params.saveAction) { navigation.getParam('saveAction')(); } }} > {loc.wallets.details.save} ), }); constructor(props) { super(props); const wallet = props.navigation.getParam('wallet'); const address = wallet.getAddress(); const isLoading = true; this.state = { isLoading, walletName: wallet.getLabel(), wallet, address, }; this.props.navigation.setParams({ isLoading, saveAction: () => this.setLabel() }); } componentDidMount() { this.setState({ isLoading: false, }); this.props.navigation.setParams({ isLoading: false, saveAction: () => this.setLabel() }); } setLabel() { this.props.navigation.setParams({ isLoading: true }); this.setState({ isLoading: true }, async () => { this.state.wallet.setLabel(this.state.walletName); BlueApp.saveToDisk(); alert('Wallet updated.'); this.props.navigation.goBack(null); }); } render() { if (this.state.isLoading) { return ( ); } return ( {(() => { if (this.state.wallet.getAddress()) { return ( {loc.wallets.details.address.toLowerCase()} {this.state.wallet.getAddress()} ); } })()} {loc.wallets.add.wallet_name.toLowerCase()} this.setState({ walletName: text })} numberOfLines={1} style={{ flex: 1, marginHorizontal: 8, minHeight: 33 }} editable={!this.state.isLoading} underlineColorAndroid="transparent" /> {loc.wallets.details.type.toLowerCase()} {this.state.wallet.typeReadable} {this.state.wallet.type === LightningCustodianWallet.type && ( {'connected to'} {this.state.wallet.getBaseURI()} )} this.props.navigation.navigate('WalletExport', { address: this.state.wallet.getAddress(), secret: this.state.wallet.getSecret(), }) } title={loc.wallets.details.export_backup} /> {(this.state.wallet.type === HDLegacyBreadwalletWallet.type || this.state.wallet.type === HDLegacyP2PKHWallet.type || this.state.wallet.type === HDSegwitP2SHWallet.type) && ( this.props.navigation.navigate('WalletXpub', { secret: this.state.wallet.getSecret(), }) } title={loc.wallets.details.show_xpub} /> )} {this.state.wallet.type !== LightningCustodianWallet.type && ( this.props.navigation.navigate('BuyBitcoin', { address: this.state.wallet.getAddress(), secret: this.state.wallet.getSecret(), }) } title={loc.wallets.details.buy_bitcoin} /> )} { ReactNativeHapticFeedback.trigger('notificationWarning', false); Alert.alert( loc.wallets.details.delete + ' ' + loc.wallets.details.title, loc.wallets.details.are_you_sure, [ { text: loc.wallets.details.yes_delete, onPress: async () => { this.props.navigation.setParams({ isLoading: true }); this.setState({ isLoading: true }, async () => { BlueApp.deleteWallet(this.state.wallet); ReactNativeHapticFeedback.trigger('notificationSuccess', false); await BlueApp.saveToDisk(); EV(EV.enum.TRANSACTIONS_COUNT_CHANGED); EV(EV.enum.WALLETS_COUNT_CHANGED); this.props.navigation.navigate('Wallets'); }); }, style: 'destructive', }, { text: loc.wallets.details.no_cancel, onPress: () => {}, style: 'cancel' }, ], { cancelable: false }, ); }} > {loc.wallets.details.delete} ); } } WalletDetails.propTypes = { navigation: PropTypes.shape({ getParam: PropTypes.func, state: PropTypes.shape({ params: PropTypes.shape({ address: PropTypes.string, secret: PropTypes.string, }), }), navigate: PropTypes.func, goBack: PropTypes.func, setParams: PropTypes.func, }), };