import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { View, Text, Linking, StyleSheet, Image, ScrollView } from 'react-native'; import AsyncStorage from '@react-native-async-storage/async-storage'; import { BlueButtonLink, BlueCard, BlueLoading, BlueSpacing20, BlueSpacing40, BlueText } from '../../BlueComponents'; import navigationStyle from '../../components/navigationStyle'; import Lnurl from '../../class/lnurl'; import loc from '../../loc'; import { SuccessView } from '../send/success'; import Button from '../../components/Button'; import SafeArea from '../../components/SafeArea'; export default class LnurlPaySuccess extends Component { constructor(props) { super(props); const paymentHash = props.route.params.paymentHash; const fromWalletID = props.route.params.fromWalletID; const justPaid = !!props.route.params.justPaid; this.state = { paymentHash, isLoading: true, fromWalletID, justPaid, }; } async componentDidMount() { const LN = new Lnurl(false, AsyncStorage); await LN.loadSuccessfulPayment(this.state.paymentHash); const successAction = LN.getSuccessAction(); if (!successAction) { this.setState({ isLoading: false, LN }); return; } const newState = { LN, isLoading: false }; switch (successAction.tag) { case 'aes': { const preimage = LN.getPreimage(); newState.message = Lnurl.decipherAES(successAction.ciphertext, preimage, successAction.iv); newState.preamble = successAction.description; break; } case 'url': newState.url = successAction.url; newState.preamble = successAction.description; break; case 'message': this.setState({ message: successAction.message }); newState.message = successAction.message; break; } this.setState(newState); } render() { if (this.state.isLoading || !this.state.LN) { return ; } /** @type {Lnurl} */ const LN = this.state.LN; const domain = LN.getDomain(); const repeatable = !LN.getDisposable(); const lnurl = LN.getLnurl(); const description = LN.getDescription(); const image = LN.getImage(); const { preamble, message, url, justPaid } = this.state; return ( {justPaid && } {domain} {description} {image && } {(preamble || url || message) && ( {preamble} {url ? ( { Linking.openURL(url); }} /> ) : ( {message} )} )} {repeatable ? (