Add failure screen and Retry button

This commit is contained in:
Ivan Yaremenchuk 2022-04-04 01:38:53 +02:00
parent 76eb1415df
commit c932cd686c
2 changed files with 30 additions and 8 deletions

View File

@ -1,17 +1,27 @@
@page "/step4"
@inherits Step4Component
@if (TransactionHash != null)
@if (TransactionHash == null)
{
<TextWithIcon Text="Minting is in progress... Please wait." Icon="loading-3-quarters" Color="blue" Level="4" />
}
else if (TransactionHash.Value.IsSuccess)
{
<Result Status="success"
Title="Transaction for token minting was successfully created!"
Title="Transaction was successfully created!"
SubTitle="@($"Transaction: {TransactionHash}. Please wait for 1-5 minutes till transaction is completed.")">
<Extra>
<Button Type="primary" OnClick="@Reset">Start again</Button>
<Button Type="primary" OnClick="@Reset">Start new mint</Button>
</Extra>
</Result>
}
else
{
<TextWithIcon Text="Minting is in progress... Please wait." Icon="loading-3-quarters" Color="blue" Level="4" />
<Result Status="error"
Title="Failed to create transaction"
SubTitle="@("Please ensure that you approve created transactions in Metamask")">
<Extra>
<Button Type="primary" OnClick="@Retry">Try again</Button>
</Extra>
</Result>
}

View File

@ -1,9 +1,10 @@
using System.Text;
using CSharpFunctionalExtensions;
using Microsoft.AspNetCore.Components;
using NftFaucet.Components;
using NftFaucet.Extensions;
using NftFaucet.Models.Enums;
using NftFaucet.Services;
using NftFaucet.Utils;
namespace NftFaucet.Pages;
@ -15,7 +16,7 @@ public class Step4Component : BasicComponent
[Inject]
public IEthereumTransactionService TransactionService { get; set; }
protected string TransactionHash { get; set; }
protected Result<string>? TransactionHash { get; set; }
protected override async Task OnInitializedAsync()
{
@ -31,14 +32,18 @@ public class Step4Component : BasicComponent
public async Task Mint()
{
var network = AppState.Metamask.Network!.Value;
var address = AppState.Storage.DestinationAddress;
var uri = AppState.Storage.TokenUrl;
if (AppState.Storage.TokenType == TokenType.ERC721)
{
TransactionHash = await TransactionService.MintErc721Token(AppState.Metamask.Network!.Value, AppState.Storage.DestinationAddress, AppState.Storage.TokenUrl);
TransactionHash = await ResultWrapper.Wrap(TransactionService.MintErc721Token(network, address, uri));
}
else
{
var amount = (int) AppState.Storage.TokenAmount;
TransactionHash = await TransactionService.MintErc1155Token(AppState.Metamask.Network!.Value, AppState.Storage.DestinationAddress, amount, AppState.Storage.TokenUrl);
TransactionHash = await ResultWrapper.Wrap(TransactionService.MintErc1155Token(network, address, amount, uri));
}
RefreshMediator.NotifyStateHasChangedSafe();
@ -49,4 +54,11 @@ public class Step4Component : BasicComponent
AppState.Reset();
UriHelper.NavigateToRelative("/");
}
protected async Task Retry()
{
TransactionHash = null;
RefreshMediator.NotifyStateHasChangedSafe();
Mint();
}
}