when paying an lnurl-pay that provides an amount interval, the amount field is editable by the user and it expects no spaces
146 lines
5.0 KiB
QML
146 lines
5.0 KiB
QML
import QtQuick 2.6
|
|
import QtQuick.Layouts 1.0
|
|
import QtQuick.Controls 2.14
|
|
import QtQuick.Controls.Material 2.0
|
|
|
|
import org.electrum 1.0
|
|
|
|
import "controls"
|
|
|
|
ElDialog {
|
|
id: dialog
|
|
|
|
title: qsTr('LNURL Payment request')
|
|
iconSource: '../../../icons/link.png'
|
|
|
|
property InvoiceParser invoiceParser
|
|
|
|
padding: 0
|
|
|
|
property bool commentValid: comment.text.length <= invoiceParser.lnurlData['comment_allowed']
|
|
property bool amountValid: amountBtc.textAsSats.satsInt >= parseInt(invoiceParser.lnurlData['min_sendable_sat'])
|
|
&& amountBtc.textAsSats.satsInt <= parseInt(invoiceParser.lnurlData['max_sendable_sat'])
|
|
property bool valid: commentValid && amountValid
|
|
|
|
ColumnLayout {
|
|
width: parent.width
|
|
|
|
spacing: 0
|
|
|
|
GridLayout {
|
|
id: rootLayout
|
|
columns: 2
|
|
|
|
Layout.fillWidth: true
|
|
Layout.leftMargin: constants.paddingLarge
|
|
Layout.rightMargin: constants.paddingLarge
|
|
Layout.bottomMargin: constants.paddingLarge
|
|
|
|
Label {
|
|
text: qsTr('Provider')
|
|
color: Material.accentColor
|
|
}
|
|
Label {
|
|
Layout.fillWidth: true
|
|
text: invoiceParser.lnurlData['domain']
|
|
}
|
|
Label {
|
|
text: qsTr('Description')
|
|
color: Material.accentColor
|
|
}
|
|
Label {
|
|
Layout.fillWidth: true
|
|
text: invoiceParser.lnurlData['metadata_plaintext']
|
|
wrapMode: Text.Wrap
|
|
}
|
|
|
|
Label {
|
|
text: qsTr('Amount')
|
|
color: Material.accentColor
|
|
}
|
|
|
|
RowLayout {
|
|
Layout.fillWidth: true
|
|
BtcField {
|
|
id: amountBtc
|
|
Layout.preferredWidth: rootLayout.width /3
|
|
text: Config.formatSatsForEditing(invoiceParser.lnurlData['min_sendable_sat'])
|
|
enabled: invoiceParser.lnurlData['min_sendable_sat'] != invoiceParser.lnurlData['max_sendable_sat']
|
|
color: Material.foreground // override gray-out on disabled
|
|
fiatfield: amountFiat
|
|
onTextAsSatsChanged: {
|
|
invoiceParser.amountOverride = textAsSats
|
|
}
|
|
}
|
|
Label {
|
|
text: Config.baseUnit
|
|
color: Material.accentColor
|
|
}
|
|
}
|
|
|
|
Item { visible: Daemon.fx.enabled; Layout.preferredWidth: 1; Layout.preferredHeight: 1 }
|
|
|
|
RowLayout {
|
|
visible: Daemon.fx.enabled
|
|
FiatField {
|
|
id: amountFiat
|
|
Layout.preferredWidth: rootLayout.width / 3
|
|
btcfield: amountBtc
|
|
}
|
|
Label {
|
|
text: Daemon.fx.fiatCurrency
|
|
color: Material.accentColor
|
|
}
|
|
}
|
|
|
|
InfoTextArea {
|
|
Layout.columnSpan: 2
|
|
Layout.fillWidth: true
|
|
compact: true
|
|
visible: invoiceParser.lnurlData['min_sendable_sat'] != invoiceParser.lnurlData['max_sendable_sat']
|
|
text: qsTr('Amount must be between %1 and %2 %3').arg(Config.formatSats(invoiceParser.lnurlData['min_sendable_sat'])).arg(Config.formatSats(invoiceParser.lnurlData['max_sendable_sat'])).arg(Config.baseUnit)
|
|
}
|
|
|
|
Label {
|
|
Layout.columnSpan: 2
|
|
visible: invoiceParser.lnurlData['comment_allowed'] > 0
|
|
text: qsTr('Message')
|
|
color: Material.accentColor
|
|
}
|
|
TextArea {
|
|
id: comment
|
|
Layout.columnSpan: 2
|
|
Layout.fillWidth: true
|
|
Layout.leftMargin: constants.paddingLarge
|
|
Layout.minimumHeight: 80
|
|
visible: invoiceParser.lnurlData['comment_allowed'] > 0
|
|
wrapMode: TextEdit.Wrap
|
|
placeholderText: qsTr('Enter an (optional) message for the receiver')
|
|
color: text.length > invoiceParser.lnurlData['comment_allowed'] ? constants.colorError : Material.foreground
|
|
}
|
|
|
|
Label {
|
|
Layout.columnSpan: 2
|
|
Layout.leftMargin: constants.paddingLarge
|
|
visible: invoiceParser.lnurlData['comment_allowed'] > 0
|
|
text: qsTr('%1 characters remaining').arg(Math.max(0, (invoiceParser.lnurlData['comment_allowed'] - comment.text.length) ))
|
|
color: constants.mutedForeground
|
|
font.pixelSize: constants.fontSizeSmall
|
|
}
|
|
}
|
|
|
|
FlatButton {
|
|
Layout.topMargin: constants.paddingLarge
|
|
Layout.fillWidth: true
|
|
text: qsTr('Pay')
|
|
icon.source: '../../icons/confirmed.png'
|
|
enabled: valid
|
|
onClicked: {
|
|
invoiceParser.lnurlGetInvoice(comment.text)
|
|
dialog.close()
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|