Lieb-Website/Lieb/Pages/Raids/RaidOverview/RaidOverview.razor

150 lines
4.5 KiB
Text

@page "/raidoverview"
@page "/raidoverview/{_eventType}"
@using Lieb.Data
@using System.Security.Claims
@using Lieb.Models
@using Lieb.Models.GuildWars2.Raid
@inject RaidService RaidService
@inject UserService UserService
@inject AuthenticationStateProvider AuthenticationStateProvider
<h3>Raid Overview</h3>
<AuthorizeView Policy="@Constants.Roles.RaidLead.Name">
<div class="nav-item px-3">
<NavLink class="nav-link" href="raidedit">
<span class="oi oi-plus" aria-hidden="true"></span> Add Raid
</NavLink>
</div>
</AuthorizeView>
<br />
<label>
From:
<input type="date" value="@_startDate.ToString("yyyy-MM-dd")" @onchange="args => StartFilterChanged(args)" />
To:
<input type="date" value="@_endDate.ToString("yyyy-MM-dd")" @onchange="args => EndFilterChanged(args)" />
Raid Group:
<select @onchange="args => GroupFilterChanged(args)" >
<option value="">All</option>
<option value="No Group">No Group</option>
@foreach(LiebRole role in UserService.GetLiebRoles())
{
if (role.Type != RoleType.SystemRole)
{
<option value="@role.RoleName">@role.RoleName</option>
}
}
</select>
@if(string.IsNullOrEmpty(_eventType))
{
<label>Event Type:</label>
<select @onchange="args => EventTypeFilterChanged(args)" >
<option value="">All</option>
@foreach(EventType eventType in (EventType[]) Enum.GetValues(typeof(EventType)))
{
<option value="@eventType">@eventType.ToString()</option>
}
</select>
}
</label>
<br />
@foreach (var raid in _raidsToShow.OrderBy(r => r.StartTimeUTC))
{
<br />
<RaidDetails _raid=@raid _user=@_user/>
}
@code
{
[Parameter]
public string _eventType { get; set; } = string.Empty;
private List<Raid> _raids;
private LiebUser? _user;
private DateTime _startDate = DateTime.Now.Date;
private DateTime _endDate = DateTime.Now.Date.AddDays(15).AddSeconds(-1);
private string _filterRole = string.Empty;
private string _filterEventType = string.Empty;
private List<Raid> _raidsToShow;
protected override async Task OnInitializedAsync()
{
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
if (authState.User.Identity.IsAuthenticated)
{
ulong discordId = ulong.Parse(authState.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value);
_user = UserService.GetLiebUser(discordId);
}
_filterEventType = _eventType;
_raids = RaidService.GetRaids();
ApplyFilter();
}
protected override void OnParametersSet()
{
_filterEventType = _eventType;
ApplyFilter();
}
private void StartFilterChanged(ChangeEventArgs e)
{
if(!DateTime.TryParse(e.Value.ToString(), out _startDate))
{
_startDate = DateTime.UnixEpoch;
}
ApplyFilter();
}
private void EndFilterChanged(ChangeEventArgs e)
{
if(DateTime.TryParse(e.Value.ToString(), out _endDate))
{
_endDate.AddDays(1).AddSeconds(-1);
}
else
{
_endDate = DateTime.MaxValue.Date;
}
ApplyFilter();
}
private void GroupFilterChanged(ChangeEventArgs e)
{
_filterRole = e.Value?.ToString();
ApplyFilter();
}
private void EventTypeFilterChanged(ChangeEventArgs e)
{
_filterEventType = e.Value?.ToString();
ApplyFilter();
}
private void ApplyFilter()
{
if(String.IsNullOrEmpty(_filterRole))
{
_raidsToShow = _raids.Where(r => r.StartTimeUTC > _startDate && r.StartTimeUTC < _endDate).ToList();
}
else if(_filterRole == "No Group")
{
_raidsToShow = _raids.Where(r => r.StartTimeUTC > _startDate && r.StartTimeUTC < _endDate && string.IsNullOrEmpty(r.RequiredRole)).ToList();
}
else
{
_raidsToShow = _raids.Where(r => r.StartTimeUTC > _startDate && r.StartTimeUTC < _endDate && r.RequiredRole == _filterRole).ToList();
}
if(!String.IsNullOrEmpty(_filterEventType))
{
_raidsToShow = _raidsToShow.Where(r => r.EventType.ToString() == _filterEventType).ToList();
}
}
}