@page "/useredit"
@page "/useredit/{userId}"
@using Lieb.Data
@using Lieb.Models
@using Lieb.Models.GuildWars2
@using System.ComponentModel.DataAnnotations
@using System.Security.Claims
@inject UserService UserService
@inject NavigationManager NavigationManager
@inject AuthenticationStateProvider AuthenticationStateProvider
@inject IJSRuntime JsRuntime
UserEdit
@code {
[Parameter]
public string userId { get; set; }
private LiebUser _user;
private int _editingUserRights = 0;
private List _roles;
protected override async Task OnInitializedAsync()
{
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
ulong discordId = ulong.Parse(authState.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value);
LiebUser editingUser = UserService.GetLiebUser(discordId);
foreach(RoleAssignment assignment in editingUser.RoleAssignments)
{
if(_editingUserRights < assignment.LiebRole.Level)
{
_editingUserRights = assignment.LiebRole.Level;
}
}
if(!string.IsNullOrEmpty(userId) && int.TryParse(userId, out int parsedId))
{
_user = UserService.GetLiebUser(parsedId);
_roles = UserService.GetLiebRoles();
}
else
{
NavigationManager.NavigateTo("useroverview");
}
}
async Task RoleStatusChanged(LiebRole role, ChangeEventArgs args)
{
bool isChecked = bool.Parse(args.Value.ToString());
RoleAssignment? assignment = _user.RoleAssignments.FirstOrDefault(a => a.LiebRoleId == role.LiebRoleId);
if(isChecked && assignment == null)
{
RoleAssignment roleAssignment = new RoleAssignment()
{
LiebRoleId = role.LiebRoleId,
LiebUserId = _user.LiebUserId
};
_user.RoleAssignments.Add(roleAssignment);
}
else if(!isChecked && assignment != null)
{
_user.RoleAssignments.Remove(assignment);
}
}
private async Task HandleValidSubmit()
{
await UserService.EditUserRoles(_user);
NavigationManager.NavigateTo("useroverview");
}
}