@page "/gw2accountedit"
@page "/gw2accountedit/{gw2Id}"
@using Lieb.Data
@using Lieb.Models
@using Lieb.Models.GuildWars2
@using System.ComponentModel.DataAnnotations
@using System.Security.Claims
@inject GuildWars2AccountService GuildWars2AccountService
@inject GuildWars2BuildService GuildWars2BuildService
@inject UserService UserService
@inject NavigationManager NavigationManager
@inject AuthenticationStateProvider AuthenticationStateProvider
@inject IJSRuntime JsRuntime
Manage Guild Wars 2 Account
@_saveMessage
@if (_account.GuildWars2AccountId != 0)
{
}
@code {
[Parameter]
public string gw2Id { get; set; }
public GuildWars2Account _account;
private LiebUser _user;
private string _saveMessage = string.Empty;
private List _builds;
private List _buildsToShow;
private GuildWars2Class? _filterClass;
private bool _filterAlac = false;
private bool _filterQuick = false;
private bool _filterMight = false;
private DamageType? _filterDamageType;
protected override async Task OnInitializedAsync()
{
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
ulong discordId = ulong.Parse(authState.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value);
_user = UserService.GetLiebUserGW2AccountOnly(discordId);
if(!string.IsNullOrEmpty(gw2Id) && int.TryParse(gw2Id, out int parsedId) && _user.GuildWars2Accounts.Where(a => a.GuildWars2AccountId == parsedId).Any())
{
_account = GuildWars2AccountService.GetAccount(parsedId);
}
else
{
_account = new GuildWars2Account();
}
_builds = GuildWars2BuildService.GetBuilds();
_buildsToShow = _builds;
}
async Task EquippedStatusChanged(int buildId, ChangeEventArgs args)
{
bool isEquipped = bool.Parse(args.Value.ToString());
if(isEquipped)
{
await GuildWars2AccountService.AddBuild(_account.GuildWars2AccountId, buildId);
}
else
{
await GuildWars2AccountService.RemoveBuild(_account.GuildWars2AccountId, buildId);
}
_account = GuildWars2AccountService.GetAccount(_account.GuildWars2AccountId);
}
async Task TankingStatusChanged(int buildId, ChangeEventArgs args)
{
bool canTank = bool.Parse(args.Value.ToString());
await GuildWars2AccountService.ChangeTankStatus(_account.GuildWars2AccountId, buildId, canTank);
}
async Task DeleteAccountClicked()
{
bool confirmed = await JsRuntime.InvokeAsync("confirm", "Are you sure you want to delete this Account?\nThis will sign you off in every raid in which you are signed up with this account.");
if (confirmed)
{
await GuildWars2AccountService.DeleteAccount(_account.GuildWars2AccountId);
NavigationManager.NavigateTo("accountedit");
}
}
private async Task HandleValidSubmit()
{
await GuildWars2AccountService.AddOrEditAccount(_account, _user.Id);
_account = GuildWars2AccountService.GetAccount(_account.GuildWars2AccountId);
_saveMessage = "changes saved successfully";
}
private void ChangeClassFilter( ChangeEventArgs e)
{
if(Enum.TryParse(e.Value?.ToString(), out GuildWars2Class gw2Class))
{
_filterClass = gw2Class;
}
else
{
_filterClass = null;
}
ApplyFilter();
}
private void ChangeDamageTypeFilter( ChangeEventArgs e)
{
if(Enum.TryParse(e.Value?.ToString(), out DamageType damage))
{
_filterDamageType = damage;
}
else
{
_filterDamageType = null;
}
ApplyFilter();
}
private void AlacStatusChanged(ChangeEventArgs args)
{
_filterAlac = bool.Parse(args.Value.ToString());
ApplyFilter();
}
private void QuickStatusChanged(ChangeEventArgs args)
{
_filterQuick = bool.Parse(args.Value.ToString());
ApplyFilter();
}
private void MightStatusChanged(ChangeEventArgs args)
{
_filterMight = bool.Parse(args.Value.ToString());
ApplyFilter();
}
private void ApplyFilter()
{
_buildsToShow = _builds;
if(_filterClass != null)
{
_buildsToShow = _buildsToShow.Where(b => b.Class == _filterClass).ToList();
}
if(_filterAlac)
{
_buildsToShow = _buildsToShow.Where(b => b.Alacrity).ToList();
}
if(_filterQuick)
{
_buildsToShow = _buildsToShow.Where(b => b.Quickness).ToList();
}
if(_filterMight)
{
_buildsToShow = _buildsToShow.Where(b => b.Might).ToList();
}
if(_filterDamageType != null)
{
_buildsToShow = _buildsToShow.Where(b => b.DamageType == _filterDamageType).ToList();
}
}
}