/* global alert */ import React, { Component } from 'react'; import { ActivityIndicator, View, TextInput, KeyboardAvoidingView, Keyboard, TouchableWithoutFeedback, Text } from 'react-native'; import { BlueNavigationStyle, BlueButton, BlueBitcoinAmount, BlueDismissKeyboardInputAccessory } from '../../BlueComponents'; import PropTypes from 'prop-types'; import { BitcoinUnit } from '../../models/bitcoinUnits'; import ReactNativeHapticFeedback from 'react-native-haptic-feedback'; let EV = require('../../events'); let loc = require('../../loc'); export default class LNDCreateInvoice extends Component { static navigationOptions = ({ navigation }) => ({ ...BlueNavigationStyle(navigation, true), title: loc.receive.header, }); constructor(props) { super(props); // fallback to first wallet if it exists const fromWallet = props.navigation.getParam('fromWallet'); this.state = { fromWallet, description: '', isLoading: false, }; } async createInvoice() { this.setState({ isLoading: true }, async () => { try { const invoiceRequest = await this.state.fromWallet.addInvoice(this.state.amount, this.state.description); EV(EV.enum.TRANSACTIONS_COUNT_CHANGED); ReactNativeHapticFeedback.trigger('notificationSuccess', false); this.props.navigation.navigate('LNDViewInvoice', { invoice: invoiceRequest, fromWallet: this.state.fromWallet, isModal: true, }); } catch (_error) { ReactNativeHapticFeedback.trigger('notificationError', false); this.setState({ isLoading: false }); alert('Error'); } }); } renderCreateButton = () => { return ( {this.state.isLoading ? ( ) : ( 0} onPress={() => this.createInvoice()} title={loc.send.details.create} /> )} ); }; render() { if (!this.state.fromWallet) { return ( System error: Source wallet not found (this should never happen) ); } return ( { this.setState({ amount: text }); }} disabled={this.state.isLoading} unit={BitcoinUnit.SATS} inputAccessoryViewID={BlueDismissKeyboardInputAccessory.InputAccessoryViewID} /> this.setState({ description: text })} placeholder={loc.receive.details.label} value={this.state.description} numberOfLines={1} style={{ flex: 1, marginHorizontal: 8, minHeight: 33 }} editable={!this.state.isLoading} onSubmitEditing={Keyboard.dismiss} inputAccessoryViewID={BlueDismissKeyboardInputAccessory.InputAccessoryViewID} /> {this.renderCreateButton()} ); } } LNDCreateInvoice.propTypes = { navigation: PropTypes.shape({ goBack: PropTypes.func, navigate: PropTypes.func, getParam: PropTypes.func, }), };