diff --git a/NftFaucetRadzen/Models/ProviderModel.cs b/NftFaucetRadzen/Models/ProviderModel.cs new file mode 100644 index 0000000..41aa165 --- /dev/null +++ b/NftFaucetRadzen/Models/ProviderModel.cs @@ -0,0 +1,10 @@ +namespace NftFaucetRadzen.Models; + +public class ProviderModel +{ + public Guid Id { get; set; } + public string Name { get; set; } + public string ShortName { get; set; } + public string ImageName { get; set; } + public bool IsSupported { get; set; } +} diff --git a/NftFaucetRadzen/Options/Settings.cs b/NftFaucetRadzen/Options/Settings.cs index f3fafcb..6f15400 100644 --- a/NftFaucetRadzen/Options/Settings.cs +++ b/NftFaucetRadzen/Options/Settings.cs @@ -5,4 +5,5 @@ namespace NftFaucetRadzen.Options; public class Settings { public NetworkModel[] Networks { get; set; } + public ProviderModel[] Providers { get; set; } } diff --git a/NftFaucetRadzen/Pages/ProviderPage.razor.cs b/NftFaucetRadzen/Pages/ProviderPage.razor.cs index 1136c0d..83ea28d 100644 --- a/NftFaucetRadzen/Pages/ProviderPage.razor.cs +++ b/NftFaucetRadzen/Pages/ProviderPage.razor.cs @@ -31,37 +31,48 @@ public partial class ProviderPage : BasicComponent protected override void OnInitialized() { // AppState.Storage.GeneratedKey = EthereumKey.GenerateNew(); - Providers = new[] - { - new CardListItem - { - Id = Guid.Parse("ded55b2b-8139-4251-a0fc-ba620f9727c9"), - ImageName = "ecdsa.svg", - Header = "Generated keys", - IsDisabled = false, - Properties = new[] - { - new CardListItemProperty { Name = "Private key", Value = AppState.Storage.GeneratedKey?.PrivateKey ?? "" }, - new CardListItemProperty { Name = "Address", Value = AppState.Storage.GeneratedKey?.Address ?? "" }, - }, - Badges = Array.Empty(), - }, - new CardListItem - { - Id = Guid.Parse("3367b9bb-f50c-4768-aeb3-9ac14d4c3987"), - ImageName = "metamask_fox.svg", - Header = "Metamask", - IsDisabled = false, - Properties = new[] - { - new CardListItemProperty { Name = "Installed", Value = "yes" }, - new CardListItemProperty { Name = "Connected", Value = "no" }, - }, - Badges = new[] - { - new CardListItemBadge { Style = BadgeStyle.Success, Text = "Recommended" }, - }, - } - }; + Providers = Settings.Providers.Select(MapCardListItem).ToArray(); + EnhanceProviderModels(Providers); } + + private void EnhanceProviderModels(CardListItem[] models) + { + var genKeyModel = models.FirstOrDefault(x => x.Id == Guid.Parse("ded55b2b-8139-4251-a0fc-ba620f9727c9")); + if (genKeyModel != null) + { + genKeyModel.Properties = new[] + { + new CardListItemProperty { Name = "Private key", Value = AppState.Storage.GeneratedKey?.PrivateKey ?? "" }, + new CardListItemProperty { Name = "Address", Value = AppState.Storage.GeneratedKey?.Address ?? "" }, + }; + } + + var metamaskModel = models.FirstOrDefault(x => x.Id == Guid.Parse("3367b9bb-f50c-4768-aeb3-9ac14d4c3987")); + if (metamaskModel != null) + { + metamaskModel.Properties = new[] + { + new CardListItemProperty { Name = "Installed", Value = "yes" }, + new CardListItemProperty { Name = "Connected", Value = "no" }, + }; + metamaskModel.Badges = new[] + { + new CardListItemBadge { Style = BadgeStyle.Success, Text = "Recommended" }, + }; + } + } + + private static CardListItem MapCardListItem(ProviderModel model) + => new CardListItem + { + Id = model.Id, + ImageName = model.ImageName, + Header = model.Name, + IsDisabled = !model.IsSupported, + Properties = Array.Empty(), + Badges = new[] + { + !model.IsSupported ? new CardListItemBadge { Style = BadgeStyle.Light, Text = "Not Supported" } : null, + }.Where(x => x != null).ToArray(), + }; } diff --git a/NftFaucetRadzen/Shared/NavMenu.razor b/NftFaucetRadzen/Shared/NavMenu.razor index 22e7f0b..af6a97e 100644 --- a/NftFaucetRadzen/Shared/NavMenu.razor +++ b/NftFaucetRadzen/Shared/NavMenu.razor @@ -18,7 +18,7 @@ diff --git a/NftFaucetRadzen/Shared/NavMenu.razor.cs b/NftFaucetRadzen/Shared/NavMenu.razor.cs index 72de5a6..bf5663b 100644 --- a/NftFaucetRadzen/Shared/NavMenu.razor.cs +++ b/NftFaucetRadzen/Shared/NavMenu.razor.cs @@ -8,6 +8,8 @@ public partial class NavMenu : BasicComponent { protected Guid? SelectedNetworkId => AppState.Storage.SelectedNetworks?.FirstOrDefault(); protected string SelectedNetworkName => Settings.Networks.FirstOrDefault(x => x.Id == SelectedNetworkId)?.ShortName; + protected Guid? SelectedProviderId => AppState.Storage.SelectedProviders?.FirstOrDefault(); + protected string SelectedProviderName => Settings.Providers.FirstOrDefault(x => x.Id == SelectedProviderId)?.ShortName; private bool CollapseNavMenu { get; set; } = true; diff --git a/NftFaucetRadzen/wwwroot/appsettings.json b/NftFaucetRadzen/wwwroot/appsettings.json index c871bf1..eccd64c 100644 --- a/NftFaucetRadzen/wwwroot/appsettings.json +++ b/NftFaucetRadzen/wwwroot/appsettings.json @@ -378,5 +378,21 @@ "Erc721ContractAddress": null, "Erc1155ContractAddress": null } + ], + "Providers": [ + { + "Id": "ded55b2b-8139-4251-a0fc-ba620f9727c9", + "Name": "Generated keys", + "ShortName": "new keys", + "ImageName": "ecdsa.svg", + "IsSupported": true + }, + { + "Id": "3367b9bb-f50c-4768-aeb3-9ac14d4c3987", + "Name": "Metamask", + "ShortName": "Metamask", + "ImageName": "metamask_fox.svg", + "IsSupported": true + } ] }