@@ -22,8 +22,13 @@ Page {
2222 property bool hasAddress: root .request !== null && root .request .address !== " "
2323 property bool hasAddressType: receiveOptionsPopup .showAddressType && hasAddress && root .request !== null && root .request .addressType !== " "
2424 property bool showAddressTypeSelector: receiveOptionsPopup .showAddressType && root .request !== null && root .request .isEditing && ! hasAddress
25- property var availableAddressTypes: wallet ? wallet .availableReceiveAddressTypes () : []
25+ property bool canGetAddresses: wallet ? wallet .canGetAddresses : false
26+ property bool canUnlockForAddress: wallet ? wallet .canManagePassphrase && wallet .isEncrypted && wallet .isLocked : false
27+ property var availableAddressTypes: canGetAddresses && wallet ? wallet .availableReceiveAddressTypes () : []
2628 property bool hasSavedRequest: root .request !== null && root .request .id !== " "
29+ property string requestErrorText: " "
30+
31+ signal addressHistoryRequested ()
2732
2833 Binding {
2934 target: root .request ? root .request .amount : null
@@ -67,6 +72,30 @@ Page {
6772 root .request .addressType = root .selectedReceiveAddressType ()
6873 }
6974
75+ function paymentRequestFallbackError () {
76+ return root .wallet && root .wallet .transactionError .length > 0
77+ ? root .wallet .transactionError
78+ : qsTr (" The payment request could not be generated." )
79+ }
80+
81+ function handleCommitPaymentRequestFailure () {
82+ if (root .wallet && root .wallet .transactionNeedsUnlock ) {
83+ receivePassphrasePopup .errorText = " "
84+ receivePassphrasePopup .open ()
85+ return
86+ }
87+ root .requestErrorText = root .paymentRequestFallbackError ()
88+ }
89+
90+ function commitPaymentRequest () {
91+ if (! root .wallet || ! root .request ) return
92+ root .requestErrorText = " "
93+ root .ensureAddressTypeSelected ()
94+ if (! root .wallet .commitPaymentRequest ()) {
95+ root .handleCommitPaymentRequestFailure ()
96+ }
97+ }
98+
7099 function formatAddressRichText (addr ) {
71100 if (! addr) return " "
72101 var c1 = Theme .color .neutral9
@@ -164,6 +193,7 @@ Page {
164193 showRequestActions: root .hasSavedRequest
165194 onUseAsTemplate: root .useCurrentRequestAsTemplate ()
166195 onDeleteFromHistory: root .deleteCurrentRequest ()
196+ onViewAddressHistory: root .addressHistoryRequested ()
167197 }
168198 }
169199
@@ -635,11 +665,24 @@ Page {
635665 Layout .topMargin : 4
636666 }
637667
668+ CoreText {
669+ objectName: " requestPaymentErrorText"
670+ Layout .fillWidth : true
671+ Layout .topMargin : 12
672+ visible: root .requestErrorText .length > 0
673+ text: root .requestErrorText
674+ color: Theme .color .red
675+ font .pixelSize : 15
676+ horizontalAlignment: Text .AlignLeft
677+ wrapMode: Text .WordWrap
678+ }
679+
638680 ContinueButton {
639681 id: generateButton
640682 objectName: " requestPaymentGenerateButton"
641683 Layout .fillWidth : true
642684 Layout .topMargin : 30
685+ enabled: root .request !== null && (! root .request .isEditing || root .hasAddress || root .canGetAddresses || root .canUnlockForAddress )
643686 text: {
644687 if (! root .request || root .request .isEditing ) {
645688 return root .request && root .request .id !== " "
@@ -651,9 +694,9 @@ Page {
651694 onClicked: {
652695 if (! root .request ) return
653696 if (root .request .isEditing ) {
654- root .ensureAddressTypeSelected ()
655- root .wallet .commitPaymentRequest ()
697+ root .commitPaymentRequest ()
656698 } else {
699+ root .requestErrorText = " "
657700 root .request .clear ()
658701 root .ensureAddressTypeSelected ()
659702 }
@@ -832,6 +875,32 @@ Page {
832875 }
833876 }
834877
878+ Components .WalletPassphrasePopup {
879+ id: receivePassphrasePopup
880+ parent: Overlay .overlay
881+ width: Math .min (420 , root .width - 40 )
882+ popupObjectName: " receivePassphrasePopup"
883+ passphraseFieldObjectName: " receivePassphraseField"
884+ errorTextObjectName: " receivePassphraseErrorText"
885+ cancelButtonObjectName: " receivePassphraseCancelButton"
886+ confirmButtonObjectName: " receivePassphraseConfirmButton"
887+ titleText: qsTr (" Enter wallet password" )
888+ descriptionText: qsTr (" Enter your wallet password to generate this payment request." )
889+ confirmText: qsTr (" Unlock and generate" )
890+ busyConfirmText: qsTr (" Unlocking..." )
891+ onSubmitted : (passphrase ) => {
892+ receivePassphrasePopup .busy = true
893+ if (root .wallet && root .wallet .commitPaymentRequestWithPassphrase (passphrase)) {
894+ receivePassphrasePopup .busy = false
895+ receivePassphrasePopup .close ()
896+ root .requestErrorText = " "
897+ return
898+ }
899+ receivePassphrasePopup .busy = false
900+ receivePassphrasePopup .errorText = root .paymentRequestFallbackError ()
901+ }
902+ }
903+
835904 Components .QRCodePopup {
836905 id: qrPopup
837906 objectName: " requestPaymentQRPopup"
0 commit comments