136 lines
4.1 KiB
Text
136 lines
4.1 KiB
Text
@page "/raidoverview"
|
|
@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>
|
|
Event Type:
|
|
<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
|
|
{
|
|
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);
|
|
}
|
|
|
|
_raids = RaidService.GetRaids();
|
|
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();
|
|
}
|
|
}
|
|
}
|