Merge pull request #1937 from NicolasDorier/retry-vault

Add Retry button if a BTCPay Vault operation fails
This commit is contained in:
Nicolas Dorier 2020-10-08 16:17:10 +09:00 committed by GitHub
commit 10bf914d78
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 44 additions and 10 deletions

View file

@ -1,4 +1,4 @@
<script id="VaultConnection" type="text/template">
<script id="VaultConnection" type="text/template">
<div class="vault-feedback vault-feedback1">
<span class="vault-feedback-icon"></span> <span class="vault-feedback-content"></span>
</div>

View file

@ -95,8 +95,9 @@
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<button class="btn btn-primary vault-retry" style="display:none;" type="button">Retry</button>
<button id="vault-confirm" class="btn btn-primary" style="display:none;"></button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
</div>
</form>
</div>

View file

@ -1,4 +1,4 @@
@model WalletSendVaultModel
@model WalletSendVaultModel
@{
Layout = "../Shared/_NavLayout.cshtml";
ViewData["Title"] = "Manage wallet";
@ -26,6 +26,7 @@
<partial name="SigningContext" for="SigningContext" />
</form>
<div id="vaultPlaceholder"></div>
<button class="btn btn-primary vault-retry" style="display:none;" type="button">Retry</button>
<button id="vault-confirm" class="btn btn-primary" style="display:none;"></button>
</div>
</div>
@ -50,14 +51,15 @@
var html = $("#VaultConnection").html();
$("#vaultPlaceholder").html(html);
var vaultUI = new vaultui.VaultBridgeUI(ws_uri);
if (await vaultUI.askForDevice() && await vaultUI.askSignPSBT({
while (!await vaultUI.askForDevice() || !await vaultUI.askSignPSBT({
walletId: $("#WalletId").val(),
psbt: $("#SigningContext_PSBT").val()
})) {
}
$("#SigningContext_PSBT").val(vaultUI.psbt);
$("#broadcastForm").submit();
}
}
$(function () {
askSign();
});

View file

@ -1,4 +1,4 @@
function getVaultUI() {
function getVaultUI() {
var websocketPath = $("#WebsocketPath").text();
var loc = window.location, ws_uri;
if (loc.protocol === "https:") {
@ -51,8 +51,8 @@ $(document).ready(function () {
$('#btcpayservervault').on('hidden.bs.modal', function () {
vaultUI.closeBridge();
});
if (await vaultUI.askForDevice() && await vaultUI.askForXPubs()) {
displayXPubs(vaultUI.xpub);
while (! await vaultUI.askForDevice() || ! await vaultUI.askForXPubs()) {
}
displayXPubs(vaultUI.xpub);
});
});

View file

@ -1,4 +1,4 @@
/// <reference path="vaultbridge.js" />
/// <reference path="vaultbridge.js" />
/// file: vaultbridge.js
var vaultui = (function () {
@ -73,6 +73,15 @@ var vaultui = (function () {
this.psbt = null;
this.xpub = null;
this.retryShowing = false;
function showRetry() {
var button = $(".vault-retry");
self.retryShowing = true;
button.show();
}
/**
* @param {VaultFeedback} feedback
*/
@ -88,6 +97,7 @@ var vaultui = (function () {
}
else if (feedback.type == "failed") {
icon.addClass("fa fa-times-circle feedback-icon-failed");
showRetry();
}
var content = $(".vault-feedback." + feedback.category + " " + ".vault-feedback-content");
content.html(feedback.txt);
@ -149,7 +159,28 @@ var vaultui = (function () {
return false;
}
this.waitRetryPushed = function () {
var button = $(".vault-retry");
return new Promise(function (resolve) {
button.click(function () {
// Cleanup old feedback
var icon = $(".vault-feedback-icon");
icon.removeClass();
icon.addClass("vault-feedback-icon");
var content = $(".vault-feedback-content");
content.html('');
///////////////////
button.hide();
self.retryShowing = false;
resolve(true);
});
});
};
this.ensureConnectedToBackend = async function () {
if (self.retryShowing) {
await self.waitRetryPushed();
}
if (!self.bridge) {
$("#vault-dropdown").css("display", "none");
show(VaultFeedbacks.vaultLoading);